[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