Excellent, Aleksey. I got your idea with using the signbit of dividend.
Thanks for your great
and beautiful equations. ^_^
Xiaoming
On Mon, Jul 7, 2008 at 6:50 PM, Aleksey Shipilev <aleksey.shipilev@gmail.com>
wrote:
> Hi, Xiaoming!
>
> Yep, signed integer division is much tougher than we expected :(
>
> The answer on (1) question is:
>
> Baseline: q = a / (1 << d);
> Optimized: q = (a + [(1 << d)  1] & (a >> 31)) >> d;
>
> There's additional increment [(1 << d)  1] which contributes to
> correct rounding, which is added when a is negative, checked by ANDing
> with signextended (a >> 31). But anyway, the mask would be computed
> in the compile time, so the calculation would be complicated only with
> three additional operations: shift, and, add. Nevertheless, they
> should be faster than division.
>
> The answer on (2) question is:
>
> Don't deal with negative divisors so far, generate conventional
> division for them.
>
> Thanks,
> Aleksey.
>
> On Mon, Jul 7, 2008 at 10:48 AM, xiaoming gu <xiaoming.gu@gmail.com>
> wrote:
> > Hi, all. I have two problems now.
> >
> > 1. Roundup problem with division and shift right that "The division
> > operator rounds towards 0, but the right
> > shift operator (>>) rounds towards negative infinity." For example
> 5/4=1
> > but 5>>2=2.
> >
> > 2. When the divisor is negative, how to deal with the shift operation?
> It's
> > meaningless to do shift with a
> > number of negative bits.
> >
> > Any comments? Thanks.
> >
> > Xiaoming
> >
> > On Mon, Jul 7, 2008 at 11:57 AM, XiaoFeng Li <xiaofeng.li@gmail.com>
> wrote:
> >
> >> On Mon, Jul 7, 2008 at 11:31 AM, xiaoming gu <xiaoming.gu@gmail.com>
> >> wrote:
> >> > With testing, I find SAR is the "signed shift right" to replace div.
> So
> >> the
> >> > comments about SAR and SHR in Enc_defs.h are misplaced.
> >>
> >> So I assume you will correct it in your patch. :)
> >>
> >> Thanks,
> >> xiaofeng
> >>
> >> > Xiaoming
> >> >
> >> > On Mon, Jul 7, 2008 at 8:24 AM, xiaoming gu <xiaoming.gu@gmail.com>
> >> wrote:
> >> >
> >> >> Hi, everyone. Which one is signed shift right, SAR or SHR? It seems
> >> there
> >> >> are some conflicts between
> >> >> the definitions (in Enc_defs.h) and the usages (in
> >> >> Ia32InstCodeSelector.cpp). Thanks.
> >> >>
> >> >> Xiaoming
> >> >>
> >> >>
> >> >> On Sun, Jul 6, 2008 at 4:47 PM, Egor Pasko <egor.pasko@gmail.com>
> >> wrote:
> >> >>
> >> >>> On the 0x479 day of Apache Harmony xiaoming gu wrote:
> >> >>> > Aleksey, one question. Is there any easy way to know which
binary
> >> >>> > instructions are generated at runtime? Thanks.
> >> >>>
> >> >>> Use command line options [1].
> >> >>>
> >> >>> I suggest this set:
> >> >>>
> >> >>> Xem:server_static XX:jit.p.filter=.main
> >> >>> XX:jit.p.arg.log=ct,irdump,dotdump
> >> >>>
> >> >>>
> >> >>> [1] http://harmony.apache.org/cmd_options.html
> >> >>>
> >> >>>
> >> >>> > Xiaoming
> >> >>> >
> >> >>> > On Fri, Jul 4, 2008 at 6:17 PM, xiaoming gu <xiaoming.gu@
> gmail.com>
> >> >>> wrote:
> >> >>> >
> >> >>> > > Got it. I'll take the 1st way and the left work is pretty
clear.
> >> >>> Thanks.
> >> >>> > >
> >> >>> > > Xiaoming
> >> >>> > >
> >> >>> > >
> >> >>> > > On Fri, Jul 4, 2008 at 6:11 PM, Aleksey Shipilev <
> >> >>> > > aleksey.shipilev@gmail.com> wrote:
> >> >>> > >
> >> >>> > >> On Fri, Jul 4, 2008 at 2:04 PM, Aleksey Shipilev
> >> >>> > >> <aleksey.shipilev@gmail.com> wrote:
> >> >>> > >> > do "shl reg,<value>"
> >> >>> > >> Of course, it's "SHIFT RIGHT", so "shr reg, <value>".
> >> >>> > >>
> >> >>> > >> Thanks,
> >> >>> > >> Aleksey.
> >> >>> > >>
> >> >>> > >
> >> >>> > >
> >> >>>
> >> >>> 
> >> >>> Egor Pasko
> >> >>>
> >> >>>
> >> >>
> >> >
> >>
> >>
> >>
> >> 
> >> http://xiaofeng.blogspot.com
> >>
> >
>
