VM Maker: VMMaker.oscog-eem.2776.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.2776.mcz

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

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

Name: VMMaker.oscog-eem.2776
Author: eem
Time: 16 July 2020, 4:52:27.299313 pm
UUID: 9f8a0f46-28c8-4139-8366-088e6e75e4cd
Ancestors: VMMaker.oscog-eem.2775

Oops!  Fix a regression from VMMaker.oscog-eem.2774.  Slang isn't smart enough to emit types for C's funky example typing for functions that return pointers to functions, so we have to manually type genInvokeInterpretTrampoline.

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

Item was changed:
  ----- Method: Cogit>>genInvokeInterpretTrampoline (in category 'initialization') -----
  genInvokeInterpretTrampoline
  "Switch to the C stack (do *not* save the Smalltalk stack pointers;
  this is the caller's responsibility), and invoke interpret PDQ."
+ <returnTypeC: 'void (*genInvokeInterpretTrampoline(void))(void)'>
  | startAddress |
  <inline: false>
  startAddress := methodZoneBase.
  self zeroOpcodeIndex.
  backEnd hasVarBaseRegister ifTrue:
  [self MoveCq: self varBaseAddress R: VarBaseReg]. "Must happen first; value may be used in genLoadStackPointers"
  cFramePointerInUse
  ifTrue: [backEnd genLoadCStackPointers]
  ifFalse: [backEnd genLoadCStackPointer].
  "Sideways call interpret so that the stack looks correct, for exception handling etc"
  backEnd genMarshallNArgs: 0 arg: nil arg: nil arg: nil arg: nil.
  backEnd hasLinkRegister
  ifTrue:
  [self MoveAw: coInterpreter cReturnAddressAddress R: LinkReg]
  ifFalse:
  [self MoveAw: coInterpreter cReturnAddressAddress R: ABIResultReg.
  backEnd genSubstituteReturnAddressR: ABIResultReg].
  self JumpFullRT: (self
  cCode: [#interpret asUnsignedInteger]
  inSmalltalk: [self simulatedTrampolineFor: #interpret]).
  self outputInstructionsForGeneratedRuntimeAt: startAddress.
  self recordGeneratedRunTime: 'ceInvokeInterpret' address: startAddress.
  ^self cCoerceSimple: startAddress to: #'void (*)(void)'!