<div dir="ltr">It seems there is something fishy in this version (before my changes), I can't properly compile the VM ?</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 17, 2017 at 1:27 PM,  <span dir="ltr"><<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
ClementBera uploaded a new version of VMMaker to project VM Maker:<br>
<a href="http://source.squeak.org/VMMaker/VMMaker.oscog-cb.2095.mcz" rel="noreferrer" target="_blank">http://source.squeak.org/<wbr>VMMaker/VMMaker.oscog-cb.2095.<wbr>mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: VMMaker.oscog-cb.2095<br>
Author: cb<br>
Time: 17 January 2017, 1:26:37.587598 pm<br>
UUID: a685bd8e-f11b-41b3-9d74-<wbr>b38403dfc9b3<br>
Ancestors: VMMaker.oscog-eem.2094<br>
<br>
Ronie, I could not merge with your code (I got "Could no merge because one character keycode is normally not used in code")<br>
<br>
Added support for inlined primitive #characterAsInteger.<br>
<br>
=============== Diff against VMMaker.oscog-eem.2094 ===============<br>
<br>
Item was changed:<br>
  ----- Method: SistaCogit>><wbr>genUnaryInlinePrimitive: (in category 'inline primitive generators') -----<br>
  genUnaryInlinePrimitive: prim<br>
        "Unary inline primitives."<br>
        "SistaV1: 248           11111000        iiiiiiii                mjjjjjjj                Call Primitive #iiiiiiii + (jjjjjjj * 256) m=1 means inlined primitive, no hard return after execution.<br>
         See EncoderForSistaV1's class comment and StackInterpreter>>#<wbr>unaryInlinePrimitive:"<br>
        | rcvrReg resultReg |<br>
        rcvrReg := self allocateRegForStackEntryAt: 0.<br>
        resultReg := self allocateRegNotConflictingWith: (self registerMaskFor: rcvrReg).<br>
        prim<br>
                caseOf: {<br>
                                        "00             unchecked class"<br>
                        [1] ->  "01             unchecked pointer numSlots"<br>
                                [self ssTop popToReg: rcvrReg.<br>
                                 self ssPop: 1.<br>
                                 objectRepresentation<br>
                                        genGetNumSlotsOf: rcvrReg into: resultReg;<br>
                                        genConvertIntegerToSmallIntege<wbr>rInReg: resultReg].<br>
                                        "02             unchecked pointer basicSize"<br>
                        [3] ->  "03             unchecked byte numBytes"<br>
                                [self ssTop popToReg: rcvrReg.<br>
                                 self ssPop: 1.<br>
                                 objectRepresentation<br>
                                        genGetNumBytesOf: rcvrReg into: resultReg;<br>
                                        genConvertIntegerToSmallIntege<wbr>rInReg: resultReg].<br>
                                        "04             unchecked short16Type format numShorts"<br>
                                        "05             unchecked word32Type format numWords"<br>
                                        "06             unchecked doubleWord64Type format numDoubleWords"<br>
                        [11] -> "11             unchecked fixed pointer basicNew"<br>
                                [self ssTop type ~= SSConstant ifTrue:<br>
                                        [^EncounteredUnknownBytecode].<br>
                                 (objectRepresentation<br>
                                        genGetInstanceOf: self ssTop constant<br>
                                                into: resultReg<br>
                                                        initializingIf: self extBSpecifiesInitializeInstanc<wbr>e) ~= 0 ifTrue:<br>
                                        [^ShouldNotJIT]. "e.g. bad class"<br>
                                 self ssPop: 1] .<br>
                        [20] -> "20     identityHash"<br>
                                [self ssTop popToReg: rcvrReg.<br>
                                 objectRepresentation genGetHashFieldNonImmOf: rcvrReg asSmallIntegerInto: resultReg.<br>
+                                self ssPop: 1] .<br>
-                                self ssPop: 1]<br>
                                        "21             identityHash (SmallInteger)"<br>
                                        "22             identityHash (Character)"<br>
                                        "23             identityHash (SmallFloat64)"<br>
                                        "24             identityHash (Behavior)"<br>
+                                       "30     immediateAsInteger (Character)<br>
+                                        31     immediateAsInteger (SmallFloat64)"<br>
+                       [30] -><br>
+                               [self ssTop popToReg: rcvrReg.<br>
+                                objectRepresentation genConvertCharacterToSmallInte<wbr>gerInReg: rcvrReg.<br>
+                                self ssPop: 1]<br>
                                  }<br>
