Excellent, Aleksey. I got your idea with using the sign-bit of dividend. Thanks for your great and beautiful equations. ^_^
Xiaoming On Mon, Jul 7, 2008 at 6:50 PM, Aleksey Shipilev <[EMAIL PROTECTED]> 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 sign-extended (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 <[EMAIL PROTECTED]> > wrote: > > Hi, all. I have two problems now. > > > > 1. Round-up 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, Xiao-Feng Li <[EMAIL PROTECTED]> > wrote: > > > >> On Mon, Jul 7, 2008 at 11:31 AM, xiaoming gu <[EMAIL PROTECTED]> > >> 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 <[EMAIL PROTECTED]> > >> 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 <[EMAIL PROTECTED]> > >> 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 < > >> >>> > > [EMAIL PROTECTED]> wrote: > >> >>> > > > >> >>> > >> On Fri, Jul 4, 2008 at 2:04 PM, Aleksey Shipilev > >> >>> > >> <[EMAIL PROTECTED]> wrote: > >> >>> > >> > do "shl reg,<value>" > >> >>> > >> Of course, it's "SHIFT RIGHT", so "shr reg, <value>". > >> >>> > >> > >> >>> > >> Thanks, > >> >>> > >> Aleksey. > >> >>> > >> > >> >>> > > > >> >>> > > > >> >>> > >> >>> -- > >> >>> Egor Pasko > >> >>> > >> >>> > >> >> > >> > > >> > >> > >> > >> -- > >> http://xiao-feng.blogspot.com > >> > > >
