Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2648.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2648 Author: eem Time: 29 December 2019, 12:51:45.495048 pm UUID: c41a5ec7-bfee-41d7-b911-46d59c5a9651 Ancestors: VMMaker.oscog-eem.2647 Comments, categories and simulation slips. =============== Diff against VMMaker.oscog-eem.2647 =============== Item was changed: + ----- Method: CogIA32Compiler>>isJumpAt: (in category 'testing') ----- - ----- Method: CogIA32Compiler>>isJumpAt: (in category 'disassembly') ----- isJumpAt: pc | op | op := objectMemory byteAt: pc. ^ (op between: 16r70 and: 16r7F) "short conditional jumps" or: [op = 16rE9 "long unconditional jump" or: [op = 16rEB "short unconditional jump" or: [op = 16r0F "long conditional jumps" and: [(objectMemory byteAt: pc + 1) between: 16r80 and: 16r8F]]]]! Item was changed: ----- Method: CogOutOfLineLiteralsARMCompiler>>mapEntryAddress (in category 'generate machine code') ----- mapEntryAddress "Typically map entries apply to the end of an instruction, for two reasons: a) to cope with literals embedded in variable-length instructions, since, e.g. on x86, the literal typically comes at the end of the instruction. b) in-line cache detection is based on return addresses, which are typically to the instruction following a call. + But on ARM using CogOutOfLineLiteralsARMCompiler we use out-of-line literals + so the mapEntryAddress of a literal is simply the instruction's address." - But with out-of-line literals it is more convenient to annotate the literal itself." <inline: true> ^opcode = Literal ifTrue: [address] ifFalse: [address + machineCodeSize]! Item was changed: + ----- Method: CogX64Compiler>>isJumpAt: (in category 'testing') ----- - ----- Method: CogX64Compiler>>isJumpAt: (in category 'disassembly') ----- isJumpAt: pc | op | op := objectMemory byteAt: pc. ^ (op between: 16r70 and: 16r7F) "short conditional jumps" or: [op = 16rE9 "long unconditional jump" or: [op = 16rEB "short unconditional jump" or: [(op = 16r0F "long conditional jumps" and: [(objectMemory byteAt: pc + 1) between: 16r80 and: 16r8F]) or: [op = 16r48 "full unconditional jumps" and: [(objectMemory byteAt: pc + 1) = 16rA1 and: [(objectMemory byteAt: pc + 10) = 16rFF and: [(objectMemory byteAt: pc + 11) = 16rE0]]]]]]]! Item was changed: + ----- Method: Spur32BitCoMemoryManager>>isInHeapBounds: (in category 'debug support') ----- - ----- Method: Spur32BitCoMemoryManager>>isInHeapBounds: (in category 'plugin support') ----- isInHeapBounds: address "Answer if the given address is within the entire range ST object memory. For quick checking during leak checking only!!" ^(self oop: address isGreaterThanOrEqualTo: memory) and: [self oop: address isLessThan: endOfMemory]! Item was added: + ----- Method: Spur32BitMMLECoSimulator>>isInHeapBounds: (in category 'debug support') ----- + isInHeapBounds: address + "Answer if the given address is within the entire range ST object memory. + For quick checking during leak checking only!!" + ^(self oop: address isGreaterThanOrEqualTo: cogit cogCodeBase) + and: [self oop: address isLessThan: endOfMemory]! Item was changed: + ----- Method: Spur64BitCoMemoryManager>>isInHeapBounds: (in category 'debug support') ----- - ----- Method: Spur64BitCoMemoryManager>>isInHeapBounds: (in category 'plugin support') ----- isInHeapBounds: address "Answer if the given address is within the entire range ST object memory. For quick checking during leak checking only!!" ^(self oop: address isGreaterThanOrEqualTo: memory) and: [self oop: address isLessThan: endOfMemory]! Item was added: + ----- Method: Spur64BitMMLECoSimulator>>isInHeapBounds: (in category 'debug support') ----- + isInHeapBounds: address + "Answer if the given address is within the entire range ST object memory. + For quick checking during leak checking only!!" + ^(self oop: address isGreaterThanOrEqualTo: cogit cogCodeBase) + and: [self oop: address isLessThan: endOfMemory]! Item was changed: + ----- Method: SpurMemoryManager>>isInHeapBounds: (in category 'debug support') ----- - ----- Method: SpurMemoryManager>>isInHeapBounds: (in category 'plugin support') ----- isInHeapBounds: address "Answer if the given address is within the entire range ST object memory. For quick checking during leak checking only!!" ^(self oop: address isGreaterThanOrEqualTo: newSpaceStart) and: [self oop: address isLessThan: endOfMemory]! |
Free forum by Nabble | Edit this page |