<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>