[Vm-dev] VM Maker: VMMaker.oscog-eem.960.mcz
Nicolas Cellier
nicolas.cellier.aka.nice at gmail.com
Tue Dec 2 21:49:36 UTC 2014
2014-12-02 1:12 GMT+01:00 <commits at 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!
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20141202/a38c8466/attachment.htm
More information about the Vm-dev
mailing list