+<br>
                otherwise:<br>
                        [^EncounteredUnknownBytecode].<br>
        extB := 0.<br>
        numExtB := 0.<br>
        self ssPushRegister: resultReg.<br>
        ^0!<br>
<br>
Item was changed:<br>
  ----- Method: StackInterpreter>><wbr>unaryInlinePrimitive: (in category 'miscellaneous bytecodes') -----<br>
  unaryInlinePrimitive: primIndex<br>
        "SistaV1:       248             11111000        iiiiiiii                mjjjjjjj                Call Primitive #iiiiiiii + (jjjjjjj * 256) m=1 means inlined primitive, no hard return after execution."<br>
        <option: #SistaVM><br>
        | result |<br>
        primIndex caseOf: {<br>
                "1000   unchecked class"<br>
                [0]     ->      [result := objectMemory fetchClassOf: self internalStackTop.<br>
                                 self internalStackTopPut: result].<br>
                "1001   unchecked pointer numSlots"<br>
                [1]     ->      [result := objectMemory numSlotsOf: self internalStackTop.<br>
                                 self internalStackTopPut: (objectMemory integerObjectOf: result)].<br>
                "1002   unchecked pointer basicSize"<br>
                [2]     ->      [result := (objectMemory numSlotsOf: self internalStackTop)<br>
                                                - (objectMemory fixedFieldsOfClass: (objectMemory fetchClassOfNonImm: self internalStackTop)).<br>
                                 self internalStackTopPut: (objectMemory integerObjectOf: result)].<br>
                "1003   unchecked byte8Type format numBytes (includes CompiledMethod)"<br>
                [3]     ->      [result := objectMemory numBytesOf: self internalStackTop.<br>
                                 self internalStackTopPut: (objectMemory integerObjectOf: result)].<br>
                "1004   unchecked short16Type format numShorts"<br>
                [4]     ->      [result := objectMemory num16BitUnitsOf: self internalStackTop.<br>
                                 self internalStackTopPut: (objectMemory integerObjectOf: result)].<br>
                "1005   unchecked word32Type format numWords"<br>
                [5]     ->      [result := objectMemory num32BitUnitsOf: self internalStackTop.<br>
                                 self internalStackTopPut: (objectMemory integerObjectOf: result)].<br>
                "1006   unchecked doubleWord64Type format numDoubleWords"<br>
                [6]     ->      [result := objectMemory num64BitUnitsOf: self internalStackTop.<br>
                                 self internalStackTopPut: (objectMemory integerObjectOf: result)].<br>
<br>
                "1011   unchecked fixed pointer basicNew"<br>
                [11] -> [| classObj numSlots |<br>
                                 classObj := self internalStackTop.<br>
                                 numSlots := objectMemory instanceSizeOf: classObj.<br>
                                 result := objectMemory eeInstantiateSmallClass: classObj numSlots: numSlots.<br>
                                 (extB noMask: 1) ifTrue:<br>
                                        [0 to: numSlots - 1 do:<br>
                                                [:i| objectMemory storePointerUnchecked: i ofObject: result withValue: objectMemory nilObject]].<br>
                                 extB := 0.<br>
                                numExtB := 0.<br>
                                 self internalStackTopPut: result].<br>
                "1020   identityHash"<br>
                [20] -> [result := objectMemory hashBitsOf: self internalStackTop.<br>
+                                self internalStackTopPut: (objectMemory integerObjectOf: result)].<br>
-                                self internalStackTopPut: (objectMemory integerObjectOf: result)]<br>
                "1021           identityHash (SmallInteger)"<br>
                "1022           identityHash (Character)"<br>
                "1023           identityHash (SmallFloat64)"<br>
                "1024           identityHash (Behavior)"<br>
+               "1030   immediateAsInteger (Character)<br>
+                1031   immediateAsInteger (SmallFloat64)"<br>
+               [30] -> [ result := objectMemory characterValueOf: self internalStackTop.<br>
+                                self internalStackTopPut: (objectMemory integerObjectOf: result)]<br>
                 }<br>
        otherwise:<br>
                [localIP := localIP - 3.<br>
                 self respondToUnknownBytecode]!<br>
<br>
</blockquote></div><br></div>