[Vm-dev] VM Maker: VMMaker.oscog-eem.1584.mcz
commits at source.squeak.org
commits at source.squeak.org
Sat Dec 12 20:04:53 UTC 2015
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1584.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.1584
Author: eem
Time: 12 December 2015, 12:02:58.198 pm
UUID: 389d59b6-a7df-41a2-b92d-5991f0a14575
Ancestors: VMMaker.oscog-eem.1583
Ghaahhh, Sensei just whacked me on the head again...why does Sensei keep doing that?
=============== Diff against VMMaker.oscog-eem.1583 ===============
Item was changed:
----- Method: CogInLineLiteralsX64Compiler>>sizePCDependentInstructionAt: (in category 'generate machine code') -----
sizePCDependentInstructionAt: eventualAbsoluteAddress
"Size a jump and set its address. The target may be another instruction
or an absolute address. On entry the address inst var holds our virtual
address. On exit address is set to eventualAbsoluteAddress, which is
where this instruction will be output. The span of a jump to a following
instruction is therefore between that instruction's address and this
instruction's address ((which are both still their virtual addresses), but the
span of a jump to a preceding instruction or to an absolute address is
between that instruction's address (which by now is its eventual absolute
address) or absolute address and eventualAbsoluteAddress."
| target maximumSpan abstractInstruction |
<var: #abstractInstruction type: #'AbstractInstruction *'>
opcode = AlignmentNops ifTrue:
[| alignment |
address := eventualAbsoluteAddress.
alignment := operands at: 0.
^machineCodeSize := (eventualAbsoluteAddress + (alignment - 1) bitAnd: alignment negated)
- eventualAbsoluteAddress].
self assert: self isJump.
target := operands at: 0.
abstractInstruction := cogit cCoerceSimple: target to: #'AbstractInstruction *'.
(self isAnInstruction: abstractInstruction)
ifTrue:
[maximumSpan := abstractInstruction address
- (((cogit abstractInstruction: self follows: abstractInstruction)
ifTrue: [eventualAbsoluteAddress]
ifFalse: [address]) + 2)]
ifFalse:
[maximumSpan := target - (eventualAbsoluteAddress + 2)].
address := eventualAbsoluteAddress.
opcode >= FirstShortJump
ifTrue:
[machineCodeSize := (self isQuick: maximumSpan)
ifTrue: [2]
ifFalse: [opcode = Jump
+ ifTrue: [5]
+ ifFalse: [6]]]
- ifTrue: [5]]]
ifFalse:
[machineCodeSize := opcode caseOf:
{ [JumpLong] -> [5].
[JumpFull] -> [12].
[JumpLongZero] -> [6].
[JumpLongNonZero] -> [6] }].
^machineCodeSize "Slang can't inline the switch into the ifTrue:ifFalse: correctly"!
More information about the Vm-dev
mailing list