[Vm-dev] VM Maker: VMMaker.oscog-eem.2695.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun Feb 2 00:30:39 UTC 2020
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2695.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2695
Author: eem
Time: 1 February 2020, 4:30:26.430441 pm
UUID: 259350c9-8ace-47c9-8ae2-94cd33693b45
Ancestors: VMMaker.oscog-eem.2694
...and fix some regressions in simulateLeafCallOf: for different processors and processor aliens. All four main back ends nw correctly simulate again.
=============== Diff against VMMaker.oscog-eem.2694 ===============
Item was changed:
----- Method: Cogit>>simulateLeafCallOf: (in category 'simulation only') -----
simulateLeafCallOf: someFunction
"Simulate execution of machine code that leaf-calls someFunction,
answering the result returned by someFunction."
"CogProcessorAlienInspector openFor: coInterpreter"
<doNotGenerate>
+ | priorSP priorPC spOnEntry bogusRetPC |
- | priorSP priorPC spOnEntry |
self recordRegisters.
priorSP := processor sp.
priorPC := processor pc.
processor
setFramePointer: coInterpreter getCFramePointer stackPointer: coInterpreter getCStackPointer;
simulateLeafCallOf: someFunction
+ nextpc: (bogusRetPC := 16rBADF00D5 roundTo: backEnd codeGranularity)
- nextpc: 16rBADF00D5
memory: coInterpreter memory.
spOnEntry := processor sp.
self recordInstruction: {'(simulated call of '. someFunction. ')'}.
[processor pc between: 0 and: methodZone zoneEnd] whileTrue:
[[singleStep
ifTrue: [self recordProcessing.
self maybeBreakAt: processor pc.
processor
singleStepIn: coInterpreter memory
minimumAddress: guardPageSize
readOnlyBelow: methodZone zoneEnd]
ifFalse: [processor
runInMemory: coInterpreter memory
minimumAddress: guardPageSize
readOnlyBelow: methodZone zoneEnd]]
on: ProcessorSimulationTrap, Error
do: [:ex| | retpc |
+ processor pc = bogusRetPC ifTrue:
+ [self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}.
- processor pc = 16rBADF00D5 ifTrue:
- [retpc := processor leafRetpcIn: coInterpreter memory.
- self assert: retpc = 16rBADF00D5.
- self recordInstruction: {'(simulated (real) return to '. retpc. ')'}.
^processor cResultRegister].
ex class == ProcessorSimulationTrap ifTrue:
[ex type == #read ifTrue:
[self handleReadSimulationTrap: ex. ex resume: processor].
ex type == #write ifTrue:
+ [self handleWriteSimulationTrap: ex. ex resume: processor].
+ ex type == #return ifTrue:
+ [retpc := processor leafRetpcIn: coInterpreter memory.
+ self assert: retpc = bogusRetPC.
+ processor simulateLeafReturnIn: coInterpreter memory.
+ self recordInstruction: {'(simulated return to '. retpc. ')'}.
+ ^processor cResultRegister]].
- [self handleWriteSimulationTrap: ex. ex resume: processor]].
ex pass]].
+ processor pc = bogusRetPC ifTrue:
- processor pc = 16rBADF00D5 ifTrue:
[self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}].
^processor cResultRegister!
More information about the Vm-dev
mailing list