2014-12-02 1:12 GMT+01:00 commits@source.squeak.org:
Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.960.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.960 Author: eem Time: 1 December 2014, 4:11:42.232 pm UUID: 1b13b4c0-c9f8-4441-a0fa-08b7cd13a92a Ancestors: VMMaker.oscog-eem.959
Add some SmallFloat64 tests. Hence fix isSmallFloatValue: for simulation.
=============== Diff against VMMaker.oscog-eem.959 ===============
Item was changed: ----- Method: Spur64BitMemoryManager>>isSmallFloatValue: (in category 'interpreter access') ----- isSmallFloatValue: aFloat <inline: true> <var: #aFloat type: #double> | exponent | exponent := self cCode: [| rawFloat | rawFloat := (self cCoerce: (self addressOf: aFloat) to: 'sqLong *') at: 0.
Pointer aliasing usage apart, shouldn't it be usqLong * ?
rawFloat >> 52 bitAnd:
16r7FF]
inSmalltalk: [self
smallFloatExponentOffset
+ (aFloat
isFinite
ifTrue:
- [aFloat = 0.0
ifTrue: [0]
ifFalse: [aFloat exponent + 127]]
ifFalse: "Float nan & Float infinity exponent = -1, so mask to make > 0"
- [aFloat exponent bitAnd: SmallInteger maxVal])].
^exponent
between: self smallFloatExponentOffset
and: 255 + self smallFloatExponentOffset!
inSmalltalk: [aFloat exponent].
^exponent between: -127 and: 127!
Item was added:
- ----- Method: StackInterpreterTests>>testImmediateFloats (in category
'tests') -----
- testImmediateFloats
"self new testImmediateFloats"
| vm smm smallFloatOop |
vm := StackInterpreterSimulator newWithOptions: #(ObjectMemory
Spur64BitMemoryManager).
smm := vm objectMemory.
#(0.0 -0.0 1.0e38 -1.0e38 1.0e-38 -1.0e-38 2.0 -2.0) do:
[:f| | sfo |
vm initPrimCall.
self shouldnt: [sfo := smm smallFloatObjectOf: f] raise:
Error.
self assert: (smm smallFloatValueOf: sfo) equals: f.
self assert: ((smm exponentOfSmallFloat: sfo) between:
-126 and: 127)].
{Float nan. Float infinity. Float negativeInfinity. 1.0e-39.
1.0e39 } do:
[:f| self deny: (smm isSmallFloatValue: f)].
vm initPrimCall.
smallFloatOop := smm smallFloatTag + (1 << (smm
smallFloatMantissaBits + smm numTagBits)).
self shouldnt: [smm floatValueOf: smallFloatOop] raise: Error.
self deny: vm failed.
self assert: (smm isSmallFloatValue: (smm floatValueOf:
smallFloatOop)).
self assert: (smm floatObjectOf: (smm floatValueOf:
smallFloatOop)) equals: smallFloatOop.
vm initPrimCall.
smallFloatOop := ((1 bitShift: 64) - 1 bitClear: (1 bitShift: smm
numTagBits + 1) - 1) + smm smallFloatTag.
self shouldnt: [smm floatValueOf: smallFloatOop] raise: Error.
self deny: vm failed.
self assert: (smm isSmallFloatValue: (smm floatValueOf:
smallFloatOop)).
self assert: (smm floatObjectOf: (smm floatValueOf:
smallFloatOop)) equals: smallFloatOop!
Hi Nicolas,
On Dec 2, 2014, at 1:49 PM, Nicolas Cellier nicolas.cellier.aka.nice@gmail.com wrote:
2014-12-02 1:12 GMT+01:00 commits@source.squeak.org:
Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.960.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.960 Author: eem Time: 1 December 2014, 4:11:42.232 pm UUID: 1b13b4c0-c9f8-4441-a0fa-08b7cd13a92a Ancestors: VMMaker.oscog-eem.959
Add some SmallFloat64 tests. Hence fix isSmallFloatValue: for simulation.
=============== Diff against VMMaker.oscog-eem.959 ===============
Item was changed: ----- Method: Spur64BitMemoryManager>>isSmallFloatValue: (in category 'interpreter access') ----- isSmallFloatValue: aFloat <inline: true> <var: #aFloat type: #double> | exponent | exponent := self cCode: [| rawFloat | rawFloat := (self cCoerce: (self addressOf: aFloat) to: 'sqLong *') at: 0.
Pointer aliasing usage apart, shouldn't it be usqLong * ?
It matters not since the mask eliminates the sign bit.
rawFloat >> 52 bitAnd: 16r7FF]
inSmalltalk: [self smallFloatExponentOffset
+ (aFloat isFinite
ifTrue:
[aFloat = 0.0
ifTrue: [0]
ifFalse: [aFloat exponent + 127]]
ifFalse: "Float nan & Float infinity exponent = -1, so mask to make > 0"
[aFloat exponent bitAnd: SmallInteger maxVal])].
^exponent
between: self smallFloatExponentOffset
and: 255 + self smallFloatExponentOffset!
inSmalltalk: [aFloat exponent].
^exponent between: -127 and: 127!
Item was added:
- ----- Method: StackInterpreterTests>>testImmediateFloats (in category 'tests') -----
- testImmediateFloats
"self new testImmediateFloats"
| vm smm smallFloatOop |
vm := StackInterpreterSimulator newWithOptions: #(ObjectMemory Spur64BitMemoryManager).
smm := vm objectMemory.
#(0.0 -0.0 1.0e38 -1.0e38 1.0e-38 -1.0e-38 2.0 -2.0) do:
[:f| | sfo |
vm initPrimCall.
self shouldnt: [sfo := smm smallFloatObjectOf: f] raise: Error.
self assert: (smm smallFloatValueOf: sfo) equals: f.
self assert: ((smm exponentOfSmallFloat: sfo) between: -126 and: 127)].
{Float nan. Float infinity. Float negativeInfinity. 1.0e-39. 1.0e39 } do:
[:f| self deny: (smm isSmallFloatValue: f)].
vm initPrimCall.
smallFloatOop := smm smallFloatTag + (1 << (smm smallFloatMantissaBits + smm numTagBits)).
self shouldnt: [smm floatValueOf: smallFloatOop] raise: Error.
self deny: vm failed.
self assert: (smm isSmallFloatValue: (smm floatValueOf: smallFloatOop)).
self assert: (smm floatObjectOf: (smm floatValueOf: smallFloatOop)) equals: smallFloatOop.
vm initPrimCall.
smallFloatOop := ((1 bitShift: 64) - 1 bitClear: (1 bitShift: smm numTagBits + 1) - 1) + smm smallFloatTag.
self shouldnt: [smm floatValueOf: smallFloatOop] raise: Error.
self deny: vm failed.
self assert: (smm isSmallFloatValue: (smm floatValueOf: smallFloatOop)).
self assert: (smm floatObjectOf: (smm floatValueOf: smallFloatOop)) equals: smallFloatOop!
Eliot (phone)
2014-12-03 0:42 GMT+01:00 Eliot Miranda eliot.miranda@gmail.com:
Hi Nicolas,
On Dec 2, 2014, at 1:49 PM, Nicolas Cellier < nicolas.cellier.aka.nice@gmail.com> wrote:
2014-12-02 1:12 GMT+01:00 commits@source.squeak.org:
Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.960.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.960 Author: eem Time: 1 December 2014, 4:11:42.232 pm UUID: 1b13b4c0-c9f8-4441-a0fa-08b7cd13a92a Ancestors: VMMaker.oscog-eem.959
Add some SmallFloat64 tests. Hence fix isSmallFloatValue: for simulation.
=============== Diff against VMMaker.oscog-eem.959 ===============
Item was changed: ----- Method: Spur64BitMemoryManager>>isSmallFloatValue: (in category 'interpreter access') ----- isSmallFloatValue: aFloat <inline: true> <var: #aFloat type: #double> | exponent | exponent := self cCode: [| rawFloat | rawFloat := (self cCoerce: (self addressOf: aFloat) to: 'sqLong *') at: 0.
Pointer aliasing usage apart, shouldn't it be usqLong * ?
It matters not since the mask eliminates the sign bit.
Ah sorry, I missread, you shift then mask, not the contrary, so all is OK.
rawFloat >> 52 bitAnd:
16r7FF]
inSmalltalk: [self
smallFloatExponentOffset
+ (aFloat
isFinite
ifTrue:
[aFloat = 0.0
ifTrue: [0]
ifFalse: [aFloat exponent + 127]]
ifFalse: "Float nan & Float infinity exponent = -1, so mask to make > 0"
[aFloat exponent bitAnd: SmallInteger maxVal])].
^exponent
between: self smallFloatExponentOffset
and: 255 + self smallFloatExponentOffset!
inSmalltalk: [aFloat exponent].
^exponent between: -127 and: 127!
Item was added:
- ----- Method: StackInterpreterTests>>testImmediateFloats (in category
'tests') -----
- testImmediateFloats
"self new testImmediateFloats"
| vm smm smallFloatOop |
vm := StackInterpreterSimulator newWithOptions: #(ObjectMemory
Spur64BitMemoryManager).
smm := vm objectMemory.
#(0.0 -0.0 1.0e38 -1.0e38 1.0e-38 -1.0e-38 2.0 -2.0) do:
[:f| | sfo |
vm initPrimCall.
self shouldnt: [sfo := smm smallFloatObjectOf: f] raise:
Error.
self assert: (smm smallFloatValueOf: sfo) equals: f.
self assert: ((smm exponentOfSmallFloat: sfo) between:
-126 and: 127)].
{Float nan. Float infinity. Float negativeInfinity. 1.0e-39.
1.0e39 } do:
[:f| self deny: (smm isSmallFloatValue: f)].
vm initPrimCall.
smallFloatOop := smm smallFloatTag + (1 << (smm
smallFloatMantissaBits + smm numTagBits)).
self shouldnt: [smm floatValueOf: smallFloatOop] raise: Error.
self deny: vm failed.
self assert: (smm isSmallFloatValue: (smm floatValueOf:
smallFloatOop)).
self assert: (smm floatObjectOf: (smm floatValueOf:
smallFloatOop)) equals: smallFloatOop.
vm initPrimCall.
smallFloatOop := ((1 bitShift: 64) - 1 bitClear: (1 bitShift: smm
numTagBits + 1) - 1) + smm smallFloatTag.
self shouldnt: [smm floatValueOf: smallFloatOop] raise: Error.
self deny: vm failed.
self assert: (smm isSmallFloatValue: (smm floatValueOf:
smallFloatOop)).
self assert: (smm floatObjectOf: (smm floatValueOf:
smallFloatOop)) equals: smallFloatOop!
Eliot (phone)
vm-dev@lists.squeakfoundation.org