[Vm-dev] VM Maker: VMMaker.oscog-eem.2648.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun Dec 29 20:52:00 UTC 2019
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]!
More information about the Vm-dev
mailing list