VM Maker: VMMaker.oscog-eem.960.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker.oscog-eem.960.mcz

commits-2
 
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.
  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!

Reply | Threaded
Open this post in threaded view
|

Re: VM Maker: VMMaker.oscog-eem.960.mcz

Nicolas Cellier
 


2014-12-02 1:12 GMT+01:00 <[hidden email]>:

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!


Reply | Threaded
Open this post in threaded view
|

Re: VM Maker: VMMaker.oscog-eem.960.mcz

Eliot Miranda-2
 
Hi Nicolas,


On Dec 2, 2014, at 1:49 PM, Nicolas Cellier <[hidden email]> wrote:



2014-12-02 1:12 GMT+01:00 <[hidden email]>:

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)
Reply | Threaded
Open this post in threaded view
|

Re: VM Maker: VMMaker.oscog-eem.960.mcz

Nicolas Cellier
 


2014-12-03 0:42 GMT+01:00 Eliot Miranda <[hidden email]>:
 
Hi Nicolas,


On Dec 2, 2014, at 1:49 PM, Nicolas Cellier <[hidden email]> wrote:



2014-12-02 1:12 GMT+01:00 <[hidden email]>:

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)