VM Maker: VMMaker.oscog-eem.990.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker.oscog-eem.990.mcz

commits-2
 
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.990.mcz

==================== Summary ====================

Name: VMMaker.oscog-eem.990
Author: eem
Time: 17 December 2014, 1:52:54.55 pm
UUID: f4a22308-891c-4542-b6a4-10fe174bc82a
Ancestors: VMMaker.oscog-tpr.989

Fix bitInvert32 for 64-bits.  Now window border
colours are correct in the 64-bit Spur Stack linux VM.

Cast a left shift to long if in the 64-bit interpreter
code.

Fix printFreeListHeads

=============== Diff against VMMaker.oscog-tpr.989 ===============

Item was changed:
  ----- Method: CCodeGenerator>>generateBitInvert:on:indent: (in category 'C translation') -----
  generateBitInvert: msgNode on: aStream indent: level
+ "Generate the C code for this message onto the given stream.
+ If the selector is bitInvert32 then cast to unsigned int to ensure
+ a 32-bit value on 64-bit platforms."
- "Generate the C code for this message onto the given stream."
 
+ | castToUnsignedInt |
+ castToUnsignedInt := msgNode selector = #bitInvert32.
+ castToUnsignedInt ifTrue:
+ [aStream nextPutAll: '(unsigned int)'].
  aStream nextPut: $~.
  self emitCExpression: msgNode receiver on: aStream!

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."
+ castToLong := vmClass notNil and: [vmClass objectMemoryClass wordSize = 8].
+ castToLong ifFalse:
+ [rcvr constantNumbericValueOrNil ifNotNil:
+ [:rcvrVal|
+ arg constantNumbericValueOrNil ifNotNil:
+ [:argVal|
+ castToLong := rcvrVal < valueBeyondInt
+  and: [(rcvrVal bitShift: argVal) >= valueBeyondInt]]]].
- castToLong := false.
- rcvr constantNumbericValueOrNil ifNotNil:
- [:rcvrVal|
- arg constantNumbericValueOrNil ifNotNil:
- [:argVal|
- castToLong := rcvrVal < valueBeyondInt
-  and: [(rcvrVal bitShift: argVal) >= valueBeyondInt]]].
  castToLong
  ifTrue:
+ [(rcvr isConstant and: [rcvr name isEmpty])
- [rcvr isConstant
  ifTrue:
  [self emitCExpression: rcvr on: aStream.
  aStream nextPutAll: 'LL']
  ifFalse:
+ [aStream nextPutAll: '((long)'.
- [aStream nextPutAll: '((unsigned long)'.
  self emitCExpression: rcvr on: aStream.
  aStream nextPut: $)]]
  ifFalse:
  [self emitCExpression: rcvr on: aStream].
  aStream nextPutAll: ' << '.
  self emitCExpression: arg on: aStream!

Item was changed:
  ----- Method: SpurMemoryManager>>printFreeListHeads (in category 'debug printing') -----
  printFreeListHeads
  <api>
  | expectedMask |
  expectedMask := 0.
  0 to: self numFreeLists - 1 do:
  [:i|
  coInterpreter printHex: (freeLists at: i).
  (freeLists at: i) ~= 0 ifTrue:
  [expectedMask := expectedMask + (1 << i)].
+ i + 1 \\ (32 >> self logBytesPerOop) = 0
- i \\ (32 >> self logBytesPerOop) = 0
  ifTrue: [coInterpreter cr]
+ ifFalse: [coInterpreter print: '  ']].
- ifFalse: [coInterpreter tab]].
  coInterpreter
+ cr;
+ print: 'mask: '; printHexnp: freeListsMask;
+ print: ' expected: '; printHexnp: expectedMask;
- print: 'mask: '; printHex: freeListsMask;
- print: ' expected: '; printHex: expectedMask;
  cr!