[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