<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>Hi Nicolas,<br><br></div><div><br>On Dec 2, 2014, at 1:49 PM, Nicolas Cellier &lt;<a href="mailto:nicolas.cellier.aka.nice@gmail.com">nicolas.cellier.aka.nice@gmail.com</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><span></span></div></blockquote><blockquote type="cite"><div><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2014-12-02 1:12 GMT+01:00  <span dir="ltr">&lt;<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:<br>
<a href="http://source.squeak.org/VMMaker/VMMaker.oscog-eem.960.mcz" target="_blank">http://source.squeak.org/VMMaker/VMMaker.oscog-eem.960.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: VMMaker.oscog-eem.960<br>
Author: eem<br>
Time: 1 December 2014, 4:11:42.232 pm<br>
UUID: 1b13b4c0-c9f8-4441-a0fa-08b7cd13a92a<br>
Ancestors: VMMaker.oscog-eem.959<br>
<br>
Add some SmallFloat64 tests.<br>
Hence fix isSmallFloatValue: for simulation.<br>
<br>
=============== Diff against VMMaker.oscog-eem.959 ===============<br>
<br>
Item was changed:<br>
&nbsp; ----- Method: Spur64BitMemoryManager&gt;&gt;isSmallFloatValue: (in category 'interpreter access') -----<br>
&nbsp; isSmallFloatValue: aFloat<br>
&nbsp; &nbsp; &nbsp; &nbsp; &lt;inline: true&gt;<br>
&nbsp; &nbsp; &nbsp; &nbsp; &lt;var: #aFloat type: #double&gt;<br>
&nbsp; &nbsp; &nbsp; &nbsp; | exponent |<br>
&nbsp; &nbsp; &nbsp; &nbsp; exponent := self<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cCode:<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [| rawFloat |<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rawFloat := (self cCoerce: (self addressOf: aFloat) to: 'sqLong *') at: 0.<br></blockquote><div><br></div><div><br>Pointer aliasing usage apart, shouldn't it be usqLong * ?<br></div></div></div></div></div></blockquote><div><br></div>It matters not since the mask eliminates the sign bit.<div><br></div><div><br><blockquote type="cite"><div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>&nbsp;<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rawFloat &gt;&gt; 52 bitAnd: 16r7FF]<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inSmalltalk: [self smallFloatExponentOffset<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+ (aFloat isFinite<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ifTrue:<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[aFloat = 0.0<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ifTrue: [0]<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ifFalse: [aFloat exponent + 127]]<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ifFalse: "Float nan &amp; Float infinity exponent = -1, so mask to make &gt; 0"<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[aFloat exponent bitAnd: SmallInteger maxVal])].<br>
+&nbsp; &nbsp; &nbsp; &nbsp;^exponent<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;between: self smallFloatExponentOffset<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;and: 255 + self smallFloatExponentOffset!<br>
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inSmalltalk: [aFloat exponent].<br>
-&nbsp; &nbsp; &nbsp; &nbsp;^exponent between: -127 and: 127!<br>
<br>
Item was added:<br>
+ ----- Method: StackInterpreterTests&gt;&gt;testImmediateFloats (in category 'tests') -----<br>
+ testImmediateFloats<br>
+&nbsp; &nbsp; &nbsp; &nbsp;"self new testImmediateFloats"<br>
+&nbsp; &nbsp; &nbsp; &nbsp;| vm smm smallFloatOop |<br>
+&nbsp; &nbsp; &nbsp; &nbsp;vm := StackInterpreterSimulator newWithOptions: #(ObjectMemory Spur64BitMemoryManager).<br>
+&nbsp; &nbsp; &nbsp; &nbsp;smm := vm objectMemory.<br>
+&nbsp; &nbsp; &nbsp; &nbsp;#(0.0 -0.0 1.0e38 -1.0e38 1.0e-38 -1.0e-38 2.0 -2.0) do:<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[:f| | sfo |<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;vm initPrimCall.<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self shouldnt: [sfo := smm smallFloatObjectOf: f] raise: Error.<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self assert: (smm smallFloatValueOf: sfo) equals: f.<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self assert: ((smm exponentOfSmallFloat: sfo) between: -126 and: 127)].<br>
+&nbsp; &nbsp; &nbsp; &nbsp;{Float nan. Float infinity. Float negativeInfinity. 1.0e-39. 1.0e39 } do:<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[:f| self deny: (smm isSmallFloatValue: f)].<br>
+&nbsp; &nbsp; &nbsp; &nbsp;vm initPrimCall.<br>
+&nbsp; &nbsp; &nbsp; &nbsp;smallFloatOop := smm smallFloatTag + (1 &lt;&lt; (smm smallFloatMantissaBits + smm numTagBits)).<br>
+&nbsp; &nbsp; &nbsp; &nbsp;self shouldnt: [smm floatValueOf: smallFloatOop] raise: Error.<br>
+&nbsp; &nbsp; &nbsp; &nbsp;self deny: vm failed.<br>
+&nbsp; &nbsp; &nbsp; &nbsp;self assert: (smm isSmallFloatValue: (smm floatValueOf: smallFloatOop)).<br>
+&nbsp; &nbsp; &nbsp; &nbsp;self assert: (smm floatObjectOf: (smm floatValueOf: smallFloatOop)) equals: smallFloatOop.<br>
+&nbsp; &nbsp; &nbsp; &nbsp;vm initPrimCall.<br>
+&nbsp; &nbsp; &nbsp; &nbsp;smallFloatOop := ((1 bitShift: 64) - 1 bitClear: (1 bitShift: smm numTagBits + 1) - 1) + smm smallFloatTag.<br>
+&nbsp; &nbsp; &nbsp; &nbsp;self shouldnt: [smm floatValueOf: smallFloatOop] raise: Error.<br>
+&nbsp; &nbsp; &nbsp; &nbsp;self deny: vm failed.<br>
+&nbsp; &nbsp; &nbsp; &nbsp;self assert: (smm isSmallFloatValue: (smm floatValueOf: smallFloatOop)).<br>
+&nbsp; &nbsp; &nbsp; &nbsp;self assert: (smm floatObjectOf: (smm floatValueOf: smallFloatOop)) equals: smallFloatOop!</blockquote></div></div></div>
</div></blockquote><br style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); "><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); ">Eliot (phone)</span></div></body></html>