Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2509.mcz==================== Summary ====================
Name: VMMaker.oscog-eem.2509
Author: eem
Time: 20 January 2019, 4:35:42.084252 pm
UUID: 91e81f64-95de-4914-a960-8f842be3a194
Ancestors: VMMaker.oscog-eem.2508
Both 64 and 32-bit Spur can and integers together to check for two SmallIntegers.
=============== Diff against VMMaker.oscog-eem.2508 ===============
Item was removed:
- ----- Method: Spur32BitMemoryManager>>areIntegers:and: (in category 'interpreter access') -----
- areIntegers: oop1 and: oop2
- "Test oop1 and oop2 to make sure both are SmallIntegers."
- ^((oop1 bitAnd: oop2) bitAnd: 1) ~= 0!
Item was removed:
- ----- Method: Spur64BitMemoryManager>>areIntegers:and: (in category 'interpreter access') -----
- areIntegers: oop1 and: oop2
- "Test oop1 and oop2 to make sure both are SmallIntegers."
- ^(self isIntegerObject: oop1)
- and: [self isIntegerObject: oop2]!
Item was changed:
----- Method: SpurMemoryManager>>areIntegers:and: (in category 'interpreter access') -----
areIntegers: oop1 and: oop2
+ "Test oop1 and oop2 to make sure both are SmallIntegers.
+ In 32-bits the tags are 1 = SmallInteger & 3 = SmallInteger, and 2 = Character.
+ In 64-bits the tags are 1 = SmallInteger, 2 = Character & 4 = SmallFloat64.
+ In both cases we can test for two SmallIntegers by anding them together and
+ if the result still has the least significant bit set then both are SmallIntegers."
+ ^(oop1 bitAnd: oop2) anyMask: self smallIntegerTag!
- "Test oop1 and oop2 to make sure both are SmallIntegers."
- self subclassResponsibility!
Item was added:
+ ----- Method: StackDepthFinder>>allStackPointers (in category 'accessing') -----
+ allStackPointers
+ "Answer a Dictionary from method to Array of stack pointers for all methods ioncluded in the receiver's method."
+ "(StackDepthFinder on: StackDepthFinder >> #allStackPointers) allStackPointers"
+ | allStackPointers method endPC |
+ allStackPointers := Dictionary new.
+ allStackPointers at: (method := self method) put: self stackPointers.
+ endPC := pc.
+ method nestedBlockMethods do:
+ [:blockMethod|
+ self method: blockMethod pc: blockMethod initialPC.
+ allStackPointers at: blockMethod put: self stackPointers].
+ self method: method pc: endPC.
+ ^allStackPointers!