VM Maker: VMMaker.oscog-eem.2739.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker.oscog-eem.2739.mcz

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

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

Name: VMMaker.oscog-eem.2739
Author: eem
Time: 10 April 2020, 3:39:19.999113 pm
UUID: b15f5d3d-0493-4edc-a9d3-4775bb9a21e5
Ancestors: VMMaker.oscog-eem.2738

Add somecommentary about an important but substle issue with switching to the C stack.
Get the prototype of setInterruptCheckChain: correct.

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

Item was changed:
  ----- Method: CogAbstractInstruction>>genLoadCStackPointers (in category 'smalltalk calling convention') -----
  genLoadCStackPointers
  "Load the frame and stack pointer registers with those of the C stack,
  effecting a switch to the C stack.  Used when machine code calls into
+ the CoInterpreter run-time (e.g. to invoke interpreter primitives).
+ N.B. CoInterpreter stack layout dictates that the stack pointer should be loaded first.
+ The stack zone is allocated on the C stack before the interpreter runs and hence
+ before CStackPointer and CFramePointer are captured.  So when running in machine
+ code the native stack pointer and frame pointer appear to be on a colder part of the
+ stack to CStackPointer and CFramePointer.  When CStackPointerhas been set and
+ the frame pointer is still in machine code the current frame looks like it has lots of
+ stack.  If the frame pointer was set to CFramePointer before hand then it would
+ be beyond the stack pointer for that one instruction."
- the CoInterpreter run-time (e.g. to invoke interpreter primitives)."
  cogit MoveAw: cogit cStackPointerAddress R: NativeSPReg.
  cogit MoveAw: cogit cFramePointerAddress R: FPReg.
  ^0!

Item was changed:
  ----- Method: InterpreterProxy>>setInterruptCheckChain: (in category 'other') -----
  setInterruptCheckChain: aFunction
+ <returnTypeC: #'void *'>
- <returnTypeC: 'void (*setInterruptCheckChain(void (*aFunction)(void)))()'>
  <var: #aFunction declareC: 'void (*aFunction)()'>
  ^self notYetImplementedError!

Item was changed:
  ----- Method: StackInterpreter>>setInterruptCheckChain: (in category 'primitive support') -----
  setInterruptCheckChain: aFunction
+ <returnTypeC: #'void *'>
  <var: #aFunction declareC: 'void (*aFunction)()'>
  <var: #prevFunction declareC: 'void (*prevFunction)()'>
- <returnTypeC: 'void (*setInterruptCheckChain(void (*aFunction)(void)))()'>
  <export: true>
  | prevFunction |
  prevFunction := interruptCheckChain.
  interruptCheckChain := aFunction.
  ^prevFunction!