Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.412.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.412 Author: eem Time: 25 September 2013, 12:18:41.931 pm UUID: 6b66ad04-58bc-4be6-8790-cb2f11fc34e8 Ancestors: VMMaker.oscog-eem.411
Sionara the explicit noAtCache at:[put:] machinery in CoInterpreter now that the atCache is confined to the interreter's special selector at:[put:] bytecodes.
Add some missing subclass responsibility implementations to SMM.
Add primitiveMakeEphemeron for testing.
=============== Diff against VMMaker.oscog-eem.411 ===============
Item was changed: ----- Method: CoInterpreter>>functionPointerForCompiledMethod:primitiveIndex: (in category 'cog jit support') ----- functionPointerForCompiledMethod: methodObj primitiveIndex: primIndex <api> <returnTypeC: 'void (*functionPointerForCompiledMethodprimitiveIndex(sqInt methodObj, sqInt primIndex))(void)'> | functionPointer | <var: #functionPointer declareC: #'void (*functionPointer)(void)'> functionPointer := self functionPointerFor: primIndex inClass: nil. - functionPointer == #primitiveAt ifTrue: - [^#primitiveNoAtCacheAt]. - functionPointer == #primitiveAtPut ifTrue: - [^#primitiveNoAtCacheAtPut]. - functionPointer == #primitiveStringAt ifTrue: - [^#primitiveNoAtCacheStringAt]. - functionPointer == #primitiveStringAtPut ifTrue: - [^#primitiveNoAtCacheStringAtPut]. functionPointer == #primitiveCalloutToFFI ifTrue: [^self functionForPrimitiveCallout]. functionPointer == #primitiveExternalCall ifTrue: [^self functionForPrimitiveExternalCall: methodObj]. ^functionPointer!
Item was removed: - ----- Method: CoInterpreter>>noAtCacheCommonAt: (in category 'indexing primitive support') ----- - noAtCacheCommonAt: stringy - "This code is called if the receiver responds primitively to at:. - The cogit can implement at: & at:put: quickly in machine code, and needs a backup - that provides error codes. But it does not want the at cache so it does not have to - waste time assigning messageSelector and lkupClass." - | index rcvr result | - self initPrimCall. - rcvr := self stackValue: 1. - (objectMemory isNonIntegerObject: rcvr) ifFalse: - [^self primitiveFailFor: PrimErrInappropriate]. - index := self stackTop. - "No need to test for large positive integers here. No object has 1g elements" - (objectMemory isIntegerObject: index) ifFalse: - [^self primitiveFailFor: PrimErrBadArgument]. - index := objectMemory integerValueOf: index. - result := self stObject: rcvr at: index. - self successful ifTrue: - [stringy ifTrue: [result := self characterForAscii: (objectMemory integerValueOf: result)]. - ^ self pop: argumentCount+1 thenPush: result]!
Item was removed: - ----- Method: CoInterpreter>>noAtCacheCommonAtPut: (in category 'indexing primitive support') ----- - noAtCacheCommonAtPut: stringy - "This code is called if the receiver responds primitively to at:Put:. - The cogit can implement at: & at:put: quickly in machine code, and needs a backup - that provides error codes. But it does not want the at cache so it does not have to - waste time assigning messageSelector and lkupClass." - | value index rcvr | - value := self stackTop. - self initPrimCall. - rcvr := self stackValue: 2. - (objectMemory isNonIntegerObject: rcvr) ifFalse: - [^self primitiveFailFor: PrimErrInappropriate]. - index := self stackValue: 1. - "No need to test for large positive integers here. No object has 1g elements" - (objectMemory isIntegerObject: index) ifFalse: - [^self primitiveFailFor: PrimErrBadArgument]. - index := objectMemory integerValueOf: index. - stringy - ifTrue: [self stObject: rcvr at: index put: (self asciiOfCharacter: value)] - ifFalse: [self stObject: rcvr at: index put: value]. - self successful ifTrue: - [^ self pop: argumentCount+1 thenPush: value]!
Item was removed: - ----- Method: CoInterpreterPrimitives>>primitiveNoAtCacheAt (in category 'indexing primitives') ----- - primitiveNoAtCacheAt - - self noAtCacheCommonAt: false.!
Item was removed: - ----- Method: CoInterpreterPrimitives>>primitiveNoAtCacheAtPut (in category 'indexing primitives') ----- - primitiveNoAtCacheAtPut - - self noAtCacheCommonAtPut: false.!
Item was removed: - ----- Method: CoInterpreterPrimitives>>primitiveNoAtCacheStringAt (in category 'indexing primitives') ----- - primitiveNoAtCacheStringAt - - self noAtCacheCommonAt: true.!
Item was removed: - ----- Method: CoInterpreterPrimitives>>primitiveNoAtCacheStringAtPut (in category 'indexing primitives') ----- - primitiveNoAtCacheStringAtPut - - self noAtCacheCommonAtPut: true.!
Item was added: + ----- Method: SpurMemoryManager>>allocateSlotsInOldSpace:bytes:format:classIndex: (in category 'allocation') ----- + allocateSlotsInOldSpace: numSlots bytes: totalBytes format: formatField classIndex: classIndex + "Answer the oop of a chunk of space in oldSpace with numSlots slots. The header + will have been filled-in but not the contents." + ^self subclassResponsibility!
Item was added: + ----- Method: SpurMemoryManager>>tagMask (in category 'word size') ----- + tagMask + ^self subclassResponsibility!
Item was added: + ----- Method: SpurMemoryManager>>wordSize (in category 'word size') ----- + wordSize + "Answer the manager's word size, whjich is the size of an oop, and which + is assumed to be equivslent to the underlying machine's word size." + ^self subclassResponsibility!
Item was added: + ----- Method: StackInterpreterPrimitives>>primitiveMakeEphemeron (in category 'system control primitives') ----- + primitiveMakeEphemeron + "Turn the receiver into an ephemeron. + TEMPORARY. For testing ephemeron handling in the VM only. + Ephemerons should be instantiated from a suitable class." + <export: true> + <option: #Spur> + ((objectMemory isNonImmediate: self stackTop) + and: [objectMemory isFixedSizePointerFormat: (objectMemory formatOf: self stackTop)]) ifFalse: + [^self primitiveFailFor: (argumentCount = 0 + ifTrue: [PrimErrBadReceiver] + ifFalse: [PrimErrBadArgument])]. + objectMemory + setFormatOf: self stackTop + to: objectMemory ephemeronFormat. + self pop: argumentCount!
vm-dev@lists.squeakfoundation.org