You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Xiaoming Gu (JIRA)" <ji...@apache.org> on 2008/10/08 08:11:44 UTC

[jira] Updated: (HARMONY-5901) [drlvm][jit]integer MUL, DIV and REM strength reduction

     [ https://issues.apache.org/jira/browse/HARMONY-5901?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Xiaoming Gu updated HARMONY-5901:
---------------------------------

    Attachment: H5901-V8.patch

This message is for V8 patch.

1. Turn on MUL strength reduction even in a simplify pass.
     It was only turned on in a latesimplify pass.
2. Only do MUL strength reduction for the following two cases.
      a) constant multiplier d is positive and less than 32
      b) d is a power of 2
3. Some reductions for the above a) case are changed to another way to get improvement.

The available MUL strength reduction in multiplybyconstant.cpp is too complex without any cost model. This version is conservative but guarantees reduction always brings improvement. I find a problem on register allocation in the testings (see https://issues.apache.org/jira/browse/HARMONY-5992), which makes hard to evaluate reductions. I'll fix that problem first then relax the conservative reduction policy later.

> [drlvm][jit]integer MUL, DIV and REM strength reduction
> -------------------------------------------------------
>
>                 Key: HARMONY-5901
>                 URL: https://issues.apache.org/jira/browse/HARMONY-5901
>             Project: Harmony
>          Issue Type: Improvement
>          Components: DRLVM
>            Reporter: Xiaoming Gu
>         Attachments: 5901.patch, H5901-V2.patch, H5901-V3.patch, H5901-V4.patch, H5901-V5.patch, H5901-V6.patch, H5901-V7.patch, H5901-V8.patch
>
>
> 1. Mulitiplication replacement
>     a. It's about integer multiplication.
>     b. One of two multipliers is a power of 2.
>     c. The power of 2 could be negative.
>     For example, 23*4 is transformed to 23<<2 and 23*(-4) is transformed to (23<<2)*(-1).
> 2. Division replacement
>     a. It's about integer division.
>     b. The divisor is a power of 2.
>     c. The power of 2 could be negative.
>     d. Because of round-up difference between division and shift right, the following equations from Aleksey are used.
>               Baseline: q = a / (1 << d);
>               Optimized: q = (a + [(1 << d) - 1] & (a >> 31)) >> d;
>     For example, 23/4 is transformed to  (23+((1<<2)-1)&(23>>31))>>2. and (-23)/(-4) is transformed to ((-23+((1<<2)-1)&(-23>>31))>>2)*(-1).
> 3. Comments for SAR and SHR swapped
>      The comments for the two similar operations were misplaced in working_vm/vm/port/src/encoder/ia32_em64t.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.