[Vm-dev] VM Maker: Cog-eem.433.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Jan 8 06:59:28 UTC 2021


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!




More information about the Vm-dev mailing list