[Vm-dev] VM Maker: VMMaker.oscog-eem.980.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Dec 12 01:28:42 UTC 2014
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.980.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.980
Author: eem
Time: 11 December 2014, 5:25:43.82 pm
UUID: 3d7d339f-6a22-4bd1-b959-cddf9c41cc60
Ancestors: VMMaker.oscog-eem.979
And fix the regression in generateShiftLeft:on:indent:
=============== Diff against VMMaker.oscog-eem.979 ===============
Item was changed:
----- Method: CCodeGenerator>>generateShiftLeft:on:indent: (in category 'C translation') -----
generateShiftLeft: msgNode on: aStream indent: level
"Generate a C bitShift. If we can determine the result
would overflow the word size, cast to a long integer."
| rcvr arg valueBeyondInt castToLong |
rcvr := msgNode receiver.
arg := msgNode args first.
+ valueBeyondInt := 1 bitShift: 32. "The default type of const << N is int."
- valueBeyondInt := 1 bitShift: BytesPerWord * 4. "The default type of const << N is int."
castToLong := false.
rcvr constantNumbericValueOrNil ifNotNil:
[:rcvrVal|
arg constantNumbericValueOrNil ifNotNil:
[:argVal|
castToLong := rcvrVal < valueBeyondInt
and: [(rcvrVal bitShift: argVal) >= valueBeyondInt]]].
castToLong
ifTrue:
[rcvr isConstant
ifTrue:
[self emitCExpression: rcvr on: aStream.
aStream nextPutAll: 'LL']
ifFalse:
[aStream nextPutAll: '((unsigned long)'.
self emitCExpression: rcvr on: aStream.
aStream nextPut: $)]]
ifFalse:
[self emitCExpression: rcvr on: aStream].
aStream nextPutAll: ' << '.
self emitCExpression: arg on: aStream!
More information about the Vm-dev
mailing list