[Vm-dev] VM Maker: VMMaker.oscog-eem.860.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Aug 13 13:25:22 UTC 2014
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!
More information about the Vm-dev
mailing list