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

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

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

Name: VMMaker.oscog-eem.127
Author: eem
Time: 23 September 2011, 1:44:07.265 pm
UUID: 35927684-7e1e-4ff8-ad9f-90ecec7bb9a0
Ancestors: VMMaker.oscog-eem.126

Fix MNU PIC creation not to answer an error code to the interpreter.
This is the demon call 0x00000013 bug.

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

Item was changed:
  ----- Method: Cogit>>cogMNUPICSelector:methodOperand:numArgs: (in category 'in-line cacheing') -----
  cogMNUPICSelector: selector methodOperand: methodOperand numArgs: numArgs
  <api>
  "Attempt to create a one-case PIC for an MNU.
  The tag for the case is at the send site and so doesn't need to be generated."
  <returnTypeC: #'CogMethod *'>
  | startAddress headerSize size end |
  coInterpreter
  compilationBreak: selector
  point: (objectMemory lengthOf: selector).
+ self assert: endCPICCase0 notNil.
- endCPICCase0 isNil ifTrue:
- [^self cCoerceSimple: NotFullyInitialized to: #'CogMethod *'].
  startAddress := methodZone allocate: closedPICSize.
  startAddress = 0 ifTrue:
+ [coInterpreter callForCogCompiledCodeCompaction.
+ ^0].
- [^self cCoerceSimple: InsufficientCodeSpace to: #'CogMethod *'].
  methodLabel
  address: startAddress;
  dependent: nil.
  "stack allocate the various collections so that they
  are effectively garbage collected on return."
  self allocateOpcodes: numPICCases * 7 bytecodes: 0.
  self compileMNUCPIC: (self cCoerceSimple: startAddress to: #'CogMethod *')
  methodOperand: methodOperand
  numArgs: numArgs.
  self computeMaximumSizes.
  headerSize := self sizeof: CogMethod.
  size := self generateInstructionsAt: startAddress + headerSize.
  end := self outputInstructionsAt: startAddress + headerSize.
  "The missOffset is the same as the interpretOffset."
  self assert: missOffset = (interpretCall address + interpretCall machineCodeSize - startAddress).
  self assert: startAddress + cmEntryOffset = entry address.
  ^self
  fillInCPICHeader: (self cCoerceSimple: startAddress to: #'CogMethod *')
  size: closedPICSize
  numArgs: numArgs
  numCases: 1
  hasMNUCase: true
  selector: selector !