[Vm-dev] VM Maker: VMMaker.oscog-eem.127.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Sep 23 20:45:52 UTC 2011


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 !



More information about the Vm-dev mailing list