[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