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 !
vm-dev@lists.squeakfoundation.org