[Vm-dev] VM Maker: VMMaker.oscog-lw.210.mcz
commits at source.squeak.org
commits at source.squeak.org
Sat Nov 17 21:11:17 UTC 2012
Lars Wassermann uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-lw.210.mcz
==================== Summary ====================
Name: VMMaker.oscog-lw.210
Author: lw
Time: 17 November 2012, 10:09:25.206 pm
UUID: 825aedb9-4486-c84d-bedd-87b09fa9fb62
Ancestors: VMMaker.oscog-lw.209
because of the new call implementation, adapt #isCallPreceedingReturnPC
=============== Diff against VMMaker.oscog-lw.209 ===============
Item was changed:
----- Method: CogARMCompiler>>isCallPreceedingReturnPC: (in category 'testing') -----
isCallPreceedingReturnPC: mcpc
"Assuming mcpc is a return pc answer if the instruction before it is a call."
+ "There are two types of calls: PUSH, BL and (MOV, ORR, ORR, ADD, PUSH, ADD)"
+ "PUSH {pc} is not sufficient as a test, because pc may be pushed using the PushR opcode"
+ ^(objectMemory longAt: mcpc - 8) = (self t: 4 o: 9 s: 0 rn: SP rd: 8 shifterOperand: 0)
+ and: [(objectMemory byteAt: mcpc - 3) >> 4 = 16rB "BL"
+ or: [ (objectMemory longAt: mcpc - 12) = 16rE1A0E00F "MOV pc, lr" ]]!
- "There are two types of calls: BL and (MOV, ORR, ORR, MOV, ADD)"
- ^(objectMemory byteAt: mcpc - 3) >> 4 = 16rB
- or: [ (objectMemory longAt: mcpc - 8) = 16rE1A0E00F "MOV pc, lr" ]
- "MOV pc, lr is sufficient as a test, because call instructions are the only insturctions, during which lr is loaded from pc."!
More information about the Vm-dev
mailing list