[Vm-dev] primitiveHighBit interesting bug

Eliot Miranda eliot.miranda at gmail.com
Fri Jan 15 05:21:06 UTC 2021


I’ll fix it tomorrow morning.

Thanks!!

_,,,^..^,,,_ (phone)

> On Jan 14, 2021, at 6:36 PM, Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com> wrote:
> 
> 
> Ah! Got it!
> The generated code is incorrect!
> Source:
> 
>            leadingZeroCount = 0
>                ifTrue:
>                    ["highBit is not defined for negative Integer"
>                    self primitiveFail]
>                ifFalse:
>                    ["Nice bit trick: 1-based high-bit is (32 - clz) -
> 1 to account for tag bit.
>                    This is like two-complement - clz - 1 on 5 bits,
> or in other words a bit-invert operation clz ^16r1F"
>                    self pop: 1 thenPushInteger: (leadingZeroCount
> bitXor: (BytesPerWord * 8 - 1))].
>            ^self].
> 
> Generated:
> 
>        if (leadingZeroCount == 0) {
> 
>                /* highBit is not defined for negative Integer */
>                /* begin primitiveFail */
>                if (!GIV(primFailCode)) {
>                        GIV(primFailCode) = 1;
>                }
>        }
>        /* begin pop:thenPushInteger: */
>        longAtput((sp = GIV(stackPointer) + ((0) * BytesPerWord)),
> (((usqInt)(leadingZeroCount ^ ((BytesPerWord * 8) - 1)) << 3) | 1));
>        GIV(stackPointer) = sp;
> 
> The ifFalse: branch has been gobbled...
> Hence with always push (0 bitXor: 16r3F) as small integer in place of
> the receiver, the fail the primitive...
> The fallback code proceeds with 16r3F and answers 6... Correct.
> 
> WE MUST FIX THE GENERATOR ASAP !
> 
>> Le ven. 15 janv. 2021 à 03:15, Nicolas Cellier
>> <nicolas.cellier.aka.nice at gmail.com> a écrit :
>> 
>> Hi all,
>> I got this on uptodate Mingw Win 64 bits Squeak.cog.spur VM:
>> 
>> (1to: 8) collect: [:i|-2942842961920 highBitOfMagnitude]
>> -> #(6 6 42 42 42 42 42 42)
>> 
>> That is correct once jitted, but wrong first two times...
>> I just can't understand when/how it fails by reading the code...
>> Any clue?
>> 
>> Nicolas


More information about the Vm-dev mailing list