[Vm-dev] VM Maker: VMMaker-dtl.255.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun Oct 9 13:53:37 UTC 2011
David T. Lewis uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker-dtl.255.mcz
==================== Summary ====================
Name: VMMaker-dtl.255
Author: dtl
Time: 9 October 2011, 9:34:17.138 am
UUID: ead42d75-bb43-46ec-9efd-cccc7f65557d
Ancestors: VMMaker-dtl.254
VMMaker 4.7.12
bytecodePrimMultiply optimization from Stefan Marr and Eliot Miranda, per VMMaker.oscog-eem.133, background at http://lists.squeakfoundation.org/pipermail/vm-dev/2011-October/009493.html
>From oscog, adopt all ccg:prolog:expr:exdex: and ccg:generateCoerceToValueFrom:on: updates, move misplaced methods in Unsigned to class side, adopt missing cPreprocessorDirective: (note redundant #cProcessorDirective and #preprocessorExpression implementations in trunk and oscog, consider using Dave's method name and Eliot's implementation).
=============== Diff against VMMaker-dtl.254 ===============
Item was changed:
----- Method: ArrayedCollection class>>ccg:generateCoerceToOopFrom:on: (in category '*VMMaker-plugin generation') -----
ccg: cg generateCoerceToOopFrom: aNode on: aStream
+ "N.B. The is used both for generation and simulation so answer the result (for interpretation)"
-
self instSize > 0 ifTrue:
[self error: 'cannot auto-coerce arrays with named instance variables'].
+ ^cg generateCoerceToObjectFromPtr: aNode on: aStream!
- cg generateCoerceToObjectFromPtr: aNode on: aStream!
Item was changed:
----- Method: ArrayedCollection class>>ccg:generateCoerceToValueFrom:on: (in category '*VMMaker-plugin generation') -----
ccg: cg generateCoerceToValueFrom: aNode on: aStream
+ "N.B. The could be used both for generation and simulation so answer the result (for interpretation)"
+ ^cg
-
- cg
generateCoerceToPtr: (self ccgDeclareCForVar: '')
fromObject: aNode on: aStream!
Item was changed:
----- Method: Boolean class>>ccg:generateCoerceToOopFrom:on: (in category '*VMMaker-plugin generation') -----
ccg: cg generateCoerceToOopFrom: aNode on: aStream
+ "N.B. The is used both for generation and simulation so answer the result (for interpretation)"
+ ^cg generateCoerceToBooleanObjectFrom: aNode on: aStream!
-
- cg generateCoerceToBooleanObjectFrom: aNode on: aStream!
Item was changed:
----- Method: Boolean class>>ccg:generateCoerceToValueFrom:on: (in category '*VMMaker-plugin generation') -----
ccg: cg generateCoerceToValueFrom: aNode on: aStream
+ "N.B. The could be used both for generation and simulation so answer the result (for interpretation)"
+ ^cg generateCoerceToBooleanValueFrom: aNode on: aStream!
-
- cg generateCoerceToBooleanValueFrom: aNode on: aStream!
Item was changed:
----- Method: Float class>>ccg:generateCoerceToOopFrom:on: (in category '*VMMaker-plugin generation') -----
ccg: cg generateCoerceToOopFrom: aNode on: aStream
+ "N.B. The is used both for generation and simulation so answer the result (for interpretation)"
+ ^cg generateCoerceToFloatObjectFrom: aNode on: aStream!
-
- cg generateCoerceToFloatObjectFrom: aNode on: aStream!
Item was changed:
----- Method: Float class>>ccg:generateCoerceToValueFrom:on: (in category '*VMMaker-plugin generation') -----
ccg: cg generateCoerceToValueFrom: aNode on: aStream
+ "N.B. The could be used both for generation and simulation so answer the result (for interpretation)"
+ ^cg generateCoerceToFloatValueFrom: aNode on: aStream!
-
- cg generateCoerceToFloatValueFrom: aNode on: aStream!
Item was changed:
----- Method: Interpreter>>bytecodePrimMultiply (in category 'common selector sends') -----
bytecodePrimMultiply
| rcvr arg result |
rcvr := self internalStackValue: 1.
arg := self internalStackValue: 0.
(self areIntegers: rcvr and: arg)
ifTrue: [rcvr := self integerValueOf: rcvr.
arg := self integerValueOf: arg.
result := rcvr * arg.
+ (arg = 0 or: [(result // arg) = rcvr and: [self isIntegerValue: result]])
- ((arg = 0 or: [(result // arg) = rcvr]) and: [self isIntegerValue: result])
ifTrue: [self internalPop: 2 thenPush: (self integerObjectOf: result).
^ self fetchNextBytecode "success"]]
ifFalse: [self initPrimCall.
self externalizeIPandSP.
self primitiveFloatMultiply: rcvr byArg: arg.
self internalizeIPandSP.
self successful ifTrue: [^ self fetchNextBytecode "success"]].
messageSelector := self specialSelector: 8.
argumentCount := 1.
self normalSend.
!
Item was changed:
----- Method: Object class>>ccg:generateCoerceToOopFrom:on: (in category '*VMMaker-plugin generation') -----
ccg: cg generateCoerceToOopFrom: aNode on: aStream
+ "N.B. The is used both for generation and simulation so answer the result (for interpretation)"
+ ^cg emitCExpression: aNode on: aStream!
-
- cg emitCExpression: aNode on: aStream!
Item was changed:
----- Method: Object class>>ccg:generateCoerceToValueFrom:on: (in category '*VMMaker-plugin generation') -----
ccg: cg generateCoerceToValueFrom: aNode on: aStream
+ "N.B. The could be used both for generation and simulation so answer the result (for interpretation)"
+ ^cg emitCExpression: aNode on: aStream!
-
- cg emitCExpression: aNode on: aStream!
Item was added:
+ ----- Method: Object>>cPreprocessorDirective: (in category '*VMMaker-translation support') -----
+ cPreprocessorDirective: codeString
+ "For translation only; noop when running in Smalltalk."!
Item was changed:
----- Method: Unsigned class>>ccg:generateCoerceToOopFrom:on: (in category 'plugin generation') -----
ccg: cg generateCoerceToOopFrom: aNode on: aStream
+ "N.B. The is used both for generation and simulation so answer the result (for interpretation)"
+ ^cg generateCoerceToUnsignedObjectFrom: aNode on: aStream!
-
- cg generateCoerceToUnsignedObjectFrom: aNode on: aStream!
Item was changed:
----- Method: Unsigned class>>ccg:generateCoerceToValueFrom:on: (in category 'plugin generation') -----
ccg: cg generateCoerceToValueFrom: aNode on: aStream
+ "N.B. The could be used both for generation and simulation so answer the result (for interpretation)"
+ ^cg generateCoerceToUnsignedValueFrom: aNode on: aStream!
-
- cg generateCoerceToUnsignedValueFrom: aNode on: aStream!
Item was added:
+ ----- Method: Unsigned class>>ccg:prolog:expr:index: (in category 'plugin generation') -----
+ ccg: cg prolog: aBlock expr: aString index: anInteger
+
+ ^cg ccgLoad: aBlock expr: aString asUnsignedValueFrom: anInteger!
Item was added:
+ ----- Method: Unsigned class>>ccgDeclareCForVar: (in category 'plugin generation') -----
+ ccgDeclareCForVar: aSymbolOrString
+
+ ^'unsigned long ', aSymbolOrString!
Item was removed:
- ----- Method: Unsigned>>ccg:prolog:expr:index: (in category 'as yet unclassified') -----
- ccg: cg prolog: aBlock expr: aString index: anInteger
-
- ^cg ccgLoad: aBlock expr: aString asUnsignedValueFrom: anInteger!
Item was removed:
- ----- Method: Unsigned>>ccgDeclareCForVar: (in category 'as yet unclassified') -----
- ccgDeclareCForVar: aSymbolOrString
-
- ^'unsigned int ', aSymbolOrString!
Item was changed:
----- Method: VMMaker class>>versionString (in category 'version testing') -----
versionString
"VMMaker versionString"
+ ^'4.7.12'!
- ^'4.7.11'!
More information about the Vm-dev
mailing list