[Vm-dev] VM Maker: VMMaker.oscog-eem.970.mcz
commits at source.squeak.org
commits at source.squeak.org
Sat Dec 6 04:27:24 UTC 2014
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.970.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.970
Author: eem
Time: 5 December 2014, 8:22:43.499 pm
UUID: 3869e39d-0172-4f38-9db5-cdca677eab92
Ancestors: VMMaker.oscog-eem.969
Revert those two cases; they were already covered.
=============== Diff against VMMaker.oscog-eem.969 ===============
Item was changed:
----- Method: Cogit>>compileCPIC:Case0:Case1Method:tag:isMNUCase:numArgs: (in category 'in-line cacheing') -----
compileCPIC: cPIC Case0: case0CogMethod Case1Method: case1Method tag: case1Tag isMNUCase: isMNUCase numArgs: numArgs
"Compile the code for a two-case PIC for case0CogMethod and case1Method,case1Tag.
The tag for case0CogMethod is at the send site and so doesn't need to be generated.
case1Method may be any of
- a Cog method; jump to its unchecked entry-point
- a CompiledMethod; jump to the ceInterpretFromPIC trampoline
- nil; call ceMNUFromPIC"
<var: #cPIC type: #'CogMethod *'>
| operand targetEntry jumpNext |
<var: #case0CogMethod type: #'CogMethod *'>
<var: #targetEntry type: #'void *'>
<var: #jumpNext type: #'AbstractInstruction *'>
self assert: case1Method notNil.
- coInterpreter
- compilationBreak: cPIC selector
- point: (objectMemory numBytesOf: cPIC selector)
- isMNUCase: isMNUCase.
self compilePICProlog: numArgs.
self assert: (objectRepresentation inlineCacheTagIsYoung: case1Tag) not.
(isMNUCase not
and: [coInterpreter methodHasCogMethod: case1Method])
ifTrue:
[operand := 0.
targetEntry := ((coInterpreter cogMethodOf: case1Method) asInteger + cmNoCheckEntryOffset) asVoidPointer]
ifFalse:
[self assert: (case1Method isNil or: [(objectMemory isYoungObject: case1Method) not]).
operand := case1Method.
targetEntry := case1Method isNil ifTrue: [mnuCall] ifFalse: [interpretLabel]].
jumpNext := self compileCPICEntry.
self MoveCw: 0 R: SendNumArgsReg.
self JumpLong: case0CogMethod asInteger + cmNoCheckEntryOffset.
endCPICCase0 := self CmpCw: case1Tag R: TempReg.
jumpNext jmpTarget: endCPICCase0.
self MoveCw: operand R: SendNumArgsReg.
self JumpLongZero: (isMNUCase ifTrue: [mnuCall] ifFalse: [targetEntry]) asInteger.
endCPICCase1 := self MoveCw: cPIC asInteger R: ClassReg.
self JumpLong: (self cPICMissTrampolineFor: numArgs).
^0
!
Item was changed:
----- Method: Cogit>>compileMNUCPIC:methodOperand:numArgs: (in category 'in-line cacheing') -----
compileMNUCPIC: cPIC methodOperand: methodOperand numArgs: numArgs
"Compile the code for a one-case MNU PIC that calls ceMNUFromPIC for case0Tag
The tag for case0 is at the send site and so doesn't need to be generated."
<var: #cPIC type: #'CogMethod *'>
| jumpNext |
<var: #jumpNext type: #'AbstractInstruction *'>
- coInterpreter
- compilationBreak: cPIC selector
- point: (objectMemory numBytesOf: cPIC selector)
- isMNUCase: true.
self compilePICProlog: numArgs.
jumpNext := self compileCPICEntry.
self MoveCw: methodOperand R: SendNumArgsReg.
self JumpLong: mnuCall asInteger.
jumpNext jmpTarget: (self MoveCw: cPIC asInteger R: ClassReg).
self JumpLong: (self cPICMissTrampolineFor: numArgs).
^0
!
More information about the Vm-dev
mailing list