Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.860.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.860 Author: eem Time: 13 August 2014, 6:22:53.422 am UUID: 8d8013d8-d7e1-4dd8-b1fa-a83723e2d31a Ancestors: VMMaker.oscog-eem.859
Use objectMemory bytesPerOop instead of BytesPerOop in primitiveNewMethod. Eliminate double negatives translating ifFalse: (for primErrorCode).
=============== Diff against VMMaker.oscog-eem.859 ===============
Item was changed: ----- Method: CCodeGenerator>>generateIfFalse:on:indent: (in category 'C translation') ----- generateIfFalse: msgNode on: aStream indent: level "Generate the C code for this message onto the given stream."
(self nilOrBooleanConstantReceiverOf: msgNode receiver) ifNil: + ["Eliminate double-negatives" + (msgNode receiver isSend and: [msgNode receiver selector == #not]) ifTrue: + [^self generateIfTrue: (TSendNode new + setSelector: msgNode selector + receiver: msgNode receiver receiver + arguments: msgNode args + isBuiltInOp: msgNode isBuiltinOperator) + on: aStream + indent: level]. + aStream nextPutAll: 'if (!!'. - [aStream nextPutAll: 'if (!!'. msgNode receiver isLeaf ifFalse: [aStream nextPut: $(]. "grrrrr" msgNode receiver emitCCodeAsExpressionOn: aStream level: level + 1 generator: self. msgNode receiver isLeaf ifFalse: [aStream nextPut: $)]. "grrrrr" aStream nextPutAll: ') {'; cr. msgNode args last emitCCodeOn: aStream level: level + 1 generator: self. aStream tab: level. aStream nextPut: $}] ifNotNil: [:const | const ifFalse: [msgNode args first emitCCodeOn: aStream level: level generator: self]]!
Item was changed: ----- Method: CCodeGenerator>>generateIfFalseAsArgument:on:indent: (in category 'C translation') ----- generateIfFalseAsArgument: msgNode on: aStream indent: level "Generate the C code for this message onto the given stream."
(self nilOrBooleanConstantReceiverOf: msgNode receiver) ifNil: + ["Eliminate double-negatives" + (msgNode receiver isSend and: [msgNode receiver selector == #not]) ifTrue: + [^self generateIfTrueAsArgument: (TSendNode new + setSelector: msgNode selector + receiver: msgNode receiver receiver + arguments: msgNode args + isBuiltInOp: msgNode isBuiltinOperator) + on: aStream + indent: level]. + aStream nextPutAll: '(!!('. + msgNode receiver emitCCodeAsArgumentOn: aStream level: 0 generator: self. - [aStream nextPutAll: '(!!('. - msgNode receiver emitCCodeAsArgumentOn: aStream level: 0 generator: self. aStream nextPut: $); crtab: level + 1; nextPut: $?; space. msgNode args last emitCCodeAsArgumentOn: aStream level: level + 2 generator: self. aStream crtab: level + 1; nextPutAll: ': 0)'] ifNotNil: [:const| const ifFalse: [msgNode args first emitCCodeAsArgumentOn: aStream level: level generator: self]]!
Item was changed: ----- Method: InterpreterPrimitives>>primitiveNewMethod (in category 'compiled methods') ----- primitiveNewMethod | header bytecodeCount class size theMethod literalCount | header := self stackTop. bytecodeCount := self stackValue: 1. ((objectMemory isIntegerObject: header) and: [(objectMemory isIntegerObject: bytecodeCount) and: [(bytecodeCount := objectMemory integerValueOf: bytecodeCount) >= 0]]) ifFalse: [self primitiveFailFor: PrimErrBadArgument. ^self]. class := self stackValue: 2. literalCount := objectMemory literalCountOfMethodHeader: header. + size := literalCount + LiteralStart * objectMemory bytesPerOop + bytecodeCount. - size := literalCount + LiteralStart * BytesPerOop + bytecodeCount. objectMemory hasSpurMemoryManagerAPI ifTrue: [theMethod := objectMemory instantiateCompiledMethodClass: class indexableSize: size. theMethod ifNil: [self primitiveFailFor: ((objectMemory isCompiledMethodFormat: (objectMemory instSpecOfClass: class)) ifTrue: [PrimErrNoMemory] ifFalse: [PrimErrBadReceiver]). ^self]] ifFalse: [theMethod := objectMemory instantiateClass: class indexableSize: size]. objectMemory storePointerUnchecked: HeaderIndex ofObject: theMethod withValue: header. 1 to: literalCount do: [:i | objectMemory storePointer: i ofObject: theMethod withValue: objectMemory nilObject]. self pop: 3 thenPush: theMethod!
vm-dev@lists.squeakfoundation.org