[Vm-dev] VM Maker: VMMaker.oscog-eem.1480.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Sep 29 02:10:01 UTC 2015


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1480.mcz

==================== Summary ====================

Name: VMMaker.oscog-eem.1480
Author: eem
Time: 28 September 2015, 7:08:16.863 pm
UUID: 1d688e12-495b-4ec7-ac4f-4c07d435ed64
Ancestors: VMMaker.oscog-eem.1479

mmmph

=============== Diff against VMMaker.oscog-eem.1479 ===============

Item was changed:
  ----- Method: CogInLineLiteralsARMCompiler>>relocateMethodReferenceBeforeAddress:by: (in category 'inline cacheing') -----
  relocateMethodReferenceBeforeAddress: pc by: delta
  	"If possible we generate the method address using pc-relative addressing.
  	 If so we don't need to relocate it in code.  So check if pc-relative code was
  	 generated, and if not, adjust a long sequence.  There are two cases, a push
  	 or a register load.  If a push, then there is a register load, but in the instruction
  	 before."
+ 	| pcPrecedingLoad reference |
+ 	pcPrecedingLoad := (self instructionIsPush: (self instructionBeforeAddress: pc))
- 	| pcPreceedingLoad reference |
- 	pcPreceedingLoad := (self instructionIsPush: (self instructionBeforeAddress: pc))
  							ifTrue: [pc - 4]
  							ifFalse: [pc].
  	"If the load is not done via pc-relative addressing we have to relocate."
+ 	(self isPCRelativeValueLoad: (self instructionBeforeAddress: pcPrecedingLoad)) ifFalse:
+ 		[reference := self extract32BitOperandFrom4InstructionsPreceding: pcPrecedingLoad.
- 	(self isPCRelativeValueLoad: (self instructionBeforeAddress: pcPreceedingLoad)) ifFalse:
- 		[reference := self extract32BitOperandFrom4InstructionsPreceding: pcPreceedingLoad.
  		 reference := reference + delta.
+ 		 self insert32BitOperand: reference into4InstructionsPreceding: pcPrecedingLoad]!
- 		 self insert32BitOperand: reference into4InstructionsPreceding: pcPreceedingLoad]!

Item was changed:
  ----- Method: CogOutOfLineLiteralsARMCompiler>>relocateMethodReferenceBeforeAddress:by: (in category 'inline cacheing') -----
  relocateMethodReferenceBeforeAddress: pc by: delta
  	"If possible we generate the method address using pc-relative addressing.
  	 If so we don't need to relocate it in code.  So check if pc-relative code was
  	 generated, and if not, adjust a load literal.  There are two cases, a push
  	 or a register load.  If a push, then there is a register load, but in the instruction
  	 before."
+ 	| pcPrecedingLoad reference litAddr |
+ 	pcPrecedingLoad := (self instructionIsPush: (self instructionBeforeAddress: pc))
- 	| pcPreceedingLoad reference litAddr |
- 	pcPreceedingLoad := (self instructionIsPush: (self instructionBeforeAddress: pc))
  							ifTrue: [pc - 4]
  							ifFalse: [pc].
  	"If the load is not done via pc-relative addressing we have to relocate."
+ 	(self isPCRelativeValueLoad: (self instructionBeforeAddress: pcPrecedingLoad)) ifFalse:
+ 		[litAddr := self pcRelativeAddressAt: pcPrecedingLoad.
- 	(self isPCRelativeValueLoad: (self instructionBeforeAddress: pcPreceedingLoad)) ifFalse:
- 		[litAddr := self pcRelativeAddressAt: pcPreceedingLoad.
  		 reference := objectMemory longAt: litAddr.
  		 objectMemory longAt: litAddr put: reference + delta]!



More information about the Vm-dev mailing list