VM Maker: Cog-eem.433.mcz

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

VM Maker: Cog-eem.433.mcz

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

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

Name: Cog-eem.433
Author: eem
Time: 7 January 2021, 10:59:26.348948 pm
UUID: 8f14ae4e-2c3f-4b02-9aea-bfb0346c0854
Ancestors: Cog-eem.432

Time to bring the ARMv8 work back into Cog/VMMaker under full MIT.

=============== Diff against Cog-eem.432 ===============

Item was added:
+ CogProcessorAlien variableByteSubclass: #GdbARMv8Alien
+ instanceVariableNames: ''
+ classVariableNames: 'ID_AA64DFR0_EL1 ID_AA64DFR1_EL1 ID_AA64ISAR0_EL1 ID_AA64ISAR1_EL1 ID_AA64MMFR0_EL1 ID_AA64MMFR1_EL1 ID_AA64PFR0_EL1 ID_AA64PFR1_EL1 Level0FailureTable'
+ poolDictionaries: 'ARMv8A64Opcodes'
+ category: 'Cog-Processors'!
+
+ !GdbARMv8Alien commentStamp: 'eem 11/19/2019 15:39' prior: 0!
+ I am a wrapper around the struct sim aarch64 CPU instance and emulator routines and I give access to disassembling using libopcodes.!

Item was added:
+ ----- Method: GdbARMv8Alien class>>dataSize (in category 'instance creation') -----
+ dataSize
+ ^2280!

Item was added:
+ ----- Method: GdbARMv8Alien class>>implementationClass (in category 'instance creation') -----
+ implementationClass
+ ^Smalltalk wordSize = 8 ifTrue: [GdbARMv8Alien64] ifFalse: [self]!

Item was added:
+ ----- Method: GdbARMv8Alien class>>initialize (in category 'class initialization') -----
+ initialize
+ "Initialize the execution failure dispatch table.  This is organized around op0 in C4.1 of the Arm ARM.
+ Each tuple is a type and a failure routine, or nil of not needed to be handled as an execution failure."
+ "self initialize"
+ Level0FailureTable := #(
+ "0" nil nil nil nil
+ "4" (LDST handleFailingLoadStore:at:in:)
+ "5" nil
+ "6" (LDST handleFailingLoadStore:at:in:)
+ "7" nil nil nil
+ "a" (BR handleFailingBranch:at:in:)
+ "b" (BR handleFailingBranch:at:in:)
+ "c" (LDST handleFailingLoadStore:at:in:)
+ "d" nil
+ "e" (LDST handleFailingLoadStore:at:in:)
+ nil).
+
+ "At least Raspberry Pi 4 running Manjaro allows access to EL1 level system registers...
+ These values are derived from the program in
+ https://android.googlesource.com/kernel/common/+/refs/tags/ASB-2019-03-05_4.14-p-release/Documentation/arm64/cpu-feature-registers.txt
+ run on a raspberry Pi 4 Model B"
+
+ ID_AA64ISAR0_EL1 := 16r00010000.
+ ID_AA64ISAR1_EL1 := 16r00000000.
+ ID_AA64MMFR0_EL1 := 16rFF000000.
+ ID_AA64MMFR1_EL1 := 16r00000000.
+ ID_AA64PFR0_EL1 := 16r00000011.
+ ID_AA64PFR1_EL1 := 16r00000000.
+ ID_AA64DFR0_EL1 := 16r00000006.
+ ID_AA64DFR1_EL1 := 16r00000000
+ !

Item was added:
+ ----- Method: GdbARMv8Alien class>>primitiveNewCPU (in category 'primitives') -----
+ primitiveNewCPU
+ "Answer the address of a new struct sim_spu instance (see processors/ARM/gdb-8.3.1/sim/aarch64/sim_main.h)."
+ <primitive: 'primitiveNewCPU' module: 'GdbARMv8Plugin'>
+ ^self primitiveFailed!

Item was added:
+ ----- Method: GdbARMv8Alien>>abiMarshalArg0:arg1:in: (in category 'accessing-abstract') -----
+ abiMarshalArg0: arg0 arg1: arg1 in: memory
+ "Marshal two integral arguments according to the ABI."
+ self r0: arg0.
+ self r1: arg1!

Item was added:
+ ----- Method: GdbARMv8Alien>>abiMarshalArg0:in: (in category 'accessing-abstract') -----
+ abiMarshalArg0: arg0 in: memory
+ "Marshal one integral argument according to the ABI.
+ Currently used in the COGMTVM to tryLockVMOwner:"
+ self r0: arg0!

Item was added:
+ ----- Method: GdbARMv8Alien>>abstractInstructionCompilerClass (in category 'Cog API') -----
+ abstractInstructionCompilerClass
+ ^CogARMv8Compiler!

Item was added:
+ ----- Method: GdbARMv8Alien>>b0 (in category 'accessing') -----
+ b0
+ ^self unsignedByteAt: 1!

Item was added:
+ ----- Method: GdbARMv8Alien>>b0: (in category 'accessing') -----
+ b0: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 1 put: 0.
+ ^self unsignedByteAt: 1 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b1 (in category 'accessing') -----
+ b1
+ ^self unsignedByteAt: 9!

Item was added:
+ ----- Method: GdbARMv8Alien>>b10 (in category 'accessing') -----
+ b10
+ ^self unsignedByteAt: 81!

Item was added:
+ ----- Method: GdbARMv8Alien>>b10: (in category 'accessing') -----
+ b10: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 81 put: 0.
+ ^self unsignedByteAt: 81 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b11 (in category 'accessing') -----
+ b11
+ ^self unsignedByteAt: 89!

Item was added:
+ ----- Method: GdbARMv8Alien>>b11: (in category 'accessing') -----
+ b11: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 89 put: 0.
+ ^self unsignedByteAt: 89 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b12 (in category 'accessing') -----
+ b12
+ ^self unsignedByteAt: 97!

Item was added:
+ ----- Method: GdbARMv8Alien>>b12: (in category 'accessing') -----
+ b12: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 97 put: 0.
+ ^self unsignedByteAt: 97 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b13 (in category 'accessing') -----
+ b13
+ ^self unsignedByteAt: 105!

Item was added:
+ ----- Method: GdbARMv8Alien>>b13: (in category 'accessing') -----
+ b13: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 105 put: 0.
+ ^self unsignedByteAt: 105 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b14 (in category 'accessing') -----
+ b14
+ ^self unsignedByteAt: 113!

Item was added:
+ ----- Method: GdbARMv8Alien>>b14: (in category 'accessing') -----
+ b14: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 113 put: 0.
+ ^self unsignedByteAt: 113 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b15 (in category 'accessing') -----
+ b15
+ ^self unsignedByteAt: 121!

Item was added:
+ ----- Method: GdbARMv8Alien>>b15: (in category 'accessing') -----
+ b15: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 121 put: 0.
+ ^self unsignedByteAt: 121 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b16 (in category 'accessing') -----
+ b16
+ ^self unsignedByteAt: 129!

Item was added:
+ ----- Method: GdbARMv8Alien>>b16: (in category 'accessing') -----
+ b16: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 129 put: 0.
+ ^self unsignedByteAt: 129 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b17 (in category 'accessing') -----
+ b17
+ ^self unsignedByteAt: 137!

Item was added:
+ ----- Method: GdbARMv8Alien>>b17: (in category 'accessing') -----
+ b17: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 137 put: 0.
+ ^self unsignedByteAt: 137 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b18 (in category 'accessing') -----
+ b18
+ ^self unsignedByteAt: 145!

Item was added:
+ ----- Method: GdbARMv8Alien>>b18: (in category 'accessing') -----
+ b18: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 145 put: 0.
+ ^self unsignedByteAt: 145 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b19 (in category 'accessing') -----
+ b19
+ ^self unsignedByteAt: 153!

Item was added:
+ ----- Method: GdbARMv8Alien>>b19: (in category 'accessing') -----
+ b19: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 153 put: 0.
+ ^self unsignedByteAt: 153 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b1: (in category 'accessing') -----
+ b1: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 9 put: 0.
+ ^self unsignedByteAt: 9 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b2 (in category 'accessing') -----
+ b2
+ ^self unsignedByteAt: 17!

Item was added:
+ ----- Method: GdbARMv8Alien>>b20 (in category 'accessing') -----
+ b20
+ ^self unsignedByteAt: 161!

Item was added:
+ ----- Method: GdbARMv8Alien>>b20: (in category 'accessing') -----
+ b20: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 161 put: 0.
+ ^self unsignedByteAt: 161 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b21 (in category 'accessing') -----
+ b21
+ ^self unsignedByteAt: 169!

Item was added:
+ ----- Method: GdbARMv8Alien>>b21: (in category 'accessing') -----
+ b21: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 169 put: 0.
+ ^self unsignedByteAt: 169 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b22 (in category 'accessing') -----
+ b22
+ ^self unsignedByteAt: 177!

Item was added:
+ ----- Method: GdbARMv8Alien>>b22: (in category 'accessing') -----
+ b22: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 177 put: 0.
+ ^self unsignedByteAt: 177 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b23 (in category 'accessing') -----
+ b23
+ ^self unsignedByteAt: 185!

Item was added:
+ ----- Method: GdbARMv8Alien>>b23: (in category 'accessing') -----
+ b23: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 185 put: 0.
+ ^self unsignedByteAt: 185 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b24 (in category 'accessing') -----
+ b24
+ ^self unsignedByteAt: 193!

Item was added:
+ ----- Method: GdbARMv8Alien>>b24: (in category 'accessing') -----
+ b24: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 193 put: 0.
+ ^self unsignedByteAt: 193 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b25 (in category 'accessing') -----
+ b25
+ ^self unsignedByteAt: 201!

Item was added:
+ ----- Method: GdbARMv8Alien>>b25: (in category 'accessing') -----
+ b25: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 201 put: 0.
+ ^self unsignedByteAt: 201 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b26 (in category 'accessing') -----
+ b26
+ ^self unsignedByteAt: 209!

Item was added:
+ ----- Method: GdbARMv8Alien>>b26: (in category 'accessing') -----
+ b26: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 209 put: 0.
+ ^self unsignedByteAt: 209 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b27 (in category 'accessing') -----
+ b27
+ ^self unsignedByteAt: 217!

Item was added:
+ ----- Method: GdbARMv8Alien>>b27: (in category 'accessing') -----
+ b27: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 217 put: 0.
+ ^self unsignedByteAt: 217 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b28 (in category 'accessing') -----
+ b28
+ ^self unsignedByteAt: 225!

Item was added:
+ ----- Method: GdbARMv8Alien>>b28: (in category 'accessing') -----
+ b28: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 225 put: 0.
+ ^self unsignedByteAt: 225 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b2: (in category 'accessing') -----
+ b2: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 17 put: 0.
+ ^self unsignedByteAt: 17 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b3 (in category 'accessing') -----
+ b3
+ ^self unsignedByteAt: 25!

Item was added:
+ ----- Method: GdbARMv8Alien>>b3: (in category 'accessing') -----
+ b3: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 25 put: 0.
+ ^self unsignedByteAt: 25 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b4 (in category 'accessing') -----
+ b4
+ ^self unsignedByteAt: 33!

Item was added:
+ ----- Method: GdbARMv8Alien>>b4: (in category 'accessing') -----
+ b4: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 33 put: 0.
+ ^self unsignedByteAt: 33 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b5 (in category 'accessing') -----
+ b5
+ ^self unsignedByteAt: 41!

Item was added:
+ ----- Method: GdbARMv8Alien>>b5: (in category 'accessing') -----
+ b5: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 41 put: 0.
+ ^self unsignedByteAt: 41 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b6 (in category 'accessing') -----
+ b6
+ ^self unsignedByteAt: 49!

Item was added:
+ ----- Method: GdbARMv8Alien>>b6: (in category 'accessing') -----
+ b6: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 49 put: 0.
+ ^self unsignedByteAt: 49 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b7 (in category 'accessing') -----
+ b7
+ ^self unsignedByteAt: 57!

