ClementBera uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-cb.1766.mcz
==================== Summary ====================
Name: VMMaker.oscog-cb.1766 Author: cb Time: 5 April 2016, 4:48:20.054 pm UUID: 38f81b1b-b83b-42aa-9ed6-5f22efcd8db1 Ancestors: VMMaker.oscog-cb.1765
Added the no must be boolean flag to tell the JIt not to generate the mustbeboolean trampoline.
=============== Diff against VMMaker.oscog-cb.1765 ===============
Item was added: + ----- Method: StackToRegisterMappingCogit>>extASpecifiesNoMustBeBoolean (in category 'bytecode generator support') ----- + extASpecifiesNoMustBeBoolean + <inline: true> + ^ (extA anyMask: 1)!
Item was changed: ----- Method: StackToRegisterMappingCogit>>genJumpIf:to: (in category 'bytecode generator support') ----- genJumpIf: boolean to: targetBytecodePC <inline: false> | desc fixup ok | <var: #desc type: #'CogSimStackEntry *'> <var: #fixup type: #'BytecodeFixup *'> <var: #ok type: #'AbstractInstruction *'> self ssFlushTo: simStackPtr - 1. desc := self ssTop. self ssPop: 1. (desc type == SSConstant and: [desc constant = objectMemory trueObject or: [desc constant = objectMemory falseObject]]) ifTrue: ["Must arrange there's a fixup at the target whether it is jumped to or not so that the simStackPtr can be kept correct." fixup := self ensureFixupAt: targetBytecodePC - initialPC. "Must enter any annotatedConstants into the map" desc annotateUse ifTrue: [self annotateBytecode: (self prevInstIsPCAnnotated ifTrue: [self Nop] ifFalse: [self Label])]. "Must annotate the bytecode for correct pc mapping." self annotateBytecode: (desc constant = boolean ifTrue: [self Jump: fixup] ifFalse: [self prevInstIsPCAnnotated ifTrue: [self Nop] ifFalse: [self Label]]). ^0]. desc popToReg: TempReg. "Cunning trick by LPD. If true and false are contiguous subtract the smaller. Correct result is either 0 or the distance between them. If result is not 0 or their distance send mustBeBoolean." self assert: (objectMemory objectAfter: objectMemory falseObject) = objectMemory trueObject. self annotate: (self SubCw: boolean R: TempReg) objRef: boolean. self JumpZero: (self ensureFixupAt: targetBytecodePC - initialPC). + + self extASpecifiesNoMustBeBoolean ifTrue: + [ extA := 0. + self annotateBytecode: self lastOpcode. + ^ 0]. + extA := 0. + + . self CmpCq: (boolean == objectMemory falseObject - self CmpCq: (boolean == objectMemory falseObject ifTrue: [objectMemory trueObject - objectMemory falseObject] ifFalse: [objectMemory falseObject - objectMemory trueObject]) R: TempReg. ok := self JumpZero: 0. self CallRT: (boolean == objectMemory falseObject ifTrue: [ceSendMustBeBooleanAddFalseTrampoline] ifFalse: [ceSendMustBeBooleanAddTrueTrampoline]). ok jmpTarget: (self annotateBytecode: self Label). ^0!
vm-dev@lists.squeakfoundation.org