Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.310.mcz
==================== Summary ====================
Name: Cog-eem.310 Author: eem Time: 17 December 2015, 12:05:25.428 am UUID: 1b369b07-853b-4937-8a11-b48bef3e5cae Ancestors: Cog-eem.309
Fix or implement Move ALOb/ObAL/AXOv/OvAX error handling for x64. I had copied the opcodes wrongly from x64.
=============== Diff against Cog-eem.309 ===============
Item was changed: ----- Method: BochsX64Alien class>>initialize (in category 'class initialization') ----- initialize "BochsX64Alien initialize" | it | it := self basicNew. OpcodeExceptionMap := Array new: 256 withAll: #handleExecutionPrimitiveFailureAt:in:rex:. OpcodeExceptionMap + at: 1 + it callOpcode put: #handleCallFailureAt:in:rex:; + at: 1 + it jmpOpcode put: #handleJmpFailureAt:in:rex:; + at: 1 + it retOpcode put: #handleRetFailureAt:in:rex:; - at: 1 + it callOpcode put: #handleCallFailureAt:in:rex:; - at: 1 + it jmpOpcode put: #handleJmpFailureAt:in:rex:; - at: 1 + it retOpcode put: #handleRetFailureAt:in:rex:; at: 1 + it movALObOpcode put: #handleMovALObFailureAt:in:rex:; + at: 1 + it movAXOvOpcode put: #handleMovAXOvFailureAt:in:rex:; at: 1 + it movObALOpcode put: #handleMovObALFailureAt:in:rex:; + at: 1 + it movOvAXOpcode put: #handleMovOvAXFailureAt:in:rex:; at: 1 + it movGvEvOpcode put: #handleMovGvEvFailureAt:in:rex:; at: 1 + it movEvGvOpcode put: #handleMovEvGvFailureAt:in:rex:; at: 1 + it movGbEbOpcode put: #handleMovGbEbFailureAt:in:rex:; at: 1 + it movEbGbOpcode put: #handleMovEbGbFailureAt:in:rex:; at: 1 + 16rFF put: #handleGroup5FailureAt:in:rex:. "Table A6 One-Byte and Two-Byte Opcode ModRM Extensions" ExtendedOpcodeExceptionMap := Array new: 256 withAll: #handleExecutionPrimitiveFailureAt:in:rex:. ExtendedOpcodeExceptionMap at: 1 + it movGvEbOpcode put: #handleMovGvEbFailureAt:in:rex:!
Item was changed: ----- Method: BochsX64Alien>>handleMovALObFailureAt:in:rex: (in category 'error handling') ----- handleMovALObFailureAt: pc "<Integer>" in: memoryArray "<Bitmap|ByteArray>" rex: rexByteOrNil "<Integer|nil>" + "Convert an execution primitive failure for a read into al into a ProcessorSimulationTrap signal." - "Convert an execution primitive failure for a read into rax/eax into a ProcessorSimulationTrap signal." rexByteOrNil ifNotNil: + [self assert: rexByteOrNil = 16r48. + ^(ProcessorSimulationTrap - [^(ProcessorSimulationTrap pc: pc nextpc: pc + 10 address: (memoryArray unsignedLong64At: pc + 3) type: #read + accessor: #al:) - accessor: #rax:) signal]. ^(ProcessorSimulationTrap pc: pc nextpc: pc + 5 address: (memoryArray unsignedLongAt: pc + 2) type: #read + accessor: #al:) - accessor: #eax:) signal!
Item was added: + ----- Method: BochsX64Alien>>handleMovAXOvFailureAt:in:rex: (in category 'error handling') ----- + handleMovAXOvFailureAt: pc "<Integer>" in: memoryArray "<Bitmap|ByteArray>" rex: rexByteOrNil "<Integer|nil>" + "Convert an execution primitive failure for a read into rax/eax into a ProcessorSimulationTrap signal." + rexByteOrNil ifNotNil: + [self assert: rexByteOrNil = 16r48. + ^(ProcessorSimulationTrap + pc: pc + nextpc: pc + 10 + address: (memoryArray unsignedLong64At: pc + 3) + type: #read + accessor: #rax:) + signal]. + ^(ProcessorSimulationTrap + pc: pc + nextpc: pc + 5 + address: (memoryArray unsignedLongAt: pc + 2) + type: #read + accessor: #eax:) + signal!
Item was changed: ----- Method: BochsX64Alien>>handleMovObALFailureAt:in:rex: (in category 'error handling') ----- handleMovObALFailureAt: pc "<Integer>" in: memoryArray "<Bitmap|ByteArray>" rex: rexByteOrNil "<Integer|nil>" + "Convert an execution primitive failure for a write of al into a ProcessorSimulationTrap signal." + self assert: rexByteOrNil = 16r48. - "Convert an execution primitive failure for a write of eax into a ProcessorSimulationTrap signal." - self shouldBeImplemented. ^(ProcessorSimulationTrap pc: pc + nextpc: pc + 10 + address: (memoryArray unsignedLong64At: pc + 3) - nextpc: pc + 5 - address: (memoryArray unsignedLongAt: pc + 2 bigEndian: false) type: #write + accessor: #al) - accessor: #eax) signal!
Item was added: + ----- Method: BochsX64Alien>>handleMovOvAXFailureAt:in:rex: (in category 'error handling') ----- + handleMovOvAXFailureAt: pc "<Integer>" in: memoryArray "<Bitmap|ByteArray>" rex: rexByteOrNil "<Integer|nil>" + "Convert an execution primitive failure for a write of rax into a ProcessorSimulationTrap signal." + self assert: rexByteOrNil = 16r48. + ^(ProcessorSimulationTrap + pc: pc + nextpc: pc + 10 + address: (memoryArray unsignedLong64At: pc + 3) + type: #write + accessor: #rax) + signal!
Item was changed: ----- Method: BochsX64Alien>>movALObOpcode (in category 'opcodes') ----- movALObOpcode "[1] IA-32 Intel® Architecture Software Developer's Manual Volume 2B: Instruction Set Reference, N-Z. table A2, pA7" + ^16rA0! - ^16rA1!
Item was added: + ----- Method: BochsX64Alien>>movAXOvOpcode (in category 'opcodes') ----- + movAXOvOpcode + "[1] IA-32 Intel® Architecture Software Developer's Manual Volume 2B: Instruction Set Reference, N-Z. + table A2, pA7" + ^16rA1!
Item was changed: ----- Method: BochsX64Alien>>movObALOpcode (in category 'opcodes') ----- movObALOpcode "[1] IA-32 Intel® Architecture Software Developer's Manual Volume 2B: Instruction Set Reference, N-Z. table A2, pA7" + ^16rA2! - ^16rA3!
Item was added: + ----- Method: BochsX64Alien>>movOvAXOpcode (in category 'opcodes') ----- + movOvAXOpcode + "[1] IA-32 Intel® Architecture Software Developer's Manual Volume 2B: Instruction Set Reference, N-Z. + table A2, pA7" + ^16rA3!
vm-dev@lists.squeakfoundation.org