Item was added:
+ ----- Method: GdbARMv8Alien>>b7: (in category 'accessing') -----
+ b7: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 57 put: 0.
+ ^self unsignedByteAt: 57 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b8 (in category 'accessing') -----
+ b8
+ ^self unsignedByteAt: 65!

Item was added:
+ ----- Method: GdbARMv8Alien>>b8: (in category 'accessing') -----
+ b8: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 65 put: 0.
+ ^self unsignedByteAt: 65 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>b9 (in category 'accessing') -----
+ b9
+ ^self unsignedByteAt: 73!

Item was added:
+ ----- Method: GdbARMv8Alien>>b9: (in category 'accessing') -----
+ b9: anUnsignedByte
+ "zero extend..."
+ self unsignedLongLongAt: 73 put: 0.
+ ^self unsignedByteAt: 73 put: anUnsignedByte!

Item was added:
+ ----- Method: GdbARMv8Alien>>cResultRegister (in category 'accessing-abstract') -----
+ cResultRegister
+ ^self r0!

Item was added:
+ ----- Method: GdbARMv8Alien>>cResultRegister: (in category 'accessing-abstract') -----
+ cResultRegister: aValue
+ self r0: aValue!

Item was added:
+ ----- Method: GdbARMv8Alien>>clrexOpcode (in category 'opcodes') -----
+ clrexOpcode
+ ^2r11010101000000110011111101011111!

Item was added:
+ ----- Method: GdbARMv8Alien>>controlRegisterGetters (in category 'accessing-abstract') -----
+ controlRegisterGetters
+ ^#(pc rawCPSR fpCPSR fpCPCR nextpc)!

Item was added:
+ ----- Method: GdbARMv8Alien>>convertIntegerToInternal: (in category 'tests support') -----
+ convertIntegerToInternal: anInteger
+ "Conversion for 64-bit processors."
+ ^anInteger signedIntToLong64!

Item was added:
+ ----- Method: GdbARMv8Alien>>d0 (in category 'accessing') -----
+ d0
+ ^self unsignedLongLongAt: 265!

Item was added:
+ ----- Method: GdbARMv8Alien>>d0: (in category 'accessing') -----
+ d0: anUnsignedInteger
+ ^self unsignedLongLongAt: 265 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d1 (in category 'accessing') -----
+ d1
+ ^self unsignedLongLongAt: 281!

Item was added:
+ ----- Method: GdbARMv8Alien>>d10 (in category 'accessing') -----
+ d10
+ ^self unsignedLongLongAt: 425!

Item was added:
+ ----- Method: GdbARMv8Alien>>d10: (in category 'accessing') -----
+ d10: anUnsignedInteger
+ ^self unsignedLongLongAt: 425 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d11 (in category 'accessing') -----
+ d11
+ ^self unsignedLongLongAt: 441!

Item was added:
+ ----- Method: GdbARMv8Alien>>d11: (in category 'accessing') -----
+ d11: anUnsignedInteger
+ ^self unsignedLongLongAt: 441 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d12 (in category 'accessing') -----
+ d12
+ ^self unsignedLongLongAt: 457!

Item was added:
+ ----- Method: GdbARMv8Alien>>d12: (in category 'accessing') -----
+ d12: anUnsignedInteger
+ ^self unsignedLongLongAt: 457 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d13 (in category 'accessing') -----
+ d13
+ ^self unsignedLongLongAt: 473!

Item was added:
+ ----- Method: GdbARMv8Alien>>d13: (in category 'accessing') -----
+ d13: anUnsignedInteger
+ ^self unsignedLongLongAt: 473 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d14 (in category 'accessing') -----
+ d14
+ ^self unsignedLongLongAt: 489!

Item was added:
+ ----- Method: GdbARMv8Alien>>d14: (in category 'accessing') -----
+ d14: anUnsignedInteger
+ ^self unsignedLongLongAt: 489 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d15 (in category 'accessing') -----
+ d15
+ ^self unsignedLongLongAt: 505!

Item was added:
+ ----- Method: GdbARMv8Alien>>d15: (in category 'accessing') -----
+ d15: anUnsignedInteger
+ ^self unsignedLongLongAt: 505 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d16 (in category 'accessing') -----
+ d16
+ ^self unsignedLongLongAt: 521!

Item was added:
+ ----- Method: GdbARMv8Alien>>d16: (in category 'accessing') -----
+ d16: anUnsignedInteger
+ ^self unsignedLongLongAt: 521 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d17 (in category 'accessing') -----
+ d17
+ ^self unsignedLongLongAt: 537!

Item was added:
+ ----- Method: GdbARMv8Alien>>d17: (in category 'accessing') -----
+ d17: anUnsignedInteger
+ ^self unsignedLongLongAt: 537 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d18 (in category 'accessing') -----
+ d18
+ ^self unsignedLongLongAt: 553!

Item was added:
+ ----- Method: GdbARMv8Alien>>d18: (in category 'accessing') -----
+ d18: anUnsignedInteger
+ ^self unsignedLongLongAt: 553 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d19 (in category 'accessing') -----
+ d19
+ ^self unsignedLongLongAt: 569!

Item was added:
+ ----- Method: GdbARMv8Alien>>d19: (in category 'accessing') -----
+ d19: anUnsignedInteger
+ ^self unsignedLongLongAt: 569 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d1: (in category 'accessing') -----
+ d1: anUnsignedInteger
+ ^self unsignedLongLongAt: 281 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d2 (in category 'accessing') -----
+ d2
+ ^self unsignedLongLongAt: 297!

Item was added:
+ ----- Method: GdbARMv8Alien>>d20 (in category 'accessing') -----
+ d20
+ ^self unsignedLongLongAt: 585!

Item was added:
+ ----- Method: GdbARMv8Alien>>d20: (in category 'accessing') -----
+ d20: anUnsignedInteger
+ ^self unsignedLongLongAt: 585 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d21 (in category 'accessing') -----
+ d21
+ ^self unsignedLongLongAt: 601!

Item was added:
+ ----- Method: GdbARMv8Alien>>d21: (in category 'accessing') -----
+ d21: anUnsignedInteger
+ ^self unsignedLongLongAt: 601 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d22 (in category 'accessing') -----
+ d22
+ ^self unsignedLongLongAt: 617!

Item was added:
+ ----- Method: GdbARMv8Alien>>d22: (in category 'accessing') -----
+ d22: anUnsignedInteger
+ ^self unsignedLongLongAt: 617 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d23 (in category 'accessing') -----
+ d23
+ ^self unsignedLongLongAt: 633!

Item was added:
+ ----- Method: GdbARMv8Alien>>d23: (in category 'accessing') -----
+ d23: anUnsignedInteger
+ ^self unsignedLongLongAt: 633 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d24 (in category 'accessing') -----
+ d24
+ ^self unsignedLongLongAt: 649!

Item was added:
+ ----- Method: GdbARMv8Alien>>d24: (in category 'accessing') -----
+ d24: anUnsignedInteger
+ ^self unsignedLongLongAt: 649 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d25 (in category 'accessing') -----
+ d25
+ ^self unsignedLongLongAt: 665!

Item was added:
+ ----- Method: GdbARMv8Alien>>d25: (in category 'accessing') -----
+ d25: anUnsignedInteger
+ ^self unsignedLongLongAt: 665 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d26 (in category 'accessing') -----
+ d26
+ ^self unsignedLongLongAt: 681!

Item was added:
+ ----- Method: GdbARMv8Alien>>d26: (in category 'accessing') -----
+ d26: anUnsignedInteger
+ ^self unsignedLongLongAt: 681 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d27 (in category 'accessing') -----
+ d27
+ ^self unsignedLongLongAt: 697!

Item was added:
+ ----- Method: GdbARMv8Alien>>d27: (in category 'accessing') -----
+ d27: anUnsignedInteger
+ ^self unsignedLongLongAt: 697 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d28 (in category 'accessing') -----
+ d28
+ ^self unsignedLongLongAt: 713!

Item was added:
+ ----- Method: GdbARMv8Alien>>d28: (in category 'accessing') -----
+ d28: anUnsignedInteger
+ ^self unsignedLongLongAt: 713 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d29 (in category 'accessing') -----
+ d29
+ ^self unsignedLongLongAt: 729!

Item was added:
+ ----- Method: GdbARMv8Alien>>d29: (in category 'accessing') -----
+ d29: anUnsignedInteger
+ ^self unsignedLongLongAt: 729 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d2: (in category 'accessing') -----
+ d2: anUnsignedInteger
+ ^self unsignedLongLongAt: 297 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d3 (in category 'accessing') -----
+ d3
+ ^self unsignedLongLongAt: 313!

Item was added:
+ ----- Method: GdbARMv8Alien>>d30 (in category 'accessing') -----
+ d30
+ ^self unsignedLongLongAt: 745!

Item was added:
+ ----- Method: GdbARMv8Alien>>d30: (in category 'accessing') -----
+ d30: anUnsignedInteger
+ ^self unsignedLongLongAt: 745 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d31 (in category 'accessing') -----
+ d31
+ ^self unsignedLongLongAt: 761!

Item was added:
+ ----- Method: GdbARMv8Alien>>d31: (in category 'accessing') -----
+ d31: anUnsignedInteger
+ ^self unsignedLongLongAt: 761 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d3: (in category 'accessing') -----
+ d3: anUnsignedInteger
+ ^self unsignedLongLongAt: 313 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d4 (in category 'accessing') -----
+ d4
+ ^self unsignedLongLongAt: 329!

Item was added:
+ ----- Method: GdbARMv8Alien>>d4: (in category 'accessing') -----
+ d4: anUnsignedInteger
+ ^self unsignedLongLongAt: 329 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d5 (in category 'accessing') -----
+ d5
+ ^self unsignedLongLongAt: 345!

Item was added:
+ ----- Method: GdbARMv8Alien>>d5: (in category 'accessing') -----
+ d5: anUnsignedInteger
+ ^self unsignedLongLongAt: 345 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d6 (in category 'accessing') -----
+ d6
+ ^self unsignedLongLongAt: 361!

Item was added:
+ ----- Method: GdbARMv8Alien>>d6: (in category 'accessing') -----
+ d6: anUnsignedInteger
+ ^self unsignedLongLongAt: 361 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d7 (in category 'accessing') -----
+ d7
+ ^self unsignedLongLongAt: 377!

Item was added:
+ ----- Method: GdbARMv8Alien>>d7: (in category 'accessing') -----
+ d7: anUnsignedInteger
+ ^self unsignedLongLongAt: 377 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d8 (in category 'accessing') -----
+ d8
+ ^self unsignedLongLongAt: 393!

Item was added:
+ ----- Method: GdbARMv8Alien>>d8: (in category 'accessing') -----
+ d8: anUnsignedInteger
+ ^self unsignedLongLongAt: 393 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>d9 (in category 'accessing') -----
+ d9
+ ^self unsignedLongLongAt: 409!

Item was added:
+ ----- Method: GdbARMv8Alien>>d9: (in category 'accessing') -----
+ d9: anUnsignedInteger
+ ^self unsignedLongLongAt: 409 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>decorateDisassembly:for:fromAddress: (in category 'disassembly') -----
+ decorateDisassembly: anInstructionString for: aSymbolManager fromAddress: address
+ ^self decorateDisassembly: anInstructionString for: aSymbolManager fromAddress: address labels: nil!

