[Vm-dev] VM Maker: VMMaker.oscog-cb.2095.mcz
Ronie Salgado
roniesalg at gmail.com
Tue Jan 17 15:20:15 UTC 2017
Hi Clement,
Ronie, I could not merge with your code (I got "Could no merge because one
> character keycode is normally not used in code")
Fixed.
It seems there is something fishy in this version (before my changes), I
> can't properly compile the VM ?
Last night, Eliot introduced some changes at version
VMMaker.oscog-eem.2094, with a compilation error. That version also
requires defining a macro(#define maybeHaltIfDebugPC() ) for being able to
compile the vm. It seems that Eliot has not yet added the actual definition
of the macro. For testing quickly, that define somewhere at sq.h
2017-01-17 9:59 GMT-03:00 Clément Bera <bera.clement at gmail.com>:
>
> It seems there is something fishy in this version (before my changes), I
> can't properly compile the VM ?
>
> On Tue, Jan 17, 2017 at 1:27 PM, <commits at source.squeak.org> wrote:
>
>>
>> ClementBera uploaded a new version of VMMaker to project VM Maker:
>> http://source.squeak.org/VMMaker/VMMaker.oscog-cb.2095.mcz
>>
>> ==================== Summary ====================
>>
>> Name: VMMaker.oscog-cb.2095
>> Author: cb
>> Time: 17 January 2017, 1:26:37.587598 pm
>> UUID: a685bd8e-f11b-41b3-9d74-b38403dfc9b3
>> Ancestors: VMMaker.oscog-eem.2094
>>
>> Ronie, I could not merge with your code (I got "Could no merge because
>> one character keycode is normally not used in code")
>>
>> Added support for inlined primitive #characterAsInteger.
>>
>> =============== Diff against VMMaker.oscog-eem.2094 ===============
>>
>> Item was changed:
>> ----- Method: SistaCogit>>genUnaryInlinePrimitive: (in category
>> 'inline primitive generators') -----
>> genUnaryInlinePrimitive: prim
>> "Unary inline primitives."
>> "SistaV1: 248 11111000 iiiiiiii
>> mjjjjjjj Call Primitive #iiiiiiii + (jjjjjjj * 256) m=1
>> means inlined primitive, no hard return after execution.
>> See EncoderForSistaV1's class comment and
>> StackInterpreter>>#unaryInlinePrimitive:"
>> | rcvrReg resultReg |
>> rcvrReg := self allocateRegForStackEntryAt: 0.
>> resultReg := self allocateRegNotConflictingWith: (self
>> registerMaskFor: rcvrReg).
>> prim
>> caseOf: {
>> "00 unchecked class"
>> [1] -> "01 unchecked pointer
>> numSlots"
>> [self ssTop popToReg: rcvrReg.
>> self ssPop: 1.
>> objectRepresentation
>> genGetNumSlotsOf: rcvrReg into:
>> resultReg;
>> genConvertIntegerToSmallIntegerInReg:
>> resultReg].
>> "02 unchecked pointer
>> basicSize"
>> [3] -> "03 unchecked byte numBytes"
>> [self ssTop popToReg: rcvrReg.
>> self ssPop: 1.
>> objectRepresentation
>> genGetNumBytesOf: rcvrReg into:
>> resultReg;
>> genConvertIntegerToSmallIntegerInReg:
>> resultReg].
>> "04 unchecked
>> short16Type format numShorts"
>> "05 unchecked
>> word32Type format numWords"
>> "06 unchecked
>> doubleWord64Type format numDoubleWords"
>> [11] -> "11 unchecked fixed pointer
>> basicNew"
>> [self ssTop type ~= SSConstant ifTrue:
>> [^EncounteredUnknownBytecode].
>> (objectRepresentation
>> genGetInstanceOf: self ssTop
>> constant
>> into: resultReg
>> initializingIf:
>> self extBSpecifiesInitializeInstance) ~= 0 ifTrue:
>> [^ShouldNotJIT]. "e.g. bad class"
>> self ssPop: 1] .
>> [20] -> "20 identityHash"
>> [self ssTop popToReg: rcvrReg.
>> objectRepresentation
>> genGetHashFieldNonImmOf: rcvrReg asSmallIntegerInto: resultReg.
>> + self ssPop: 1] .
>> - self ssPop: 1]
>> "21 identityHash
>> (SmallInteger)"
>> "22 identityHash
>> (Character)"
>> "23 identityHash
>> (SmallFloat64)"
>> "24 identityHash
>> (Behavior)"
>> + "30 immediateAsInteger
>> (Character)
>> + 31 immediateAsInteger
>> (SmallFloat64)"
>> + [30] ->
>> + [self ssTop popToReg: rcvrReg.
>> + objectRepresentation
>> genConvertCharacterToSmallIntegerInReg: rcvrReg.
>> + self ssPop: 1]
>> }
>> +
>> otherwise:
>> [^EncounteredUnknownBytecode].
>> extB := 0.
>> numExtB := 0.
>> self ssPushRegister: resultReg.
>> ^0!
>>
>> Item was changed:
>> ----- Method: StackInterpreter>>unaryInlinePrimitive: (in category
>> 'miscellaneous bytecodes') -----
>> unaryInlinePrimitive: primIndex
>> "SistaV1: 248 11111000 iiiiiiii
>> mjjjjjjj Call Primitive #iiiiiiii + (jjjjjjj * 256)
>> m=1 means inlined primitive, no hard return after execution."
>> <option: #SistaVM>
>> | result |
>> primIndex caseOf: {
>> "1000 unchecked class"
>> [0] -> [result := objectMemory fetchClassOf:
>> self internalStackTop.
>> self internalStackTopPut: result].
>> "1001 unchecked pointer numSlots"
>> [1] -> [result := objectMemory numSlotsOf: self
>> internalStackTop.
>> self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>> "1002 unchecked pointer basicSize"
>> [2] -> [result := (objectMemory numSlotsOf: self
>> internalStackTop)
>> - (objectMemory
>> fixedFieldsOfClass: (objectMemory fetchClassOfNonImm: self
>> internalStackTop)).
>> self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>> "1003 unchecked byte8Type format numBytes (includes
>> CompiledMethod)"
>> [3] -> [result := objectMemory numBytesOf: self
>> internalStackTop.
>> self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>> "1004 unchecked short16Type format numShorts"
>> [4] -> [result := objectMemory num16BitUnitsOf:
>> self internalStackTop.
>> self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>> "1005 unchecked word32Type format numWords"
>> [5] -> [result := objectMemory num32BitUnitsOf:
>> self internalStackTop.
>> self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>> "1006 unchecked doubleWord64Type format numDoubleWords"
>> [6] -> [result := objectMemory num64BitUnitsOf:
>> self internalStackTop.
>> self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>>
>> "1011 unchecked fixed pointer basicNew"
>> [11] -> [| classObj numSlots |
>> classObj := self internalStackTop.
>> numSlots := objectMemory instanceSizeOf:
>> classObj.
>> result := objectMemory
>> eeInstantiateSmallClass: classObj numSlots: numSlots.
>> (extB noMask: 1) ifTrue:
>> [0 to: numSlots - 1 do:
>> [:i| objectMemory
>> storePointerUnchecked: i ofObject: result withValue: objectMemory
>> nilObject]].
>> extB := 0.
>> numExtB := 0.
>> self internalStackTopPut: result].
>> "1020 identityHash"
>> [20] -> [result := objectMemory hashBitsOf: self
>> internalStackTop.
>> + self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>> - self internalStackTopPut: (objectMemory
>> integerObjectOf: result)]
>> "1021 identityHash (SmallInteger)"
>> "1022 identityHash (Character)"
>> "1023 identityHash (SmallFloat64)"
>> "1024 identityHash (Behavior)"
>> + "1030 immediateAsInteger (Character)
>> + 1031 immediateAsInteger (SmallFloat64)"
>> + [30] -> [ result := objectMemory characterValueOf: self
>> internalStackTop.
>> + self internalStackTopPut: (objectMemory
>> integerObjectOf: result)]
>> }
>> otherwise:
>> [localIP := localIP - 3.
>> self respondToUnknownBytecode]!
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20170117/3d3fdf7a/attachment-0001.html>
More information about the Vm-dev
mailing list