[Vm-dev] VM Maker: VMMaker.oscog-cb.2238.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Jun 9 19:05:36 UTC 2017
ClementBera uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-cb.2238.mcz
==================== Summary ====================
Name: VMMaker.oscog-cb.2238
Author: cb
Time: 9 June 2017, 9:05:13.698892 pm
UUID: 51e6a4b3-de49-41ac-a793-87fe0abd5ba9
Ancestors: VMMaker.oscog-eem.2237
Fixed a regression where primitiveCollectCogCodeConstituents would not extract the details of CogMethods anymore if the first parameter is true.
Reverted the implementation of inlined allocation to the pre-duff device to be able to run benchmarks using the travis-compiled VMs instead of hand-compiled VMs (Even with a reproducible case from image start-up since May 16th, neither I or Eliot have found enough time / have been able to fix it, so it clearly makes sense to keep it disabled for now).Working VMs allow Tim F. to keep benchmarks comparisons such as this one up-to-date:
http://speed.squeak.org/comparison/?exe=11%2BL%2BCog%2C13%2BL%2BCog&ben=1%2C8%2C2%2C19%2C9%2C37%2C5%2C14%2C66%2C67%2C58%2C59%2C60%2C61%2C15%2C68%2C69%2C7%2C62%2C6%2C34%2C70%2C71%2C72%2C73%2C74%2C75%2C35%2C21%2C20%2C76%2C77%2C65%2C31%2C12%2C11%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C52%2C53%2C54%2C18&env=4&hor=true&bas=13%2BL%2BCog&chart=normal+bars
=============== Diff against VMMaker.oscog-eem.2237 ===============
Item was changed:
----- Method: CoInterpreterPrimitives>>primitiveCollectCogCodeConstituents (in category 'process primitives') -----
primitiveCollectCogCodeConstituents
"Answer the contents of the code zone as an array of pair-wise element, address in ascending
address order. Answer a string for a runtime routine or abstract label (beginning, end, etc),
a CompiledMethod for a CMMethod, or a selector (presumably a Symbol) for a PIC.
If there is an argument and it is true, then collect inner information about the CogMethod."
| constituents withDetails |
argumentCount = 0
ifTrue: [withDetails := false]
ifFalse:
[withDetails := self stackTop.
(withDetails = objectMemory trueObject
or: [withDetails = objectMemory falseObject]) ifFalse:
[^self primitiveFailFor: PrimErrBadArgument].
withDetails := withDetails = objectMemory trueObject].
+ constituents := cogit cogCodeConstituents: withDetails.
- constituents := cogit cogCodeConstituents: withDetails = objectMemory trueObject.
constituents ifNil:
[^self primitiveFailFor: PrimErrNoMemory].
self pop: argumentCount + 1 thenPush: constituents!
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
- genGetInstanceOfFixedClass: self ssTop constant
into: resultReg
+ initializingIf: self extBSpecifiesInitializeInstance) ~= 0 ifTrue:
- initializingIf: self extBSpecifiesInitializeInstance) ~= 0 ifTrue:
[^ShouldNotJIT]. "e.g. bad class"
self ssPop: 1] .
[20] -> "20 identityHash"
[objectRepresentation genGetIdentityHash: rcvrReg resultReg: resultReg.
self ssPop: 1] .
"21 identityHash (SmallInteger)"
"22 identityHash (Character)"
"23 identityHash (SmallFloat64)"
"24 identityHash (Behavior)"
"30 immediateAsInteger (Character)
31 immediateAsInteger (SmallFloat64)
35 immediateAsFloat (SmallInteger) "
[30] ->
[self ssTop popToReg: resultReg.
objectRepresentation genConvertCharacterToSmallIntegerInReg: resultReg.
self ssPop: 1].
[35] ->
[self assert: self processorHasDoublePrecisionFloatingPointSupport.
self MoveR: rcvrReg R: TempReg.
self genConvertSmallIntegerToIntegerInReg: TempReg.
self ConvertR: TempReg Rd: DPFPReg0.
self flag: #TODO. "Should never fail"
self
genAllocFloatValue: DPFPReg0
into: resultReg
scratchReg: TempReg
scratchReg: NoReg. "scratch2 for V3 only"]
}
otherwise:
[^EncounteredUnknownBytecode].
extB := 0.
numExtB := 0.
self ssPushRegister: resultReg.
^0!
More information about the Vm-dev
mailing list