Item was added:
+ ----- Method: GdbARMv8Alien>>decorateDisassembly:for:fromAddress:labels: (in category 'disassembly') -----
+ decorateDisassembly: anInstructionString for: aSymbolManager fromAddress: address labels: labelDictionaryOrNil
+ "Decode what we can of the instruction and decorate it with useful stuff"
+ | word operand memory theInstructionString mnemonic offsetIdx nonZeroIdx size secondOperand |
+ word := (memory:= aSymbolManager objectMemory) long32At: address.
+ "See #twoWordLiteral in the (ARMv8A64Opcodes instructionIsAnyLoadStore: word) arm below.
+ If a previous pc-relative load has been decorated it will be added to labelDictionaryOrNil,
+ with valuer #twoWordLiteral, so just try and decode the value."
+ labelDictionaryOrNil ifNotNil:
+ [(mnemonic := labelDictionaryOrNil at: address ifAbsent: nil) == #twoWordLiteral ifTrue:
+ [^(anInstructionString copyReplaceAll: '; undefined' with: '')
+  , ((address noMask: 7) "Is this the first word of the literal?"
+ ifTrue: [(aSymbolManager lookupAddress: (memory longAt: address)) ifNotNil: [:label| ' = ', label] ifNil: ['']]
+ ifFalse: [''])].
+ mnemonic = #oneWordLiteral ifTrue:
+ [^(anInstructionString copyReplaceAll: '; undefined' with: ''),
+ ((aSymbolManager lookup32BitWordConstant: word) ifNotNil: [:label| ' => ', label] ifNil: [''])]].
+ mnemonic := (anInstructionString first isLetter
+ ifTrue: [anInstructionString copyUpTo: Character tab]
+ ifFalse: [anInstructionString
+ copyFrom: (anInstructionString indexOf: $:) + 2
+ to: (anInstructionString indexOf: Character tab ifAbsent: [anInstructionString size + 1]) - 1])
+ copyUpTo: Character space.
+
+ "Trim long sequences of zeros in address operands"
+ theInstructionString :=
+ (offsetIdx := (anInstructionString indexOfSubCollection: '0x' startingAt: 12)) > 0
+ ifTrue:
+ [nonZeroIdx := offsetIdx + 2.
+ size := anInstructionString size.
+ [nonZeroIdx <= size and: [(anInstructionString at: nonZeroIdx) == $0]] whileTrue: [nonZeroIdx := nonZeroIdx + 1].
+ nonZeroIdx < size
+ ifTrue: [anInstructionString copyReplaceFrom: offsetIdx + 2 to: nonZeroIdx - 1 with: '']
+ ifFalse: [anInstructionString]]
+ ifFalse: [anInstructionString].
+
+ mnemonic ~= '.inst' ifTrue: "All bets are off for arbitrary literals"
+ [((mnemonic beginsWith: 'ld') or: [(mnemonic beginsWith: 'st') or: [mnemonic beginsWith: 'cas']])
+ ifTrue: [self assert: (ARMv8A64Opcodes instructionIsAnyLoadStore: word)]
+ ifFalse: [self deny: (ARMv8A64Opcodes instructionIsAnyLoadStore: word)].
+ ((mnemonic beginsWith: 'br') or: [(mnemonic beginsWith: 'bl') or: [(mnemonic beginsWith: 'b.')
+ or: [mnemonic = 'b' or: [mnemonic = 'ret']]]])
+ ifTrue: [self assert: (ARMv8A64Opcodes instructionIsAnyB: word)]
+ ifFalse: [self deny: (ARMv8A64Opcodes instructionIsAnyB: word)].
+ "add register names..."
+ offsetIdx := theInstructionString size + 2.
+ [(offsetIdx := theInstructionString lastIndexOf: $x startingAt: offsetIdx - 2) > 1] whileTrue:
+ [| regNum regName stream |
+ ((theInstructionString at: offsetIdx - 1) isAlphaNumeric not
+ and: [(theInstructionString at: offsetIdx + 1) isDigit
+ and: [stream := ReadStream on: theInstructionString from: offsetIdx + 1 to: offsetIdx + 2.
+   (regName := aSymbolManager lookupRegisterNumber: (regNum := Integer readFrom:stream)) notNil]])
+ ifTrue:
+ [((theInstructionString at: offsetIdx - 1) == $[
+  and: [stream position + 4 < theInstructionString size
+  and: [(theInstructionString at: stream position + 3) == $#]]) ifTrue: "excludes e.g. ldr x29, [x16], #8'"
+ [| offsetStream |
+ offsetStream := ReadStream on: theInstructionString from: stream position + 4 to: theInstructionString size.
+ (regNum = FPReg and: [PrintTempNames]) ifTrue:
+ [(aSymbolManager lookupFrameOffset: (Integer readFrom: offsetStream)) ifNotNil:
+ [:varName|
+ theInstructionString := theInstructionString
+ copyReplaceFrom: offsetStream position + 1
+ to: offsetStream position
+ with: ':', varName]].
+ regNum = ReceiverResultReg ifTrue:
+ [(aSymbolManager lookupInstVarOffset: (Integer readFrom: offsetStream)) ifNotNil:
+ [:varName|
+ theInstructionString := theInstructionString
+ copyReplaceFrom: offsetStream position + 1
+ to: offsetStream position
+ with: ':', varName]]].
+ theInstructionString := theInstructionString
+ copyReplaceFrom: stream position + 1
+ to: stream position
+ with: '/', regName]]].
+
+ (ARMv8A64Opcodes instructionIsAnyB: word)
+ ifTrue:
+ [(ARMv8A64Opcodes instructionIsBImm26: word) ifTrue:
+ [operand := ARMv8A64Opcodes extractOffsetFromBImm26: word].
+ (ARMv8A64Opcodes instructionIsBImm19: word) ifTrue:
+ [operand := ARMv8A64Opcodes extractOffsetFromBImm19: word].
+ operand ifNotNil:
+ [operand := (operand bitShift: 2) + address bitAnd: aSymbolManager addressSpaceMask].
+ "We can't extract the offset from a BX/BLX instructions register, unless we're at the current pc,
+ because otherwise its current value has nothing to do with the value when this instruction is executed."
+ (self pc = address
+ and: [ARMv8A64Opcodes instructionIsAnyBX: word]) ifTrue:
+ [operand := (self perform: (self registerStateGetters at: (word >> 5 bitAnd: 31) + 1))]]
+ ifFalse:
+ [(ARMv8A64Opcodes instructionIsAnyLoadStore: word)
+ ifTrue:
+ [| baseR twoWords addr lit signExtend |
+ "first see if this is a load via the varBase register"
+ operand := (baseR := (word >> 5 bitAnd: 31)) = CogARMv8Compiler VarBaseReg ifTrue:
+ [aSymbolManager varBaseAddress + (ARMv8A64Opcodes extractOffsetFromLoadStore: word)].
+ (operand ~~ nil and: [mnemonic = 'ldp' or: [mnemonic = 'stp']]) ifTrue:
+ [secondOperand := operand + 8].
+ "See if this is a pc-relative literal load"
+ (ARMv8A64Opcodes instructionIsPCRelativeLoad: word) ifTrue:
+ [twoWords := word >> 30 anyMask: 1.
+ addr := aSymbolManager backEnd pcRelativeAddressAt: address.
+ lit := twoWords
+ ifTrue: [self assert: (addr noMask: 7).
+ labelDictionaryOrNil ifNotNil:
+ [labelDictionaryOrNil at: addr put: #twoWordLiteral; at: addr + 4 put: #twoWordLiteral].
+ memory longAt: addr]
+ ifFalse:
+ ["If the next instruction is a linked send then mark the literal and it'll get mapped to a class index"
+ labelDictionaryOrNil ifNotNil:
+ [| nextInst |
+ nextInst := memory long32At: address + 4.
+ (ARMv8A64Opcodes instructionIsBImm26: nextInst) ifTrue:
+ [operand := ARMv8A64Opcodes extractOffsetFromBImm26: word.
+ operand := (operand bitShift: 2) + address bitAnd: aSymbolManager addressSpaceMask.
+ operand := aSymbolManager lookupAddress: operand.
+ (operand isNil "Closed PICs"
+  or: [operand includes: $@]) "likely linked send" ifTrue:
+ [labelDictionaryOrNil at: addr put: #oneWordLiteral]]].
+ lit := memory long32At: addr.
+ (signExtend := word >> 31 anyMask: 1)
+ ifTrue: [lit - (lit >> 31 << 32)]
+ ifFalse: [lit]].
+ ^(aSymbolManager lookupAddress: lit)
+ ifNotNil: [:label| theInstructionString, ' = ', label]
+ ifNil: [theInstructionString, ' = ', (lit hex allButFirst: 3)]]]
+ ifFalse:
+ [operand := word]].
+
+ "is there an interesting address for the operand, for this instruction?"
+ operand ifNotNil:
+ [labelDictionaryOrNil ifNotNil:
+ [(labelDictionaryOrNil at: operand ifAbsent: nil) ifNotNil:
+ [:string| ^theInstructionString, ' = ', string]].
+ (aSymbolManager lookupAddress: operand) ifNotNil:
+ [:string| ^theInstructionString, ' = ', string, (secondOperand ifNil: [''] ifNotNil: [',', (aSymbolManager lookupAddress: secondOperand)])]].
+
+ ^theInstructionString!

Item was added:
+ ----- Method: GdbARMv8Alien>>floatingPointRegisterStateGetters (in category 'accessing-abstract') -----
+ floatingPointRegisterStateGetters
+ ^#(d0 d1 d2 d3 d4 d5 d6 d7
+ d8 d9 d10 d11 d12 d13 d14 d15
+ d16 d17 d18 d19 d20 d21 d22 d23
+ d24 d25 d26 d27 d28 d29 d30 d31)!

Item was added:
+ ----- Method: GdbARMv8Alien>>fp (in category 'accessing') -----
+ fp
+ ^self unsignedLongLongAt: 233!

Item was added:
+ ----- Method: GdbARMv8Alien>>fp: (in category 'accessing') -----
+ fp: anUnsignedInteger
+ ^self unsignedLongLongAt: 233 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>fpCPCR (in category 'accessing') -----
+ fpCPCR
+ ^self unsignedLongLongAt: 793!

Item was added:
+ ----- Method: GdbARMv8Alien>>fpCPCR: (in category 'accessing') -----
+ fpCPCR: anUnsignedInteger
+ ^self unsignedLongLongAt: 793 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>fpCPSR (in category 'accessing') -----
+ fpCPSR
+ ^self unsignedLongLongAt: 789!

Item was added:
+ ----- Method: GdbARMv8Alien>>fpCPSR: (in category 'accessing') -----
+ fpCPSR: anUnsignedInteger
+ ^self unsignedLongLongAt: 789 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>h0 (in category 'accessing') -----
+ h0
+ ^self unsignedShortAt: 1!

Item was added:
+ ----- Method: GdbARMv8Alien>>h0: (in category 'accessing') -----
+ h0: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 1 put: 0.
+ ^self unsignedShortAt: 1 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h1 (in category 'accessing') -----
+ h1
+ ^self unsignedShortAt: 9!

Item was added:
+ ----- Method: GdbARMv8Alien>>h10 (in category 'accessing') -----
+ h10
+ ^self unsignedShortAt: 81!

Item was added:
+ ----- Method: GdbARMv8Alien>>h10: (in category 'accessing') -----
+ h10: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 81 put: 0.
+ ^self unsignedShortAt: 81 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h11 (in category 'accessing') -----
+ h11
+ ^self unsignedShortAt: 89!

Item was added:
+ ----- Method: GdbARMv8Alien>>h11: (in category 'accessing') -----
+ h11: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 89 put: 0.
+ ^self unsignedShortAt: 89 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h12 (in category 'accessing') -----
+ h12
+ ^self unsignedShortAt: 97!

Item was added:
+ ----- Method: GdbARMv8Alien>>h12: (in category 'accessing') -----
+ h12: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 97 put: 0.
+ ^self unsignedShortAt: 97 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h13 (in category 'accessing') -----
+ h13
+ ^self unsignedShortAt: 105!

Item was added:
+ ----- Method: GdbARMv8Alien>>h13: (in category 'accessing') -----
+ h13: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 105 put: 0.
+ ^self unsignedShortAt: 105 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h14 (in category 'accessing') -----
+ h14
+ ^self unsignedShortAt: 113!

Item was added:
+ ----- Method: GdbARMv8Alien>>h14: (in category 'accessing') -----
+ h14: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 113 put: 0.
+ ^self unsignedShortAt: 113 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h15 (in category 'accessing') -----
+ h15
+ ^self unsignedShortAt: 121!

Item was added:
+ ----- Method: GdbARMv8Alien>>h15: (in category 'accessing') -----
+ h15: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 121 put: 0.
+ ^self unsignedShortAt: 121 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h16 (in category 'accessing') -----
+ h16
+ ^self unsignedShortAt: 129!

Item was added:
+ ----- Method: GdbARMv8Alien>>h16: (in category 'accessing') -----
+ h16: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 129 put: 0.
+ ^self unsignedShortAt: 129 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h17 (in category 'accessing') -----
+ h17
+ ^self unsignedShortAt: 137!

Item was added:
+ ----- Method: GdbARMv8Alien>>h17: (in category 'accessing') -----
+ h17: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 137 put: 0.
+ ^self unsignedShortAt: 137 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h18 (in category 'accessing') -----
+ h18
+ ^self unsignedShortAt: 145!

Item was added:
+ ----- Method: GdbARMv8Alien>>h18: (in category 'accessing') -----
+ h18: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 145 put: 0.
+ ^self unsignedShortAt: 145 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h19 (in category 'accessing') -----
+ h19
+ ^self unsignedShortAt: 153!

Item was added:
+ ----- Method: GdbARMv8Alien>>h19: (in category 'accessing') -----
+ h19: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 153 put: 0.
+ ^self unsignedShortAt: 153 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h1: (in category 'accessing') -----
+ h1: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 9 put: 0.
+ ^self unsignedShortAt: 9 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h2 (in category 'accessing') -----
+ h2
+ ^self unsignedShortAt: 17!

Item was added:
+ ----- Method: GdbARMv8Alien>>h20 (in category 'accessing') -----
+ h20
+ ^self unsignedShortAt: 161!

Item was added:
+ ----- Method: GdbARMv8Alien>>h20: (in category 'accessing') -----
+ h20: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 161 put: 0.
+ ^self unsignedShortAt: 161 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h21 (in category 'accessing') -----
+ h21
+ ^self unsignedShortAt: 169!

Item was added:
+ ----- Method: GdbARMv8Alien>>h21: (in category 'accessing') -----
+ h21: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 169 put: 0.
+ ^self unsignedShortAt: 169 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h22 (in category 'accessing') -----
+ h22
+ ^self unsignedShortAt: 177!

Item was added:
+ ----- Method: GdbARMv8Alien>>h22: (in category 'accessing') -----
+ h22: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 177 put: 0.
+ ^self unsignedShortAt: 177 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h23 (in category 'accessing') -----
+ h23
+ ^self unsignedShortAt: 185!

Item was added:
+ ----- Method: GdbARMv8Alien>>h23: (in category 'accessing') -----
+ h23: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 185 put: 0.
+ ^self unsignedShortAt: 185 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h24 (in category 'accessing') -----
+ h24
+ ^self unsignedShortAt: 193!

Item was added:
+ ----- Method: GdbARMv8Alien>>h24: (in category 'accessing') -----
+ h24: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 193 put: 0.
+ ^self unsignedShortAt: 193 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h25 (in category 'accessing') -----
+ h25
+ ^self unsignedShortAt: 201!

Item was added:
+ ----- Method: GdbARMv8Alien>>h25: (in category 'accessing') -----
+ h25: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 201 put: 0.
+ ^self unsignedShortAt: 201 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h26 (in category 'accessing') -----
+ h26
+ ^self unsignedShortAt: 209!

Item was added:
+ ----- Method: GdbARMv8Alien>>h26: (in category 'accessing') -----
+ h26: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 209 put: 0.
+ ^self unsignedShortAt: 209 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h27 (in category 'accessing') -----
+ h27
+ ^self unsignedShortAt: 217!

Item was added:
+ ----- Method: GdbARMv8Alien>>h27: (in category 'accessing') -----
+ h27: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 217 put: 0.
+ ^self unsignedShortAt: 217 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h28 (in category 'accessing') -----
+ h28
+ ^self unsignedShortAt: 225!

Item was added:
+ ----- Method: GdbARMv8Alien>>h28: (in category 'accessing') -----
+ h28: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 225 put: 0.
+ ^self unsignedShortAt: 225 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h2: (in category 'accessing') -----
+ h2: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 17 put: 0.
+ ^self unsignedShortAt: 17 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h3 (in category 'accessing') -----
+ h3
+ ^self unsignedShortAt: 25!

Item was added:
+ ----- Method: GdbARMv8Alien>>h3: (in category 'accessing') -----
+ h3: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 25 put: 0.
+ ^self unsignedShortAt: 25 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h4 (in category 'accessing') -----
+ h4
+ ^self unsignedShortAt: 33!

Item was added:
+ ----- Method: GdbARMv8Alien>>h4: (in category 'accessing') -----
+ h4: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 33 put: 0.
+ ^self unsignedShortAt: 33 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h5 (in category 'accessing') -----
+ h5
+ ^self unsignedShortAt: 41!

Item was added:
+ ----- Method: GdbARMv8Alien>>h5: (in category 'accessing') -----
+ h5: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 41 put: 0.
+ ^self unsignedShortAt: 41 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h6 (in category 'accessing') -----
+ h6
+ ^self unsignedShortAt: 49!

Item was added:
+ ----- Method: GdbARMv8Alien>>h6: (in category 'accessing') -----
+ h6: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 49 put: 0.
+ ^self unsignedShortAt: 49 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h7 (in category 'accessing') -----
+ h7
+ ^self unsignedShortAt: 57!

Item was added:
+ ----- Method: GdbARMv8Alien>>h7: (in category 'accessing') -----
+ h7: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 57 put: 0.
+ ^self unsignedShortAt: 57 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h8 (in category 'accessing') -----
+ h8
+ ^self unsignedShortAt: 65!

Item was added:
+ ----- Method: GdbARMv8Alien>>h8: (in category 'accessing') -----
+ h8: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 65 put: 0.
+ ^self unsignedShortAt: 65 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>h9 (in category 'accessing') -----
+ h9
+ ^self unsignedShortAt: 73!

Item was added:
+ ----- Method: GdbARMv8Alien>>h9: (in category 'accessing') -----
+ h9: anUnsignedShort
+ "zero extend..."
+ self unsignedLongLongAt: 73 put: 0.
+ ^self unsignedShortAt: 73 put: anUnsignedShort!

Item was added:
+ ----- Method: GdbARMv8Alien>>hackFixNextPCOfJumpFor:using: (in category 'execution') -----
+ hackFixNextPCOfJumpFor: aProcessorSimulationTrap using: objectMemory
+ "This is a hack fix before we revise the simulators.  When a jump call is made, the
+ next pc is effectively the return address in the link reg, not the instruction following
+ the jump. So reset it here.  All this is because currently the simulators don't execute
+ a control transfer to a fake address, as would a real processor. Once the processor
+ simulators correctly emulate such control transfers, we can ditch this hack."
+
+ aProcessorSimulationTrap nextpc: self lr!

Item was added:
+ ----- Method: GdbARMv8Alien>>handleExecutionPrimitiveFailureIn:minimumAddress:code: (in category 'error handling') -----
+ handleExecutionPrimitiveFailureIn: memoryArray "<Bitmap|ByteArray>" minimumAddress: minimumAddress "<Integer>" code: errorCode "<Integer>"
+ "Handle an execution primitive failure.  Convert out-of-range call and absolute
+ memory read into register instructions into ProcessorSimulationTrap signals."
+ "self disassembleInstructionAt: self pc In: memoryArray"
+ | instr pc op |
+ pc := self pc.
+ instr := self instr.
+ (pc between: minimumAddress and: memoryArray byteSize - 1) ifTrue:
+ [self assert: instr = (memoryArray unsignedLongAt: pc + 1 bigEndian: false)].
+ op := instr >> 25 bitAnd: 16rF.
+ (Level0FailureTable at: op + 1) ifNotNil:
+ [:tuple|
+ ^self perform: (tuple at: 2) with: instr with: pc with: memoryArray].
+ ^self reportPrimitiveFailure!

Item was added:
+ ----- Method: GdbARMv8Alien>>handleFailingBranch:at:in: (in category 'error handling') -----
+ handleFailingBranch: instruction at: pc in: memoryArray "<DoubleWordArray|ByteArray>"
+ "see C4.1.3 Branches, Exception Generating and System instructions in Arm ARM.
+ Table C4-4 op1 plus the two top bit of op1"
+ | opcOp2Op3Op4 op1CRnCRmOp2 |
+ "self disassembleInstructionAt: self pc In: memoryArray"
+ (instruction bitShift: -25) = 2r1101011 ifTrue: "Unconditional branch (register) on page C4-262"
+ [opcOp2Op3Op4 := instruction bitAnd: 2r1111111111111110000011111.
+ opcOp2Op3Op4 = 2r10111110000000000000000 ifTrue: "RET"
+ [^(ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: self lr
+ type: #return)
+ signal].
+ opcOp2Op3Op4 = 2r1111110000000000000000 ifTrue: "BLR"
+ [^(ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: (self perform: (self registerStateGetters at: ((instruction >> 5) bitAnd: 31) + 1))
+ type: #call)
+ signal].
+ opcOp2Op3Op4 = 2r0111110000000000000000 ifTrue: "BR"
+ [^(ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: (self perform: (self registerStateGetters at: ((instruction >> 5) bitAnd: 31) + 1))
+ type: #jump)
+ signal]].
+ instruction = self clrexOpcode ifTrue:
+ [self pc: pc + 4.
+ ^self].
+ (instruction bitShift: -19) = 2r1101010100111 ifTrue: "MRS Op0=3"
+ [op1CRnCRmOp2 := instruction bitAnd: 2r1111111111111100000.
+ "At least Raspberry Pi 4 running Manjaro allows access to ID_AA64ISAR0_EL1"
+ op1CRnCRmOp2 = 2r11000000000 ifTrue:
+ [self perform: (self registerStateSetters at: (instruction bitAnd: 31) + 1) with: ID_AA64ISAR0_EL1.
+ self pc: pc + 4.
+ ^self]].
+ self reportPrimitiveFailure!

Item was added:
+ ----- Method: GdbARMv8Alien>>handleFailingLoadStore:at:in: (in category 'error handling') -----
+ handleFailingLoadStore: instruction at: pc in: memoryArray "<DoubleWordArray|ByteArray>"
+ "C4.1.4 Loads and Stores C4-266
+ This section describes the encoding of the Loads and Stores group. The encodings in this section are decoded from A64 instruction set encoding on page C4-252.
+
+ Table C4-5 Encoding table for the Loads and Stores group
+  
+ op0 31:28 1 op1 26 0 op2 24:23 x op3 21:16 x op4 11:10
+
+ op0 op2 op3 op4
+ xx11 0x 0xxxxx 00 Load/store register (unscaled immediate) on page C4-283
+ xx11 0x 0xxxxx 01 Load/store register (immediate post-indexed) on page C4-284
+ xx11 0x 0xxxxx 10 Load/store register (unprivileged) on page C4-286
+ xx11 0x 0xxxxx 11 Load/store register (immediate pre-indexed) on page C4-286
+ xx11 0x 1xxxxx 00 Atomic memory operations on page C4-288
+ xx11 0x 1xxxxx 10 Load/store register (register offset) on page C4-295
+ xx11 0x 1xxxxx x1 Load/store register (pac) on page C4-297
+ xx11 1x 1xxxxx - Load/store register (unsigned immediate) on page C4-297"
+
+ | op0op2 size op4 rm rn rt opc v offsetFromImm addr shift |
+ "self disassembleInstructionAt: self pc In: memoryArray"
+ size := instruction bitShift: -30.
+ opc := (instruction bitShift: -22) bitAnd: 3.
+ op4 := (instruction bitShift: -10) bitAnd: 3.
+ rn := (instruction bitShift: -5) bitAnd: 31.
+ rt := instruction bitAnd: 31.
+ (rn = 31 and: [self sp anyMask: 15]) ifTrue:
+ [self reportStackAlignmentVolation].
+ "op0 = xx11 op2 = 0x"
+ (op0op2 := (instruction bitShift: -23) bitAnd: 2r1100010) = 2r1100000 ifFalse:
+ [offsetFromImm := ARMv8A64Opcodes extractOffsetFromLoadStore: instruction.
+ (v := instruction >> 26 bitAnd: 1) = 0 ifFalse: [self halt].
+ addr := (self perform: (self registerStateGetters at: rn + 1)) + offsetFromImm.
+ op0op2 = 2r1100010 ifTrue: "Load/store register (unsigned immediate) on page C4-297"
+ [^(opc = 0
+ ifTrue:
+ [ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: addr
+ type: #write
+ accessor: ((self registerStateGettersForSizes: size) at: rt + 1)]
+ ifFalse:
+ [ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: addr
+ type: #read
+ accessor: ((self registerStateSettersForSizes: size) at: rt + 1)])
+ signal].
+ op0op2 = 2r1000010 ifTrue: "Load/store register pair (signed immediate) on page C4-282"
+ [| rt2 |
+ rt2 := (instruction bitShift: -10) bitAnd: 31.
+ ^opc = 0
+ ifTrue:
+ [(ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: addr
+ type: #write
+ accessor: ((self registerStateGettersForSizes: size + 1) at: rt + 1))
+ signal.
+ (ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: addr + 8
+ type: #write
+ accessor: ((self registerStateGettersForSizes: size + 1) at: rt2 + 1))
+ signal]
+ ifFalse:
+ [(ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: addr
+ type: #read
+ accessor: ((self registerStateSettersForSizes: size + 1) at: rt + 1))
+ signal.
+ (ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: addr + 8
+ type: #read
+ accessor: ((self registerStateSettersForSizes: size + 1) at: rt2 + 1))
+ signal]].
+ op0op2 = 0 ifTrue: "LDAXR/STRXR register on page C4-279"
+ [| result rs |
+ self assert: size = 3.
+ opc = 1 ifTrue:
+ [^(ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: addr
+ type: #read
+ accessor: (self registerStateSetters at: rt + 1)) signal].
+ result := (ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: addr
+ type: #write
+ accessor: (self registerStateGetters at: rt + 1)) signal.
+ rs := instruction >> 16 bitAnd: 31.
+ "For now assume the write succeeded..."
+ self perform: ((self registerStateSettersForSizes: 2) at: rs + 1)
+ with: 0.
+ ^result].
+ self halt: 'undecoded failing load/store'].
+
+ ((instruction bitShift: -21) noMask: 1) ifTrue: "op3 = 0xxxxx"
+ [offsetFromImm := ((instruction bitShift: -12) bitAnd: 16r1FF) bitShift: size.
+ opc = 0 ifTrue:"C4-286 opc = 0 => store"
+ [self assert: size = 3.
+ ^(ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: (self perform: (self registerStateGetters at: rn + 1)) + offsetFromImm
+ type: #write
+ accessor: (self registerStateGetters at: rt + 1))
+ signal].
+ opc = 1 ifTrue:
+ [^(ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: (self perform: (self registerStateGetters at: rn + 1)) + offsetFromImm
+ type: #read
+ accessor: ((self registerStateSettersForSizes: size) at: rt + 1))
+ signal].
+ self halt: 'op3 = 0xxxxx opc > 1'].
+
+ "op0 op2 op3 op4
+ xx11 0x 1xxxxx 10 Load/store register (register offset) on page C4-295 (296/297)"
+
+ v := instruction >> 26 bitAnd: 1.
+ rm := instruction >> 16 bitAnd: 31.
+ shift := instruction anyMask: 1 << 12.
+ (size = 3 and: [v = 0]) ifTrue:
+ [addr := (self perform: (self registerStateGetters at: rn + 1))
+ + (shift
+ ifTrue: [(self perform: (self registerStateGetters at: rm + 1)) << size]
+ ifFalse: [self perform: (self registerStateGetters at: rm + 1)]).
+ opc = 0 ifTrue: "STR (register) - 64-bit variant on page C6-1242"
+ [^(ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: addr
+ type: #write
+ accessor: (self registerStateGetters at: rt + 1))
+ signal].
+ opc = 1 ifTrue: "LDR (register) - 64-bit variant on page C6-981"
+ [^(ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: addr
+ type: #read
+ accessor: (self registerStateSetters at: rt + 1))
+ signal].
+ (opc = 3 and: [instruction >> 10 allMask: 63]) ifTrue: "CASAL C4-278/C6-829"
+ [^(CompareAndSwapSimulationTrap
+ pc: pc
+ nextpc: pc + 4
+ address: (self perform: (self registerStateGetters at: rn + 1))
+ type: #write
+ accessor: (self registerStateSetters at: rm + 1))
+ expectedValue: (self perform: (self registerStateGetters at: rm + 1));
+ storedValue: (self perform: (self registerStateGetters at: rt + 1));
+ signal].
+ self halt: 'op3 = 1xxxxx opc > 1'].
+ self halt: 'op3 = 1xxxxx size ~= 3'!

Item was added:
+ ----- Method: GdbARMv8Alien>>initializeStackFor: (in category 'processor setup') -----
+ initializeStackFor: aCogit
+ "Different cpus need different stack alignment etc, so handle the details here.
+ See e.g. https://github.com/ARM-software/software-standards/blob/master/abi/aapcs64/aapcs64.rst#the-stack"
+ aCogit setStackAlignment: 16 expectedSPOffset: 0 expectedFPOffset: 0.
+ PostBuildStackDelta := 0!

Item was added:
+ ----- Method: GdbARMv8Alien>>instr (in category 'accessing') -----
+ instr
+ ^self unsignedLongAt: 809!

Item was added:
+ ----- Method: GdbARMv8Alien>>integerRegisterState (in category 'accessing-abstract') -----
+ integerRegisterState
+ "Answer a DoubleWordArray of the integer registers, the pc and the flags.
+ This primitive is unnecessary; it exists only to speed up single-stepping.
+ If the primitive fails fall back and yield an Array of the same."
+ <primitive: 'primitiveIntegerRegisterState' module: 'GdbARMv8Plugin'>
+ ^{ self   r0. self   r1. self   r2. self   r3. self   r4. self   r5. self   r6. self   r7.
+ self   r8. self   r9. self r10. self r11. self r12. self r13. self r14. self r15.
+ self r16. self r17. self r18. self r19. self r20. self r21. self r22. self r23.
+ self r24. self r25. self r26. self r27. self r28. self   fp. self lr.    self sp.
+ self pc. self rawCPSR }!

Item was added:
+ ----- Method: GdbARMv8Alien>>leafRetpcIn: (in category 'accessing-abstract') -----
+ leafRetpcIn: aMemory
+ "Answer the retpc assuming that the processor is in a simulated call established
+ by simulateLeafCallOf:nextpc:memory:"
+ ^self lr!

Item was added:
+ ----- Method: GdbARMv8Alien>>lr (in category 'accessing') -----
+ lr
+ ^self unsignedLongLongAt: 241!

Item was added:
+ ----- Method: GdbARMv8Alien>>lr: (in category 'accessing') -----
+ lr: anUnsignedInteger
+ ^self unsignedLongLongAt: 241 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>nextpc (in category 'accessing') -----
+ nextpc
+ ^self unsignedLongLongAt: 797!

Item was added:
+ ----- Method: GdbARMv8Alien>>nextpc: (in category 'accessing') -----
+ nextpc: anUnsignedInteger
+ ^self unsignedLongLongAt: 797 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>nopOpcode (in category 'opcodes') -----
+ nopOpcode
+ ^NOP!

Item was added:
+ ----- Method: GdbARMv8Alien>>pc (in category 'accessing') -----
+ pc
+ ^self unsignedLongLongAt: 777!

Item was added:
+ ----- Method: GdbARMv8Alien>>pc: (in category 'accessing') -----
+ pc: anUnsignedInteger
+ ^self unsignedLongLongAt: 777 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>popWordIn: (in category 'execution') -----
+ popWordIn: aMemory
+ | sp word |
+ word := aMemory long64At: (sp := self sp) + 1.
+ self sp: sp + 8.
+ ^word!

Item was added:
+ ----- Method: GdbARMv8Alien>>postCallArgumentsNumArgs:in: (in category 'execution') -----
+ postCallArgumentsNumArgs: numArgs "<Integer>" in: memory "<ByteArray|DoubleWordArray>"
+ "Answer an argument vector of the requested size after a vanilla ABI call. For ARMv8 enough of the Procedure Calling Specification
+ can be found in http://infocenter.arm.com/help/topic/com.arm.doc.den0028b/ARM_DEN0028B_SMC_Calling_Convention.pdf.
+ On ARM this typically means accessing r0 through r7 and fetching additional arguments from the stack.
+ Since we never have arities beyond 4 ish only implement access from register arguments."
+ | args getters |
+ args := Array new: numArgs.
+ getters := self registerStateGetters.
+ (1 to: numArgs) do: [:i | args at: i put: (self perform: (getters at: i))].
+ ^args!

Item was added:
+ ----- Method: GdbARMv8Alien>>primitiveDisassembleAt:inMemory: (in category 'primitives') -----
+ primitiveDisassembleAt: address inMemory: memoryArray "<Bitmap|ByteArray>"
+ "Answer an Array of the size and the disassembled code string for the instruction at the current instruction pointer in memory."
+ <primitive: 'primitiveDisassembleAtInMemory' module: 'GdbARMv8Plugin'>
+ ^self primitiveFailed!

Item was added:
+ ----- Method: GdbARMv8Alien>>primitiveErrorAndLog (in category 'primitives') -----
+ primitiveErrorAndLog
+ "Answer an array of the current error code and log contents"
+ <primitive: 'primitiveErrorAndLog' module: 'GdbARMv8Plugin'>
+ ^self primitiveFailed!

Item was added:
+ ----- Method: GdbARMv8Alien>>primitiveFlushICacheFrom:To: (in category 'primitives') -----
+ primitiveFlushICacheFrom: startAddress "<Integer>" To: endAddress "<Integer>"
+ "Flush the icache in the requested range"
+ <primitive: 'primitiveFlushICacheFromTo' module: 'GdbARMv8Plugin'>
+ ^self primitiveFailed!

Item was added:
+ ----- Method: GdbARMv8Alien>>primitiveResetCPU (in category 'primitives') -----
+ primitiveResetCPU
+ "Reset the receiver to registers all zero, and protected 32-bit mode."
+ <primitive: 'primitiveResetCPU' module: 'GdbARMv8Plugin'>
+ ^self reportPrimitiveFailure!

Item was added:
+ ----- Method: GdbARMv8Alien>>primitiveRunInMemory:minimumAddress:readOnlyBelow: (in category 'primitives') -----
+ primitiveRunInMemory: memoryArray "<Bitmap|ByteArray>" minimumAddress: minimumAddress "<Integer>" readOnlyBelow: minimumWritableAddress "<Integer>"
+ "Run the receiver using the argument as the store.  Origin the argument at 0. i.e. the first byte of the
+ memoryArray is address 0.  Make addresses below minimumAddress illegal.  Convert out-of-range
+ calls, jumps and memory read/writes into ProcessorSimulationTrap signals.
+ Note that minWriteMaxExecAddress is both the minimum writeable address AND the maximum executable address"
+ <primitive: 'primitiveRunInMemoryMinimumAddressReadWrite' module: 'GdbARMv8Plugin' error: ec>
+ ^ec isPrimitiveError
+ ifTrue:
+ [self handleExecutionPrimitiveFailureIn: memoryArray
+ minimumAddress: minimumAddress
+ code: ec errorCode]
+ ifFalse:
+ [ec == #'inappropriate operation'
+ ifTrue: [self handleExecutionPrimitiveFailureIn: memoryArray
+ minimumAddress: minimumAddress]
+ ifFalse: [self reportPrimitiveFailure]]!

Item was added:
+ ----- Method: GdbARMv8Alien>>primitiveSingleStepInMemory:minimumAddress:readOnlyBelow: (in category 'primitives') -----
+ primitiveSingleStepInMemory: memoryArray "<Bitmap|ByteArray>" minimumAddress: minimumAddress "<Integer>" readOnlyBelow: minimumWritableAddress "<Integer>"
+ "Single-step the receiver using the argument as the store.  Origin the argument at 0. i.e. the first byte of the
+ memoryArray is address 0.  Make addresses below minimumAddress illegal.  Convert out-of-range
+ calls, jumps and memory read/writes into ProcessorSimulationTrap signals."
+ <primitive: 'primitiveSingleStepInMemoryMinimumAddressReadWrite' module: 'GdbARMv8Plugin' error: ec>
+ ^ec isPrimitiveError
+ ifTrue:
+ [self handleExecutionPrimitiveFailureIn: memoryArray
+ minimumAddress: minimumAddress
+ code: ec errorCode]
+ ifFalse:
+ [ec == #'inappropriate operation'
+ ifTrue: [self handleExecutionPrimitiveFailureIn: memoryArray
+ minimumAddress: minimumAddress]
+ ifFalse: [self reportPrimitiveFailure]]!

Item was added:
+ ----- Method: GdbARMv8Alien>>printFields:inRegisterState:on: (in category 'printing') -----
+ printFields: fields inRegisterState: registerStateVector on: aStream
+ | rsvs |
+ aStream ensureCr.
+ rsvs := registerStateVector readStream.
+ fields withIndexDo:
+ [:sym :index| | val |
+ sym = #cr
+ ifTrue: [aStream cr]
+ ifFalse:
+ [(val := rsvs next) isNil ifTrue: [^self].
+ aStream nextPutAll: sym; nextPut: $:; space.
+ val printOn: aStream base: 16 length: 16 padded: true.
+ #eflags == sym
+ ifTrue:
+ [aStream space.
+ "'FIVCZN'"'--VCZN' withIndexDo:
+ [:flag :bitIndex|
+ flag ~= $- ifTrue:
+ [aStream nextPut: flag; nextPutAll: 'F='; print: (val bitAnd: 1 << (bitIndex - 1)) >> (bitIndex - 1); space]]]
+ ifFalse:
+ [val > 16 ifTrue:
+ [aStream space; nextPut: $(.
+ val printOn: aStream base: 10 length: 1 padded: false.
+ aStream nextPut: $)]].
+ (fields at: index + 1) ~~ #cr ifTrue:
+ [aStream tab]]]!

Item was added:
+ ----- Method: GdbARMv8Alien>>printRegisterState:on: (in category 'printing') -----
+ printRegisterState: registerStateVector on: aStream
+ (registerStateVector size >= 64
+ ifTrue:
+ [#( (r0 r1 r2 r3 cr)
+ (r4 r5 r6 r7 cr)
+ (r8 r9 r10 r11 cr)
+ (r12 r13 r14 r15 cr)
+ (r16 r17 r18 r19 cr)
+ (r20 r21 r22 r23 cr)
+ (r24 r25 r26 r27 cr)
+ (r28 fp lr sp cr)
+ (d0 d1 d2 d3 cr)
+ (d4 d5 d6 d7 cr)
+ (d8 d9 d10 d11 cr)
+ (d12 d13 d14 d15 cr)
+ (d16 d17 d18 d19 cr)
+ (d20 d21 d22 d23 cr)
+ (d24 d25 d26 d27 cr)
+ (d28 d29 d30 d31 cr))]
+ ifFalse:
+ [#( (r0 r1 r2 r3 cr)
+ (r4 r5 r6 r7 cr)
+ (r8 r9 r10 r11 cr)
+ (r12 r13 r14 r15 cr)
+ (r16 r17 r18 r19 cr)
+ (r20 r21 r22 r23 cr)
+ (r24 r25 r26 r27 cr)
+ (r28 fp lr sp cr))]) doWithIndex:
+ [:subset :index|
+ (subset anySatisfy: [:getter| getter ~~ #cr and: [(self perform: getter) ~= 0]]) ifTrue:
+ [self printFields: subset
+ inRegisterState: (registerStateVector copyFrom: index * 4 - 3 to: index * 4)
+ on: aStream]].
+ registerStateVector size = 34 "i.e. imtegerRegisterState"
+ ifTrue:
+ [self printFields: #(pc rawCPSR cr)
+ inRegisterState: (registerStateVector last: 2)
+ on: aStream]
+ ifFalse:
+ [self printFields: #(pc CPSR FPSR FPCR nextpc cr)
+ inRegisterState: (registerStateVector last: 5)
+ on: aStream]!

Item was added:
+ ----- Method: GdbARMv8Alien>>printRegisterStateExceptPC:on: (in category 'printing') -----
+ printRegisterStateExceptPC: registerStateVector on: aStream
+ self printFields: #( r0 r1 r2 r3 cr
+ r4 r5 r6 r7 cr
+ r8 r9 r10 r11 cr
+ r12 r13 r14 r15 cr
+ r16 r17 r18 r19 cr
+ r20 r21 r22 r23 cr
+ r24 r25 r26 r27 cr
+ r28 fp lr sp cr)
+ inRegisterState: registerStateVector
+ on: aStream!

Item was added:
+ ----- Method: GdbARMv8Alien>>pushPair:and:in: (in category 'execution') -----
+ pushPair: aValue and: bValue in: aMemory
+ | sp |
+ sp := self sp.
+ self assert: (sp noMask: 15).
+ aMemory
+ unsignedLong64At: sp - 8 + 1 put: aValue;
+ unsignedLong64At: sp - 16 + 1 put: bValue.
+ ^self sp: sp - 16!

Item was added:
+ ----- Method: GdbARMv8Alien>>pushWord:in: (in category 'execution') -----
+ pushWord: aValue in: aMemory
+ self assert: (self sp noMask: 15).
+ aMemory unsignedLong64At: (self sp: self sp - 8) + 1 put: aValue!

Item was added:
+ ----- Method: GdbARMv8Alien>>r0 (in category 'accessing') -----
+ r0
+ ^self unsignedLongLongAt: 1!

Item was added:
+ ----- Method: GdbARMv8Alien>>r0: (in category 'accessing') -----
+ r0: anUnsignedInteger
+ ^self unsignedLongLongAt: 1 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r1 (in category 'accessing') -----
+ r1
+ ^self unsignedLongLongAt: 9!

Item was added:
+ ----- Method: GdbARMv8Alien>>r10 (in category 'accessing') -----
+ r10
+ ^self unsignedLongLongAt: 81!

Item was added:
+ ----- Method: GdbARMv8Alien>>r10: (in category 'accessing') -----
+ r10: anUnsignedInteger
+ ^self unsignedLongLongAt: 81 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r11 (in category 'accessing') -----
+ r11
+ ^self unsignedLongLongAt: 89!

Item was added:
+ ----- Method: GdbARMv8Alien>>r11: (in category 'accessing') -----
+ r11: anUnsignedInteger
+ ^self unsignedLongLongAt: 89 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r12 (in category 'accessing') -----
+ r12
+ ^self unsignedLongLongAt: 97!

Item was added:
+ ----- Method: GdbARMv8Alien>>r12: (in category 'accessing') -----
+ r12: anUnsignedInteger
+ ^self unsignedLongLongAt: 97 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r13 (in category 'accessing') -----
+ r13
+ ^self unsignedLongLongAt: 105!

Item was added:
+ ----- Method: GdbARMv8Alien>>r13: (in category 'accessing') -----
+ r13: anUnsignedInteger
+ ^self unsignedLongLongAt: 105 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r14 (in category 'accessing') -----
+ r14
+ ^self unsignedLongLongAt: 113!

Item was added:
+ ----- Method: GdbARMv8Alien>>r14: (in category 'accessing') -----
+ r14: anUnsignedInteger
+ ^self unsignedLongLongAt: 113 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r15 (in category 'accessing') -----
+ r15
+ ^self unsignedLongLongAt: 121!

Item was added:
+ ----- Method: GdbARMv8Alien>>r15: (in category 'accessing') -----
+ r15: anUnsignedInteger
+ ^self unsignedLongLongAt: 121 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r16 (in category 'accessing') -----
+ r16
+ ^self unsignedLongLongAt: 129!

Item was added:
+ ----- Method: GdbARMv8Alien>>r16: (in category 'accessing') -----
+ r16: anUnsignedInteger
+ ^self unsignedLongLongAt: 129 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r17 (in category 'accessing') -----
+ r17
+ ^self unsignedLongLongAt: 137!

Item was added:
+ ----- Method: GdbARMv8Alien>>r17: (in category 'accessing') -----
+ r17: anUnsignedInteger
+ ^self unsignedLongLongAt: 137 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r18 (in category 'accessing') -----
+ r18
+ ^self unsignedLongLongAt: 145!

Item was added:
+ ----- Method: GdbARMv8Alien>>r18: (in category 'accessing') -----
+ r18: anUnsignedInteger
+ ^self unsignedLongLongAt: 145 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r19 (in category 'accessing') -----
+ r19
+ ^self unsignedLongLongAt: 153!

Item was added:
+ ----- Method: GdbARMv8Alien>>r19: (in category 'accessing') -----
+ r19: anUnsignedInteger
+ ^self unsignedLongLongAt: 153 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r1: (in category 'accessing') -----
+ r1: anUnsignedInteger
+ ^self unsignedLongLongAt: 9 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r2 (in category 'accessing') -----
+ r2
+ ^self unsignedLongLongAt: 17!

Item was added:
+ ----- Method: GdbARMv8Alien>>r20 (in category 'accessing') -----
+ r20
+ ^self unsignedLongLongAt: 161!

Item was added:
+ ----- Method: GdbARMv8Alien>>r20: (in category 'accessing') -----
+ r20: anUnsignedInteger
+ ^self unsignedLongLongAt: 161 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r21 (in category 'accessing') -----
+ r21
+ ^self unsignedLongLongAt: 169!

Item was added:
+ ----- Method: GdbARMv8Alien>>r21: (in category 'accessing') -----
+ r21: anUnsignedInteger
+ ^self unsignedLongLongAt: 169 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r22 (in category 'accessing') -----
+ r22
+ ^self unsignedLongLongAt: 177!

Item was added:
+ ----- Method: GdbARMv8Alien>>r22: (in category 'accessing') -----
+ r22: anUnsignedInteger
+ ^self unsignedLongLongAt: 177 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r23 (in category 'accessing') -----
+ r23
+ ^self unsignedLongLongAt: 185!

Item was added:
+ ----- Method: GdbARMv8Alien>>r23: (in category 'accessing') -----
+ r23: anUnsignedInteger
+ ^self unsignedLongLongAt: 185 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r24 (in category 'accessing') -----
+ r24
+ ^self unsignedLongLongAt: 193!

Item was added:
+ ----- Method: GdbARMv8Alien>>r24: (in category 'accessing') -----
+ r24: anUnsignedInteger
+ ^self unsignedLongLongAt: 193 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r25 (in category 'accessing') -----
+ r25
+ ^self unsignedLongLongAt: 201!

Item was added:
+ ----- Method: GdbARMv8Alien>>r25: (in category 'accessing') -----
+ r25: anUnsignedInteger
+ ^self unsignedLongLongAt: 201 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r26 (in category 'accessing') -----
+ r26
+ ^self unsignedLongLongAt: 209!

Item was added:
+ ----- Method: GdbARMv8Alien>>r26: (in category 'accessing') -----
+ r26: anUnsignedInteger
+ ^self unsignedLongLongAt: 209 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r27 (in category 'accessing') -----
+ r27
+ ^self unsignedLongLongAt: 217!

Item was added:
+ ----- Method: GdbARMv8Alien>>r27: (in category 'accessing') -----
+ r27: anUnsignedInteger
+ ^self unsignedLongLongAt: 217 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r28 (in category 'accessing') -----
+ r28
+ ^self unsignedLongLongAt: 225!

Item was added:
+ ----- Method: GdbARMv8Alien>>r28: (in category 'accessing') -----
+ r28: anUnsignedInteger
+ ^self unsignedLongLongAt: 225 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r2: (in category 'accessing') -----
+ r2: anUnsignedInteger
+ ^self unsignedLongLongAt: 17 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r3 (in category 'accessing') -----
+ r3
+ ^self unsignedLongLongAt: 25!

Item was added:
+ ----- Method: GdbARMv8Alien>>r3: (in category 'accessing') -----
+ r3: anUnsignedInteger
+ ^self unsignedLongLongAt: 25 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r4 (in category 'accessing') -----
+ r4
+ ^self unsignedLongLongAt: 33!

Item was added:
+ ----- Method: GdbARMv8Alien>>r4: (in category 'accessing') -----
+ r4: anUnsignedInteger
+ ^self unsignedLongLongAt: 33 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r5 (in category 'accessing') -----
+ r5
+ ^self unsignedLongLongAt: 41!

Item was added:
+ ----- Method: GdbARMv8Alien>>r5: (in category 'accessing') -----
+ r5: anUnsignedInteger
+ ^self unsignedLongLongAt: 41 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r6 (in category 'accessing') -----
+ r6
+ ^self unsignedLongLongAt: 49!

Item was added:
+ ----- Method: GdbARMv8Alien>>r6: (in category 'accessing') -----
+ r6: anUnsignedInteger
+ ^self unsignedLongLongAt: 49 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r7 (in category 'accessing') -----
+ r7
+ ^self unsignedLongLongAt: 57!

Item was added:
+ ----- Method: GdbARMv8Alien>>r7: (in category 'accessing') -----
+ r7: anUnsignedInteger
+ ^self unsignedLongLongAt: 57 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r8 (in category 'accessing') -----
+ r8
+ ^self unsignedLongLongAt: 65!

Item was added:
+ ----- Method: GdbARMv8Alien>>r8: (in category 'accessing') -----
+ r8: anUnsignedInteger
+ ^self unsignedLongLongAt: 65 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>r9 (in category 'accessing') -----
+ r9
+ ^self unsignedLongLongAt: 73!

Item was added:
+ ----- Method: GdbARMv8Alien>>r9: (in category 'accessing') -----
+ r9: anUnsignedInteger
+ ^self unsignedLongLongAt: 73 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>rawCPSR (in category 'accessing') -----
+ rawCPSR
+ ^self unsignedLongLongAt: 785!

Item was added:
+ ----- Method: GdbARMv8Alien>>rawCPSR: (in category 'accessing') -----
+ rawCPSR: anUnsignedInteger
+ ^self unsignedLongLongAt: 785 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>rawPrimitiveRunInMemory:offsetBy:minimumAddress:readOnlyBelow: (in category 'primitives-simulation') -----
+ rawPrimitiveRunInMemory: memoryArray offsetBy: offset minimumAddress: minimumAddress readOnlyBelow: minimumWritableAddress
+ "A version of primitiveRunInMemory:offsetBy:minimumAddress:readOnlyBelow: for simulation"
+ <primitive: 'primitiveRunInMemoryOffsetMinimumAddressReadWrite' module: 'GdbARMv8Plugin' error: ec>
+ ^ec!

Item was added:
+ ----- Method: GdbARMv8Alien>>rawPrimitiveSingleStepInMemory:offsetBy:minimumAddress:readOnlyBelow: (in category 'primitives-simulation') -----
+ rawPrimitiveSingleStepInMemory: memoryArray offsetBy: offset minimumAddress: minimumAddress readOnlyBelow: minimumWritableAddress
+ "A version of primitiveSingleStepInMemory:offsetBy:minimumAddress:readOnlyBelow: for simulation"
+ <primitive: 'primitiveSingleStepInMemoryOffsetMinimumAddressReadWrite' module: 'GdbARMv8Plugin' error: ec>
+ ^ec!

Item was added:
+ ----- Method: GdbARMv8Alien>>registerState (in category 'accessing-abstract') -----
+ registerState
+ ^{ self r0. self r1. self r2. self r3. self r4. self r5. self r6. self r7.
+ self r8. self r9. self r10. self r11. self r12. self r13. self r14. self r15.
+ self r16. self r17. self r18. self r19. self r20. self r21. self r22. self r23.
+ self r24. self r25. self r26. self r27. self r28. self fp. self lr. self sp.
+ self d0. self d1. self d2. self d3. self d4. self d5. self d6. self d7.
+ self d8. self d9. self d10. self d11. self d12. self d13. self d14. self d15.
+ self d16. self d17. self d18. self d19. self d20. self d21. self d22. self d23.
+ self d24. self d25. self d26. self d27. self d28. self d29. self d30. self d31.
+ self pc. self rawCPSR. self fpCPSR. self fpCPCR. self nextpc }!

Item was added:
+ ----- Method: GdbARMv8Alien>>registerStateGetters (in category 'accessing-abstract') -----
+ registerStateGetters
+ ^#(r0 r1 r2 r3 r4 r5 r6 r7
+ r8 r9 r10 r11 r12 r13 r14 r15
+ r16 r17 r18 r19 r20 r21 r22 r23
+ r24 r25 r26 r27 r28 fp lr sp
+ d0 d1 d2 d3 d4 d5 d6 d7
+ d8 d9 d10 d11 d12 d13 d14 d15
+ d16 d17 d18 d19 d20 d21 d22 d23
+ d24 d25 d26 d27 d28 d29 d30 d31
+ pc rawCPSR fpCPSR fpCPCR nextpc)!

Item was added:
+ ----- Method: GdbARMv8Alien>>registerStateGettersForSizes: (in category 'accessing-abstract') -----
+ registerStateGettersForSizes: sizeField
+ "Answer the array of regular register getters for sizeFieldPlusOne, so
+ if sizeField is 0, and the getters are byte register getters
+ if sizeField is 1, and the getters are halfword register getters
+ if sizeField is 2, and the getters are word register getters
+ if sizeField is 3, and the getters are the doubleword register getters, the normal getters"
+ ^#((b0 b1 b2 b3 b4 b5 b6 b7
+ b8 b9 b10 b11 b12 b13 b14 b15
+ b16 b17 b18 b19 b20 b21 b22 b23
+ b24 b25 b26 b27 b28 b29)
+ (h0 h1 h2 h3 h4 h5 h6 h7
+ h8 h9 h10 h11 h12 h13 h14 h15
+ h16 h17 h18 h19 h20 h21 h22 h23
+ h24 h25 h26 h27 h28 h29)
+ (w0 w1 w2 w3 w4 w5 w6 w7
+ w8 w9 w10 w11 w12 w13 w14 w15
+ w16 w17 w18 w19 w20 w21 w22 w23
+ w24 w25 w26 w27 w28 w29)
+ (r0 r1 r2 r3 r4 r5 r6 r7
+ r8 r9 r10 r11 r12 r13 r14 r15
+ r16 r17 r18 r19 r20 r21 r22 r23
+ r24 r25 r26 r27 r28 fp lr sp)) at: sizeField + 1!

Item was added:
+ ----- Method: GdbARMv8Alien>>registerStatePCIndex (in category 'accessing-abstract') -----
+ registerStatePCIndex
+ "Answer the index of the PC register in the Array answered by integerRegisterState"
+ ^33!

Item was added:
+ ----- Method: GdbARMv8Alien>>registerStateSetters (in category 'accessing-abstract') -----
+ registerStateSetters
+ ^#(r0: r1: r2: r3: r4: r5: r6: r7:
+ r8: r9: r10: r11: r12: r13: r14: r15:
+ r16: r17: r18: r19: r20: r21: r22: r23:
+ r24: r25: r26: r27: r28: fp: lr: sp:
+ d0: d1: d2: d3: d4: d5: d6: d7:
+ d8: d9: d10: d11: d12: d13: d14: d15:
+ d16: d17: d18: d19: d20: d21: d22: d23:
+ d24: d25: d26: d27: d28: d29: d30: d31:
+ pc:  rawCPSR: fpCPSR: fpCPCR: nextpc:)!

Item was added:
+ ----- Method: GdbARMv8Alien>>registerStateSettersForSizes: (in category 'accessing-abstract') -----
+ registerStateSettersForSizes: sizeField
+ "Answer the array of regular register setters for sizeFieldPlusOne, so
+ if sizeField is 0, and the setters are byte register setters
+ if sizeField is 1, and the setters are halfword register setters
+ if sizeField is 2, and the setters are word register setters
+ if sizeField is 3, and the setters are the doubleword register setters, the normal setters"
+ ^#((b0: b1: b2: b3: b4: b5: b6: b7:
+ b8: b9: b10: b11: b12: b13: b14: b15:
+ b16: b17: b18: b19: b20: b21: b22: b23:
+ b24: b25: b26: b27: b28: b29)
+ (h0: h1: h2: h3: h4: h5: h6: h7:
+ h8: h9: h10: h11: h12: h13: h14: h15:
+ h16: h17: h18: h19: h20: h21: h22: h23:
+ h24: h25: h26: h27: h28: h29)
+ (w0: w1: w2: w3: w4: w5: w6: w7:
+ w8: w9: w10: w11: w12: w13: w14: w15:
+ w16: w17: w18: w19: w20: w21: w22: w23:
+ w24: w25: w26: w27: w28: w29)
+ (r0: r1: r2: r3: r4: r5: r6: r7:
+ r8: r9: r10: r11: r12: r13: r14: r15:
+ r16: r17: r18: r19: r20: r21: r22: r23:
+ r24: r25: r26: r27: r28: fp: lr: sp:)) at: sizeField + 1!

Item was added:
+ ----- Method: GdbARMv8Alien>>reset (in category 'processor setup') -----
+ reset
+ self primitiveResetCPU!

Item was added:
+ ----- Method: GdbARMv8Alien>>retpcIn: (in category 'accessing-abstract') -----
+ retpcIn: aMemory
+ "The return address is on the stack, having been pushed by either
+ simulateCallOf:nextpc:memory: or simulateJumpCallOf:memory:"
+ ^aMemory long64At: self fp + 9!

Item was added:
+ ----- Method: GdbARMv8Alien>>setFlagsForCompareAndSwap: (in category 'execution') -----
+ setFlagsForCompareAndSwap: aBoolean
+ "ARMv8 does not set flags as part of CASAL et al. That requires a separate compare. So simply ignore."!

Item was added:
+ ----- Method: GdbARMv8Alien>>setFramePointer:stackPointer: (in category 'accessing-abstract') -----
+ setFramePointer: framePointer stackPointer: stackPointer
+ "Initialize the processor's frame and stack pointers"
+ self fp: framePointer.
+ self sp: stackPointer!

Item was added:
+ ----- Method: GdbARMv8Alien>>setIntegerRegisterState: (in category 'accessing-abstract') -----
+ setIntegerRegisterState: newState
+ "Set the state reasonably efficiently, for the benefit of the MultiProcessor."
+
+ self r0: (newState at: 1). self r1: (newState at: 2). self r2: (newState at: 3). self r3: (newState at: 4).
+ self r4: (newState at: 5). self r5: (newState at: 6). self r6: (newState at: 7). self r7: (newState at: 8).
+ self r8: (newState at: 9). self r9: (newState at: 10). self r10: (newState at: 11). self r11: (newState at: 12).
+ self r12: (newState at: 13). self r13: (newState at: 14). self r14: (newState at: 15). self r15: (newState at: 16).
+ self r16: (newState at: 17). self r17: (newState at: 18). self r18: (newState at: 19). self r19: (newState at: 20).
+ self r20: (newState at: 21). self r21: (newState at: 22). self r22: (newState at: 23). self r23: (newState at: 24).
+ self r24: (newState at: 25). self r25: (newState at: 26). self r26: (newState at: 27). self r27: (newState at: 28).
+ self r28: (newState at: 29). self fp: (newState at: 30). self lr: (newState at: 31). self sp: (newState at: 32).
+ self pc: (newState at: 33).
+ self rawCPSR:  (newState at: 34)!

Item was added:
+ ----- Method: GdbARMv8Alien>>simulateCallOf:nextpc:memory: (in category 'execution') -----
+ simulateCallOf: address nextpc: nextpc memory: aMemory
+ "Simulate a frame-building call of address.  Build a frame since
+ this is used for calls into the run-time which are unlikely to be leaf-calls"
+
+ self fp: (self pushPair: self lr and: self fp in: aMemory).
+ self pc: address!

Item was added:
+ ----- Method: GdbARMv8Alien>>simulateJumpCallOf:memory: (in category 'execution') -----
+ simulateJumpCallOf: address memory: aMemory
+ "Simulate a frame-building jump call of address.  Build a frame since
+ this is used for calls into the run-time which are unlikely to be leaf-calls"
+
+ self fp: (self pushPair: self lr and: self fp in: aMemory).
+ self pc: address!

Item was added:
+ ----- Method: GdbARMv8Alien>>simulateLeafCallOf:nextpc:memory: (in category 'execution') -----
+ simulateLeafCallOf: address nextpc: nextpc memory: aMemory
+ self lr: nextpc.
+ self pc: address!

Item was added:
+ ----- Method: GdbARMv8Alien>>simulateLeafReturnIn: (in category 'execution') -----
+ simulateLeafReturnIn: aMemory
+ self pc: self lr!

Item was added:
+ ----- Method: GdbARMv8Alien>>simulateReturnIn: (in category 'execution') -----
+ simulateReturnIn: aMemory
+ PostBuildStackDelta ~= 0 ifTrue:
+ [self sp: self sp + PostBuildStackDelta].
+ self fp: (self popWordIn: aMemory).
+ self pc: (self popWordIn: aMemory)!

Item was added:
+ ----- Method: GdbARMv8Alien>>smashCallerSavedRegistersWithValuesFrom:by: (in category 'accessing-abstract') -----
+ smashCallerSavedRegistersWithValuesFrom: base by: step
+ | setters |
+ setters := self registerStateSetters.
+ 1 to: 18 do:
+ [:index|
+ self perform: (setters at: index) with: index - 1 * step + base]!

Item was added:
+ ----- Method: GdbARMv8Alien>>smashRegisterAccessors (in category 'accessing-abstract') -----
+ smashRegisterAccessors
+ "See Table 3-1 Register Usage in AArch64 SMC32, HVC32, SMC64, and HVC64 calls
+ in http://infocenter.arm.com/help/topic/com.arm.doc.den0028b/ARM_DEN0028B_SMC_Calling_Convention.pdf"
+ ^#(r0: r1: r2: r3: r4: r5: r6: r7: r8: r9: r10: r11: r12: r13: r14: r15: r16: r17:)!

Item was added:
+ ----- Method: GdbARMv8Alien>>sp (in category 'accessing') -----
+ sp
+ ^self unsignedLongLongAt: 249!

Item was added:
+ ----- Method: GdbARMv8Alien>>sp: (in category 'accessing') -----
+ sp: anUnsignedInteger
+ ^self unsignedLongLongAt: 249 put: anUnsignedInteger!

Item was added:
+ ----- Method: GdbARMv8Alien>>w0 (in category 'accessing') -----
+ w0
+ ^self unsignedLongAt: 1!

Item was added:
+ ----- Method: GdbARMv8Alien>>w0: (in category 'accessing') -----
+ w0: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 1 put: 0.
+ ^self unsignedLongAt: 1 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w1 (in category 'accessing') -----
+ w1
+ ^self unsignedLongAt: 9!

Item was added:
+ ----- Method: GdbARMv8Alien>>w10 (in category 'accessing') -----
+ w10
+ ^self unsignedLongAt: 81!

Item was added:
+ ----- Method: GdbARMv8Alien>>w10: (in category 'accessing') -----
+ w10: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 81 put: 0.
+ ^self unsignedLongAt: 81 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w11 (in category 'accessing') -----
+ w11
+ ^self unsignedLongAt: 89!

Item was added:
+ ----- Method: GdbARMv8Alien>>w11: (in category 'accessing') -----
+ w11: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 89 put: 0.
+ ^self unsignedLongAt: 89 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w12 (in category 'accessing') -----
+ w12
+ ^self unsignedLongAt: 97!

Item was added:
+ ----- Method: GdbARMv8Alien>>w12: (in category 'accessing') -----
+ w12: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 97 put: 0.
+ ^self unsignedLongAt: 97 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w13 (in category 'accessing') -----
+ w13
+ ^self unsignedLongAt: 105!

Item was added:
+ ----- Method: GdbARMv8Alien>>w13: (in category 'accessing') -----
+ w13: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 105 put: 0.
+ ^self unsignedLongAt: 105 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w14 (in category 'accessing') -----
+ w14
+ ^self unsignedLongAt: 113!

Item was added:
+ ----- Method: GdbARMv8Alien>>w14: (in category 'accessing') -----
+ w14: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 113 put: 0.
+ ^self unsignedLongAt: 113 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w15 (in category 'accessing') -----
+ w15
+ ^self unsignedLongAt: 121!

Item was added:
+ ----- Method: GdbARMv8Alien>>w15: (in category 'accessing') -----
+ w15: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 121 put: 0.
+ ^self unsignedLongAt: 121 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w16 (in category 'accessing') -----
+ w16
+ ^self unsignedLongAt: 129!

Item was added:
+ ----- Method: GdbARMv8Alien>>w16: (in category 'accessing') -----
+ w16: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 129 put: 0.
+ ^self unsignedLongAt: 129 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w17 (in category 'accessing') -----
+ w17
+ ^self unsignedLongAt: 137!

Item was added:
+ ----- Method: GdbARMv8Alien>>w17: (in category 'accessing') -----
+ w17: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 137 put: 0.
+ ^self unsignedLongAt: 137 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w18 (in category 'accessing') -----
+ w18
+ ^self unsignedLongAt: 145!

Item was added:
+ ----- Method: GdbARMv8Alien>>w18: (in category 'accessing') -----
+ w18: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 145 put: 0.
+ ^self unsignedLongAt: 145 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w19 (in category 'accessing') -----
+ w19
+ ^self unsignedLongAt: 153!

Item was added:
+ ----- Method: GdbARMv8Alien>>w19: (in category 'accessing') -----
+ w19: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 153 put: 0.
+ ^self unsignedLongAt: 153 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w1: (in category 'accessing') -----
+ w1: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 9 put: 0.
+ ^self unsignedLongAt: 9 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w2 (in category 'accessing') -----
+ w2
+ ^self unsignedLongAt: 17!

Item was added:
+ ----- Method: GdbARMv8Alien>>w20 (in category 'accessing') -----
+ w20
+ ^self unsignedLongAt: 161!

Item was added:
+ ----- Method: GdbARMv8Alien>>w20: (in category 'accessing') -----
+ w20: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 161 put: 0.
+ ^self unsignedLongAt: 161 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w21 (in category 'accessing') -----
+ w21
+ ^self unsignedLongAt: 169!

Item was added:
+ ----- Method: GdbARMv8Alien>>w21: (in category 'accessing') -----
+ w21: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 169 put: 0.
+ ^self unsignedLongAt: 169 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w22 (in category 'accessing') -----
+ w22
+ ^self unsignedLongAt: 177!

Item was added:
+ ----- Method: GdbARMv8Alien>>w22: (in category 'accessing') -----
+ w22: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 177 put: 0.
+ ^self unsignedLongAt: 177 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w23 (in category 'accessing') -----
+ w23
+ ^self unsignedLongAt: 185!

Item was added:
+ ----- Method: GdbARMv8Alien>>w23: (in category 'accessing') -----
+ w23: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 185 put: 0.
+ ^self unsignedLongAt: 185 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w24 (in category 'accessing') -----
+ w24
+ ^self unsignedLongAt: 193!

Item was added:
+ ----- Method: GdbARMv8Alien>>w24: (in category 'accessing') -----
+ w24: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 193 put: 0.
+ ^self unsignedLongAt: 193 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w25 (in category 'accessing') -----
+ w25
+ ^self unsignedLongAt: 201!

Item was added:
+ ----- Method: GdbARMv8Alien>>w25: (in category 'accessing') -----
+ w25: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 201 put: 0.
+ ^self unsignedLongAt: 201 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w26 (in category 'accessing') -----
+ w26
+ ^self unsignedLongAt: 209!

Item was added:
+ ----- Method: GdbARMv8Alien>>w26: (in category 'accessing') -----
+ w26: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 209 put: 0.
+ ^self unsignedLongAt: 209 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w27 (in category 'accessing') -----
+ w27
+ ^self unsignedLongAt: 217!

Item was added:
+ ----- Method: GdbARMv8Alien>>w27: (in category 'accessing') -----
+ w27: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 217 put: 0.
+ ^self unsignedLongAt: 217 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w28 (in category 'accessing') -----
+ w28
+ ^self unsignedLongAt: 225!

Item was added:
+ ----- Method: GdbARMv8Alien>>w28: (in category 'accessing') -----
+ w28: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 225 put: 0.
+ ^self unsignedLongAt: 225 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w2: (in category 'accessing') -----
+ w2: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 17 put: 0.
+ ^self unsignedLongAt: 17 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w3 (in category 'accessing') -----
+ w3
+ ^self unsignedLongAt: 25!

Item was added:
+ ----- Method: GdbARMv8Alien>>w3: (in category 'accessing') -----
+ w3: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 25 put: 0.
+ ^self unsignedLongAt: 25 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w4 (in category 'accessing') -----
+ w4
+ ^self unsignedLongAt: 33!

Item was added:
+ ----- Method: GdbARMv8Alien>>w4: (in category 'accessing') -----
+ w4: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 33 put: 0.
+ ^self unsignedLongAt: 33 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w5 (in category 'accessing') -----
+ w5
+ ^self unsignedLongAt: 41!

Item was added:
+ ----- Method: GdbARMv8Alien>>w5: (in category 'accessing') -----
+ w5: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 41 put: 0.
+ ^self unsignedLongAt: 41 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w6 (in category 'accessing') -----
+ w6
+ ^self unsignedLongAt: 49!

Item was added:
+ ----- Method: GdbARMv8Alien>>w6: (in category 'accessing') -----
+ w6: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 49 put: 0.
+ ^self unsignedLongAt: 49 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w7 (in category 'accessing') -----
+ w7
+ ^self unsignedLongAt: 57!

Item was added:
+ ----- Method: GdbARMv8Alien>>w7: (in category 'accessing') -----
+ w7: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 57 put: 0.
+ ^self unsignedLongAt: 57 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w8 (in category 'accessing') -----
+ w8
+ ^self unsignedLongAt: 65!

Item was added:
+ ----- Method: GdbARMv8Alien>>w8: (in category 'accessing') -----
+ w8: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 65 put: 0.
+ ^self unsignedLongAt: 65 put: anUnsignedLong!

Item was added:
+ ----- Method: GdbARMv8Alien>>w9 (in category 'accessing') -----
+ w9
+ ^self unsignedLongAt: 73!

Item was added:
+ ----- Method: GdbARMv8Alien>>w9: (in category 'accessing') -----
+ w9: anUnsignedLong
+ "zero extend..."
+ self unsignedLongLongAt: 73 put: 0.
+ ^self unsignedLongAt: 73 put: anUnsignedLong!

Item was added:
+ GdbARMv8Alien variableByteSubclass: #GdbARMv8Alien64
+ instanceVariableNames: ''
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'Cog-Processors'!
+
+ !GdbARMv8Alien64 commentStamp: 'eem 11/19/2019 15:39' prior: 0!
+ I am a wrapper around the struct sim aarch64 CPU instance and emulator routines when compiled for 64-bits. I give access to disassembling using libopcodes.!

Item was added:
+ ----- Method: GdbARMv8Alien64 class>>dataSize (in category 'instance creation') -----
+ dataSize
+ ^2280!

Item was added:
+ ----- Method: GdbARMv8Alien64>>nextpc (in category 'accessing') -----
+ nextpc
+ ^self unsignedLongLongAt: 801!

Item was added:
+ ----- Method: GdbARMv8Alien64>>nextpc: (in category 'accessing') -----
+ nextpc: anUnsignedInteger
+ ^self unsignedLongLongAt: 801 put: anUnsignedInteger!