[Vm-dev] VM Maker: VMMaker.oscog-cb.2095.mcz

Eliot Miranda eliot.miranda at gmail.com
Tue Jan 17 16:53:59 UTC 2017


Give me a few minutes and I'll fix this.  The macroi is supposed to be defined in maybeHaltIfDebugPC

_,,,^..^,,,_ (phone)

> On Jan 17, 2017, at 7:20 AM, Ronie Salgado <roniesalg at gmail.com> wrote:
> 
> 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/e48ca8fa/attachment-0001.html>


More information about the Vm-dev mailing list