-
Notifications
You must be signed in to change notification settings - Fork 68
/
VMMachineCodeDebuggerIRInstruction.class.st
103 lines (75 loc) · 2.2 KB
/
VMMachineCodeDebuggerIRInstruction.class.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
Class {
#name : #VMMachineCodeDebuggerIRInstruction,
#superclass : #Object,
#instVars : [
'irinstruction',
'machineSimulator',
'debugger',
'operands'
],
#category : #'VMMaker-Tools'
}
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> address [
^ irinstruction address
]
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> addressString [
^ irinstruction address hex
]
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> debugger: aVMMachineCodeDebugger [
debugger:= aVMMachineCodeDebugger
]
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> initialize [
super initialize.
operands := Array ofSize: 4.
]
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> irinstruction: aCogAbstractInstruction [
irinstruction := aCogAbstractInstruction
]
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> machineCodeInstructionsAddresses [
| startAddress endAddress |
startAddress := self address.
endAddress := startAddress + self machineCodeSize - 4.
^ (startAddress to: endAddress by: 4) collect: [ :address | address ].
]
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> machineCodeSize [
^ irinstruction machineCodeSize
]
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> machineSimulator: aMachineSimulator [
machineSimulator := aMachineSimulator
]
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> opCodeName [
^ irinstruction class nameForOpcode: irinstruction opcode
]
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> operand1 [
^ operands at: 1
]
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> operand2 [
^ operands at: 2
]
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> operand3 [
^ operands at: 3
]
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> operands [
^ operands
]
{ #category : #accessing }
VMMachineCodeDebuggerIRInstruction >> processOperands [
| format strOperands |
format := irinstruction getFormatFromOpCodeName: self opCodeName.
strOperands := irinstruction getOperandsWithFormat: format.
strOperands withIndexDo:
[ :op :i | op ifNotNil: [ operands at: i put: op ] ].
]