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

Clément Bera bera.clement at gmail.com
Tue Jan 17 12:59:39 UTC 2017


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/25af72b3/attachment-0001.html>


More information about the Vm-dev mailing list