[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