PS. Once we fix that, let's increase the VM_Proxy's minor version. I need that function to work correctly.
Cheers, - Andreas
Andreas Raab wrote:
Hi Guys -
I don't know if you ever used the above method but it's horribly, horribly broken. I wrote a little test primitive (see below) that simply used signed64BitIntegerFor(signed64BitValueOf(oop)) and then a loop like here:
0 to: 63 do:[:i| n := 1 bitShift: i. (self test64BitInt: n) = n ifFalse:[self halt: i]. ].
Starting from i = 31 Every. Last. Result. Is Wrong. Can you imagine?
It gets even better, since it's broken in different ways: For i=31 the result is negated, for everything beyound 31 the resulting large integer is non-normalized (and therefore not comparing correctly).
Any ideas?
- Andreas
PS. The primitive:
TestPlugin>>testSigned64BitInt | oop | self export: true. interpreterProxy methodArgumentCount = 1 ifFalse:[^interpreterProxy primitiveFail]. oop := interpreterProxy stackValue: 0. oop := interpreterProxy signed64BitIntegerFor: (interpreterProxy signed64BitValueOf: oop). interpreterProxy failed ifFalse:[ interpreterProxy pop: 2 thenPush: oop. ].