smallworld-re 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- smallworld/__init__.py +35 -0
- smallworld/analyses/__init__.py +14 -0
- smallworld/analyses/analysis.py +88 -0
- smallworld/analyses/code_coverage.py +31 -0
- smallworld/analyses/colorizer.py +682 -0
- smallworld/analyses/colorizer_summary.py +100 -0
- smallworld/analyses/field_detection/__init__.py +14 -0
- smallworld/analyses/field_detection/field_analysis.py +536 -0
- smallworld/analyses/field_detection/guards.py +26 -0
- smallworld/analyses/field_detection/hints.py +133 -0
- smallworld/analyses/field_detection/malloc.py +211 -0
- smallworld/analyses/forced_exec/__init__.py +3 -0
- smallworld/analyses/forced_exec/forced_exec.py +87 -0
- smallworld/analyses/underlays/__init__.py +4 -0
- smallworld/analyses/underlays/basic.py +13 -0
- smallworld/analyses/underlays/underlay.py +31 -0
- smallworld/analyses/unstable/__init__.py +4 -0
- smallworld/analyses/unstable/angr/__init__.py +0 -0
- smallworld/analyses/unstable/angr/base.py +12 -0
- smallworld/analyses/unstable/angr/divergence.py +274 -0
- smallworld/analyses/unstable/angr/model.py +383 -0
- smallworld/analyses/unstable/angr/nwbt.py +63 -0
- smallworld/analyses/unstable/angr/typedefs.py +170 -0
- smallworld/analyses/unstable/angr/utils.py +25 -0
- smallworld/analyses/unstable/angr/visitor.py +315 -0
- smallworld/analyses/unstable/angr_nwbt.py +106 -0
- smallworld/analyses/unstable/code_coverage.py +54 -0
- smallworld/analyses/unstable/code_reachable.py +44 -0
- smallworld/analyses/unstable/control_flow_tracer.py +71 -0
- smallworld/analyses/unstable/pointer_finder.py +90 -0
- smallworld/arch/__init__.py +0 -0
- smallworld/arch/aarch64_arch.py +286 -0
- smallworld/arch/amd64_arch.py +86 -0
- smallworld/arch/i386_arch.py +44 -0
- smallworld/emulators/__init__.py +14 -0
- smallworld/emulators/angr/__init__.py +7 -0
- smallworld/emulators/angr/angr.py +1652 -0
- smallworld/emulators/angr/default.py +15 -0
- smallworld/emulators/angr/exceptions.py +7 -0
- smallworld/emulators/angr/exploration/__init__.py +9 -0
- smallworld/emulators/angr/exploration/bounds.py +27 -0
- smallworld/emulators/angr/exploration/default.py +17 -0
- smallworld/emulators/angr/exploration/terminate.py +22 -0
- smallworld/emulators/angr/factory.py +55 -0
- smallworld/emulators/angr/machdefs/__init__.py +35 -0
- smallworld/emulators/angr/machdefs/aarch64.py +292 -0
- smallworld/emulators/angr/machdefs/amd64.py +192 -0
- smallworld/emulators/angr/machdefs/arm.py +387 -0
- smallworld/emulators/angr/machdefs/i386.py +221 -0
- smallworld/emulators/angr/machdefs/machdef.py +138 -0
- smallworld/emulators/angr/machdefs/mips.py +184 -0
- smallworld/emulators/angr/machdefs/mips64.py +189 -0
- smallworld/emulators/angr/machdefs/ppc.py +101 -0
- smallworld/emulators/angr/machdefs/riscv.py +261 -0
- smallworld/emulators/angr/machdefs/xtensa.py +255 -0
- smallworld/emulators/angr/memory/__init__.py +7 -0
- smallworld/emulators/angr/memory/default.py +10 -0
- smallworld/emulators/angr/memory/fixups.py +43 -0
- smallworld/emulators/angr/memory/memtrack.py +105 -0
- smallworld/emulators/angr/scratch.py +43 -0
- smallworld/emulators/angr/simos.py +53 -0
- smallworld/emulators/angr/utils.py +70 -0
- smallworld/emulators/emulator.py +1013 -0
- smallworld/emulators/hookable.py +252 -0
- smallworld/emulators/panda/__init__.py +5 -0
- smallworld/emulators/panda/machdefs/__init__.py +28 -0
- smallworld/emulators/panda/machdefs/aarch64.py +93 -0
- smallworld/emulators/panda/machdefs/amd64.py +71 -0
- smallworld/emulators/panda/machdefs/arm.py +89 -0
- smallworld/emulators/panda/machdefs/i386.py +36 -0
- smallworld/emulators/panda/machdefs/machdef.py +86 -0
- smallworld/emulators/panda/machdefs/mips.py +94 -0
- smallworld/emulators/panda/machdefs/mips64.py +91 -0
- smallworld/emulators/panda/machdefs/ppc.py +79 -0
- smallworld/emulators/panda/panda.py +575 -0
- smallworld/emulators/unicorn/__init__.py +13 -0
- smallworld/emulators/unicorn/machdefs/__init__.py +28 -0
- smallworld/emulators/unicorn/machdefs/aarch64.py +310 -0
- smallworld/emulators/unicorn/machdefs/amd64.py +326 -0
- smallworld/emulators/unicorn/machdefs/arm.py +321 -0
- smallworld/emulators/unicorn/machdefs/i386.py +137 -0
- smallworld/emulators/unicorn/machdefs/machdef.py +117 -0
- smallworld/emulators/unicorn/machdefs/mips.py +202 -0
- smallworld/emulators/unicorn/unicorn.py +684 -0
- smallworld/exceptions/__init__.py +5 -0
- smallworld/exceptions/exceptions.py +85 -0
- smallworld/exceptions/unstable/__init__.py +1 -0
- smallworld/exceptions/unstable/exceptions.py +25 -0
- smallworld/extern/__init__.py +4 -0
- smallworld/extern/ctypes.py +94 -0
- smallworld/extern/unstable/__init__.py +1 -0
- smallworld/extern/unstable/ghidra.py +129 -0
- smallworld/helpers.py +107 -0
- smallworld/hinting/__init__.py +8 -0
- smallworld/hinting/hinting.py +214 -0
- smallworld/hinting/hints.py +427 -0
- smallworld/hinting/unstable/__init__.py +2 -0
- smallworld/hinting/utils.py +19 -0
- smallworld/instructions/__init__.py +18 -0
- smallworld/instructions/aarch64.py +20 -0
- smallworld/instructions/arm.py +18 -0
- smallworld/instructions/bsid.py +67 -0
- smallworld/instructions/instructions.py +258 -0
- smallworld/instructions/mips.py +21 -0
- smallworld/instructions/x86.py +100 -0
- smallworld/logging.py +90 -0
- smallworld/platforms.py +95 -0
- smallworld/py.typed +0 -0
- smallworld/state/__init__.py +6 -0
- smallworld/state/cpus/__init__.py +32 -0
- smallworld/state/cpus/aarch64.py +563 -0
- smallworld/state/cpus/amd64.py +676 -0
- smallworld/state/cpus/arm.py +630 -0
- smallworld/state/cpus/cpu.py +71 -0
- smallworld/state/cpus/i386.py +239 -0
- smallworld/state/cpus/mips.py +374 -0
- smallworld/state/cpus/mips64.py +372 -0
- smallworld/state/cpus/powerpc.py +229 -0
- smallworld/state/cpus/riscv.py +357 -0
- smallworld/state/cpus/xtensa.py +80 -0
- smallworld/state/memory/__init__.py +7 -0
- smallworld/state/memory/code.py +70 -0
- smallworld/state/memory/elf/__init__.py +3 -0
- smallworld/state/memory/elf/elf.py +564 -0
- smallworld/state/memory/elf/rela/__init__.py +32 -0
- smallworld/state/memory/elf/rela/aarch64.py +27 -0
- smallworld/state/memory/elf/rela/amd64.py +32 -0
- smallworld/state/memory/elf/rela/arm.py +51 -0
- smallworld/state/memory/elf/rela/i386.py +32 -0
- smallworld/state/memory/elf/rela/mips.py +45 -0
- smallworld/state/memory/elf/rela/ppc.py +45 -0
- smallworld/state/memory/elf/rela/rela.py +63 -0
- smallworld/state/memory/elf/rela/riscv64.py +27 -0
- smallworld/state/memory/elf/rela/xtensa.py +15 -0
- smallworld/state/memory/elf/structs.py +55 -0
- smallworld/state/memory/heap.py +85 -0
- smallworld/state/memory/memory.py +181 -0
- smallworld/state/memory/stack/__init__.py +31 -0
- smallworld/state/memory/stack/aarch64.py +22 -0
- smallworld/state/memory/stack/amd64.py +42 -0
- smallworld/state/memory/stack/arm.py +66 -0
- smallworld/state/memory/stack/i386.py +22 -0
- smallworld/state/memory/stack/mips.py +34 -0
- smallworld/state/memory/stack/mips64.py +34 -0
- smallworld/state/memory/stack/ppc.py +34 -0
- smallworld/state/memory/stack/riscv.py +22 -0
- smallworld/state/memory/stack/stack.py +127 -0
- smallworld/state/memory/stack/xtensa.py +34 -0
- smallworld/state/models/__init__.py +6 -0
- smallworld/state/models/mmio.py +186 -0
- smallworld/state/models/model.py +163 -0
- smallworld/state/models/posix.py +455 -0
- smallworld/state/models/x86/__init__.py +2 -0
- smallworld/state/models/x86/microsoftcdecl.py +35 -0
- smallworld/state/models/x86/systemv.py +240 -0
- smallworld/state/state.py +962 -0
- smallworld/state/unstable/__init__.py +0 -0
- smallworld/state/unstable/elf.py +393 -0
- smallworld/state/x86_registers.py +30 -0
- smallworld/utils.py +935 -0
- smallworld_re-1.0.0.dist-info/LICENSE.txt +21 -0
- smallworld_re-1.0.0.dist-info/METADATA +189 -0
- smallworld_re-1.0.0.dist-info/RECORD +166 -0
- smallworld_re-1.0.0.dist-info/WHEEL +5 -0
- smallworld_re-1.0.0.dist-info/entry_points.txt +2 -0
- smallworld_re-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,676 @@
|
|
1
|
+
import typing
|
2
|
+
|
3
|
+
from ... import platforms
|
4
|
+
from .. import state
|
5
|
+
from ..x86_registers import X86MMRRegister
|
6
|
+
from . import cpu
|
7
|
+
|
8
|
+
|
9
|
+
class AMD64(cpu.CPU):
|
10
|
+
"""Generic AMD64 CPU state model.
|
11
|
+
|
12
|
+
Specific implementations support different vector extensions.
|
13
|
+
Because of how smallworld works, an emulator can only support
|
14
|
+
platforms if it supports all base registers.
|
15
|
+
Since the AVX extensions keep adding registers under
|
16
|
+
the old ones, we need new platforms.
|
17
|
+
"""
|
18
|
+
|
19
|
+
_GENERAL_PURPOSE_REGS = [
|
20
|
+
"rax",
|
21
|
+
"rbx",
|
22
|
+
"rcx",
|
23
|
+
"rdx",
|
24
|
+
"rdi",
|
25
|
+
"rsi",
|
26
|
+
"rbp",
|
27
|
+
"rsp",
|
28
|
+
"r8",
|
29
|
+
"r9",
|
30
|
+
"r10",
|
31
|
+
"r11",
|
32
|
+
"r12",
|
33
|
+
"r13",
|
34
|
+
"r14",
|
35
|
+
"r15",
|
36
|
+
]
|
37
|
+
|
38
|
+
def get_general_purpose_registers(self) -> typing.List[str]:
|
39
|
+
return self._GENERAL_PURPOSE_REGS
|
40
|
+
|
41
|
+
def __init__(self):
|
42
|
+
super().__init__()
|
43
|
+
# *** General Purpose Registers ***
|
44
|
+
self.rax = state.Register("rax", 8)
|
45
|
+
self.add(self.rax)
|
46
|
+
self.eax = state.RegisterAlias("eax", self.rax, 4, 0)
|
47
|
+
self.add(self.eax)
|
48
|
+
self.ax = state.RegisterAlias("ax", self.rax, 2, 0)
|
49
|
+
self.add(self.ax)
|
50
|
+
self.al = state.RegisterAlias("al", self.rax, 1, 0)
|
51
|
+
self.add(self.al)
|
52
|
+
self.ah = state.RegisterAlias("ah", self.rax, 1, 1)
|
53
|
+
self.add(self.ah)
|
54
|
+
|
55
|
+
self.rbx = state.Register("rbx", 8)
|
56
|
+
self.add(self.rbx)
|
57
|
+
self.ebx = state.RegisterAlias("ebx", self.rbx, 4, 0)
|
58
|
+
self.add(self.ebx)
|
59
|
+
self.bx = state.RegisterAlias("bx", self.rbx, 2, 0)
|
60
|
+
self.add(self.bx)
|
61
|
+
self.bl = state.RegisterAlias("bl", self.rbx, 1, 0)
|
62
|
+
self.add(self.bl)
|
63
|
+
self.bh = state.RegisterAlias("bh", self.rbx, 1, 1)
|
64
|
+
self.add(self.bh)
|
65
|
+
|
66
|
+
self.rcx = state.Register("rcx", 8)
|
67
|
+
self.add(self.rcx)
|
68
|
+
self.ecx = state.RegisterAlias("ecx", self.rcx, 4, 0)
|
69
|
+
self.add(self.ecx)
|
70
|
+
self.cx = state.RegisterAlias("cx", self.rcx, 2, 0)
|
71
|
+
self.add(self.cx)
|
72
|
+
self.cl = state.RegisterAlias("cl", self.rcx, 1, 0)
|
73
|
+
self.add(self.cl)
|
74
|
+
self.ch = state.RegisterAlias("ch", self.rcx, 1, 1)
|
75
|
+
self.add(self.ch)
|
76
|
+
|
77
|
+
self.rdx = state.Register("rdx", 8)
|
78
|
+
self.add(self.rdx)
|
79
|
+
self.edx = state.RegisterAlias("edx", self.rdx, 4, 0)
|
80
|
+
self.add(self.edx)
|
81
|
+
self.dx = state.RegisterAlias("dx", self.rdx, 2, 0)
|
82
|
+
self.add(self.dx)
|
83
|
+
self.dl = state.RegisterAlias("dl", self.rdx, 1, 0)
|
84
|
+
self.add(self.dl)
|
85
|
+
self.dh = state.RegisterAlias("dh", self.rdx, 1, 1)
|
86
|
+
self.add(self.dh)
|
87
|
+
|
88
|
+
self.r8 = state.Register("r8", 8)
|
89
|
+
self.add(self.r8)
|
90
|
+
self.r8d = state.RegisterAlias("r8d", self.r8, 4, 0)
|
91
|
+
self.add(self.r8d)
|
92
|
+
self.r8w = state.RegisterAlias("r8w", self.r8, 2, 0)
|
93
|
+
self.add(self.r8w)
|
94
|
+
self.r8b = state.RegisterAlias("r8b", self.r8, 1, 0)
|
95
|
+
self.add(self.r8b)
|
96
|
+
|
97
|
+
self.r9 = state.Register("r9", 8)
|
98
|
+
self.add(self.r9)
|
99
|
+
self.r9d = state.RegisterAlias("r9d", self.r9, 4, 0)
|
100
|
+
self.add(self.r9d)
|
101
|
+
self.r9w = state.RegisterAlias("r9w", self.r9, 2, 0)
|
102
|
+
self.add(self.r9w)
|
103
|
+
self.r9b = state.RegisterAlias("r9b", self.r9, 1, 0)
|
104
|
+
self.add(self.r9b)
|
105
|
+
|
106
|
+
self.r10 = state.Register("r10", 8)
|
107
|
+
self.add(self.r10)
|
108
|
+
self.r10d = state.RegisterAlias("r10d", self.r10, 4, 0)
|
109
|
+
self.add(self.r10d)
|
110
|
+
self.r10w = state.RegisterAlias("r10w", self.r10, 2, 0)
|
111
|
+
self.add(self.r10w)
|
112
|
+
self.r10b = state.RegisterAlias("r10b", self.r10, 1, 0)
|
113
|
+
self.add(self.r10b)
|
114
|
+
|
115
|
+
self.r11 = state.Register("r11", 8)
|
116
|
+
self.add(self.r11)
|
117
|
+
self.r11d = state.RegisterAlias("r11d", self.r11, 4, 0)
|
118
|
+
self.add(self.r11d)
|
119
|
+
self.r11w = state.RegisterAlias("r11w", self.r11, 2, 0)
|
120
|
+
self.add(self.r11w)
|
121
|
+
self.r11b = state.RegisterAlias("r11b", self.r11, 1, 0)
|
122
|
+
self.add(self.r11b)
|
123
|
+
|
124
|
+
self.r12 = state.Register("r12", 8)
|
125
|
+
self.add(self.r12)
|
126
|
+
self.r12d = state.RegisterAlias("r12d", self.r12, 4, 0)
|
127
|
+
self.add(self.r12d)
|
128
|
+
self.r12w = state.RegisterAlias("r12w", self.r12, 2, 0)
|
129
|
+
self.add(self.r12w)
|
130
|
+
self.r12b = state.RegisterAlias("r12b", self.r12, 1, 0)
|
131
|
+
self.add(self.r12b)
|
132
|
+
|
133
|
+
self.r13 = state.Register("r13", 8)
|
134
|
+
self.add(self.r13)
|
135
|
+
self.r13d = state.RegisterAlias("r13d", self.r13, 4, 0)
|
136
|
+
self.add(self.r13d)
|
137
|
+
self.r13w = state.RegisterAlias("r13w", self.r13, 2, 0)
|
138
|
+
self.add(self.r13w)
|
139
|
+
self.r13b = state.RegisterAlias("r13b", self.r13, 1, 0)
|
140
|
+
self.add(self.r13b)
|
141
|
+
|
142
|
+
self.r14 = state.Register("r14", 8)
|
143
|
+
self.add(self.r14)
|
144
|
+
self.r14d = state.RegisterAlias("r14d", self.r14, 4, 0)
|
145
|
+
self.add(self.r14d)
|
146
|
+
self.r14w = state.RegisterAlias("r14w", self.r14, 2, 0)
|
147
|
+
self.add(self.r14w)
|
148
|
+
self.r14b = state.RegisterAlias("r14b", self.r14, 1, 0)
|
149
|
+
self.add(self.r14b)
|
150
|
+
|
151
|
+
self.r15 = state.Register("r15", 8)
|
152
|
+
self.add(self.r15)
|
153
|
+
self.r15d = state.RegisterAlias("r15d", self.r15, 4, 0)
|
154
|
+
self.add(self.r15d)
|
155
|
+
self.r15w = state.RegisterAlias("r15w", self.r15, 2, 0)
|
156
|
+
self.add(self.r15w)
|
157
|
+
self.r15b = state.RegisterAlias("r15b", self.r15, 1, 0)
|
158
|
+
self.add(self.r15b)
|
159
|
+
|
160
|
+
self.rdi = state.Register("rdi", 8)
|
161
|
+
self.add(self.rdi)
|
162
|
+
self.edi = state.RegisterAlias("edi", self.rdi, 4, 0)
|
163
|
+
self.add(self.edi)
|
164
|
+
self.di = state.RegisterAlias("di", self.rdi, 2, 0)
|
165
|
+
self.add(self.di)
|
166
|
+
self.dil = state.RegisterAlias("dil", self.rdi, 1, 0)
|
167
|
+
self.add(self.dil)
|
168
|
+
|
169
|
+
self.rsi = state.Register("rsi", 8)
|
170
|
+
self.add(self.rsi)
|
171
|
+
self.esi = state.RegisterAlias("rsi", self.rsi, 4, 0)
|
172
|
+
self.add(self.esi)
|
173
|
+
self.si = state.RegisterAlias("si", self.rsi, 2, 0)
|
174
|
+
self.add(self.si)
|
175
|
+
self.sil = state.RegisterAlias("sil", self.rsi, 1, 0)
|
176
|
+
self.add(self.sil)
|
177
|
+
|
178
|
+
self.rsp = state.Register("rsp", 8)
|
179
|
+
self.add(self.rsp)
|
180
|
+
self.esp = state.RegisterAlias("rsp", self.rsp, 4, 0)
|
181
|
+
self.add(self.esp)
|
182
|
+
self.sp = state.RegisterAlias("sp", self.rsp, 2, 0)
|
183
|
+
self.add(self.sp)
|
184
|
+
self.spl = state.RegisterAlias("spl", self.rsp, 1, 0)
|
185
|
+
self.add(self.spl)
|
186
|
+
|
187
|
+
self.rbp = state.Register("rbp", 8)
|
188
|
+
self.add(self.rbp)
|
189
|
+
self.ebp = state.RegisterAlias("rbp", self.rbp, 4, 0)
|
190
|
+
self.add(self.ebp)
|
191
|
+
self.bp = state.RegisterAlias("bp", self.rbp, 2, 0)
|
192
|
+
self.add(self.bp)
|
193
|
+
self.bpl = state.RegisterAlias("bpl", self.rbp, 1, 0)
|
194
|
+
self.add(self.bpl)
|
195
|
+
|
196
|
+
# *** Instruction Pointer ***
|
197
|
+
self.rip = state.Register("rip", 8)
|
198
|
+
self.add(self.rip)
|
199
|
+
self.eip = state.RegisterAlias("rip", self.rip, 4, 0)
|
200
|
+
self.add(self.eip)
|
201
|
+
self.ip = state.RegisterAlias("ip", self.rip, 2, 0)
|
202
|
+
self.add(self.ip)
|
203
|
+
|
204
|
+
self.pc = state.RegisterAlias("pc", self.rip, 8, 0)
|
205
|
+
self.add(self.pc)
|
206
|
+
|
207
|
+
# *** Flags register ***
|
208
|
+
self.rflags = state.Register("rflags", 8)
|
209
|
+
self.add(self.rflags)
|
210
|
+
self.eflags = state.RegisterAlias("eflags", self.rflags, 4, 0)
|
211
|
+
self.add(self.eflags)
|
212
|
+
self.flags = state.RegisterAlias("flags", self.rflags, 2, 0)
|
213
|
+
self.add(self.flags)
|
214
|
+
|
215
|
+
# *** Segment Registers ***
|
216
|
+
# NOTE: These are actually 16 bits
|
217
|
+
# However, their representation in different emulators gets weird.
|
218
|
+
self.cs = state.Register("cs", 8)
|
219
|
+
self.add(self.cs)
|
220
|
+
self.ds = state.Register("ds", 8)
|
221
|
+
self.add(self.ds)
|
222
|
+
self.es = state.Register("es", 8)
|
223
|
+
self.add(self.es)
|
224
|
+
self.fs = state.Register("fs", 8)
|
225
|
+
self.add(self.fs)
|
226
|
+
self.gs = state.Register("gs", 8)
|
227
|
+
self.add(self.gs)
|
228
|
+
|
229
|
+
# *** Control Registers ***
|
230
|
+
self.cr0 = state.Register("cr0", 8)
|
231
|
+
self.add(self.cr0)
|
232
|
+
self.cr1 = state.Register("cr1", 8)
|
233
|
+
self.add(self.cr1)
|
234
|
+
self.cr2 = state.Register("cr2", 8)
|
235
|
+
self.add(self.cr2)
|
236
|
+
self.cr3 = state.Register("cr3", 8)
|
237
|
+
self.add(self.cr3)
|
238
|
+
self.cr4 = state.Register("cr4", 8)
|
239
|
+
self.add(self.cr4)
|
240
|
+
self.cr8 = state.Register("cr8", 8)
|
241
|
+
self.add(self.cr8)
|
242
|
+
|
243
|
+
# *** Debug Registers ***
|
244
|
+
self.dr0 = state.Register("dr0", 8)
|
245
|
+
self.add(self.dr0)
|
246
|
+
self.dr1 = state.Register("dr1", 8)
|
247
|
+
self.add(self.dr1)
|
248
|
+
self.dr2 = state.Register("dr2", 8)
|
249
|
+
self.add(self.dr2)
|
250
|
+
self.dr3 = state.Register("dr3", 8)
|
251
|
+
self.add(self.dr3)
|
252
|
+
self.dr6 = state.Register("dr6", 8)
|
253
|
+
self.add(self.dr6)
|
254
|
+
self.dr7 = state.Register("dr7", 8)
|
255
|
+
self.add(self.dr7)
|
256
|
+
self.dr8 = state.Register("dr8", 8)
|
257
|
+
self.add(self.dr8)
|
258
|
+
self.dr9 = state.Register("dr9", 8)
|
259
|
+
self.add(self.dr9)
|
260
|
+
self.dr10 = state.Register("dr10", 8)
|
261
|
+
self.add(self.dr10)
|
262
|
+
self.dr11 = state.Register("dr11", 8)
|
263
|
+
self.add(self.dr11)
|
264
|
+
self.dr12 = state.Register("dr12", 8)
|
265
|
+
self.add(self.dr12)
|
266
|
+
self.dr13 = state.Register("dr13", 8)
|
267
|
+
self.add(self.dr13)
|
268
|
+
self.dr14 = state.Register("dr14", 8)
|
269
|
+
self.add(self.dr14)
|
270
|
+
self.dr15 = state.Register("dr15", 8)
|
271
|
+
self.add(self.dr15)
|
272
|
+
|
273
|
+
# *** Descriptor Table Registers ***
|
274
|
+
self.gdtr = X86MMRRegister("gdtr", 10)
|
275
|
+
self.add(self.gdtr)
|
276
|
+
self.idtr = X86MMRRegister("idtr", 10)
|
277
|
+
self.add(self.idtr)
|
278
|
+
self.ldtr = X86MMRRegister("ldtr", 10)
|
279
|
+
self.add(self.ldtr)
|
280
|
+
|
281
|
+
# *** Task Register ***
|
282
|
+
self.tr = X86MMRRegister("tr", 2)
|
283
|
+
self.add(self.tr)
|
284
|
+
|
285
|
+
# *** x87 registers ***
|
286
|
+
self.fpr0 = state.Register("fpr0", 10)
|
287
|
+
self.add(self.fpr0)
|
288
|
+
self.fpr1 = state.Register("fpr1", 10)
|
289
|
+
self.add(self.fpr1)
|
290
|
+
self.fpr2 = state.Register("fpr2", 10)
|
291
|
+
self.add(self.fpr2)
|
292
|
+
self.fpr3 = state.Register("fpr3", 10)
|
293
|
+
self.add(self.fpr3)
|
294
|
+
self.fpr4 = state.Register("fpr4", 10)
|
295
|
+
self.add(self.fpr4)
|
296
|
+
self.fpr5 = state.Register("fpr5", 10)
|
297
|
+
self.add(self.fpr5)
|
298
|
+
self.fpr6 = state.Register("fpr6", 10)
|
299
|
+
self.add(self.fpr6)
|
300
|
+
self.fpr7 = state.Register("fpr7", 10)
|
301
|
+
self.add(self.fpr7)
|
302
|
+
|
303
|
+
# x87 Control Register
|
304
|
+
self.fctrl = state.Register("fctrl", 2)
|
305
|
+
self.add(self.fctrl)
|
306
|
+
# x87 Status Register
|
307
|
+
self.fstat = state.Register("fstat", 2)
|
308
|
+
self.add(self.fstat)
|
309
|
+
# x87 Tag Register
|
310
|
+
self.ftag = state.Register("ftag", 2)
|
311
|
+
self.add(self.ftag)
|
312
|
+
# x87 Last Instruction Register
|
313
|
+
self.fip = state.Register("fip", 8)
|
314
|
+
self.add(self.fip)
|
315
|
+
# x87 Last Operand Pointer
|
316
|
+
self.fdp = state.Register("fdp", 8)
|
317
|
+
self.add(self.fdp)
|
318
|
+
# x87 Last Opcode
|
319
|
+
self.fop = state.Register("fop", 2)
|
320
|
+
self.add(self.fop)
|
321
|
+
|
322
|
+
# NOTE: Docs disagree on the format of fip and fdp.
|
323
|
+
# One source describes them as 48-bit offset-plus-segment,
|
324
|
+
# the other describes them as 64-bit.
|
325
|
+
# There may also be separate segment registers.
|
326
|
+
# If you care about the x87 debug info, please feel free to update.
|
327
|
+
|
328
|
+
# *** MMX Registers ***
|
329
|
+
# NOTE: The MMX registers are aliases for the low 8 bytes of the x87 registers.
|
330
|
+
# The two subsystems cannot be used simultaneously.
|
331
|
+
self.mm0 = state.RegisterAlias("mm0", self.fpr0, 8, 0)
|
332
|
+
self.add(self.mm0)
|
333
|
+
self.mm1 = state.RegisterAlias("mm1", self.fpr1, 8, 0)
|
334
|
+
self.add(self.mm1)
|
335
|
+
self.mm2 = state.RegisterAlias("mm2", self.fpr2, 8, 0)
|
336
|
+
self.add(self.mm2)
|
337
|
+
self.mm3 = state.RegisterAlias("mm3", self.fpr3, 8, 0)
|
338
|
+
self.add(self.mm3)
|
339
|
+
self.mm4 = state.RegisterAlias("mm4", self.fpr4, 8, 0)
|
340
|
+
self.add(self.mm4)
|
341
|
+
self.mm5 = state.RegisterAlias("mm5", self.fpr5, 8, 0)
|
342
|
+
self.add(self.mm5)
|
343
|
+
self.mm6 = state.RegisterAlias("mm6", self.fpr6, 8, 0)
|
344
|
+
self.add(self.mm6)
|
345
|
+
self.mm7 = state.RegisterAlias("mm7", self.fpr7, 8, 0)
|
346
|
+
self.add(self.mm7)
|
347
|
+
|
348
|
+
|
349
|
+
class AMD64AVX2(AMD64):
|
350
|
+
"""AMD64 CPU supporting up to AVX2
|
351
|
+
|
352
|
+
This is our default, since all emulators support up to AVX2,
|
353
|
+
and 99.9% of our users won't use the vector extensions.
|
354
|
+
"""
|
355
|
+
|
356
|
+
platform = platforms.Platform(
|
357
|
+
platforms.Architecture.X86_64, platforms.Byteorder.LITTLE
|
358
|
+
)
|
359
|
+
|
360
|
+
def __init__(self):
|
361
|
+
super().__init__()
|
362
|
+
# *** SSE/AVX/AVX2 registers ***
|
363
|
+
self.ymm0 = state.Register("ymm0", 32)
|
364
|
+
self.add(self.ymm0)
|
365
|
+
self.xmm0 = state.RegisterAlias("xmm0", self.ymm0, 16, 0)
|
366
|
+
self.add(self.xmm0)
|
367
|
+
|
368
|
+
self.ymm1 = state.Register("ymm1", 32)
|
369
|
+
self.add(self.ymm1)
|
370
|
+
self.xmm1 = state.RegisterAlias("xmm1", self.ymm1, 16, 0)
|
371
|
+
self.add(self.xmm1)
|
372
|
+
|
373
|
+
self.ymm2 = state.Register("ymm2", 32)
|
374
|
+
self.add(self.ymm2)
|
375
|
+
self.xmm2 = state.RegisterAlias("xmm2", self.ymm2, 16, 0)
|
376
|
+
self.add(self.xmm2)
|
377
|
+
|
378
|
+
self.ymm3 = state.Register("ymm3", 32)
|
379
|
+
self.add(self.ymm3)
|
380
|
+
self.xmm3 = state.RegisterAlias("xmm3", self.ymm3, 16, 0)
|
381
|
+
self.add(self.xmm3)
|
382
|
+
|
383
|
+
self.ymm4 = state.Register("ymm4", 32)
|
384
|
+
self.add(self.ymm4)
|
385
|
+
self.xmm4 = state.RegisterAlias("xmm4", self.ymm4, 16, 0)
|
386
|
+
self.add(self.xmm4)
|
387
|
+
|
388
|
+
self.ymm5 = state.Register("ymm5", 32)
|
389
|
+
self.add(self.ymm5)
|
390
|
+
self.xmm5 = state.RegisterAlias("xmm5", self.ymm5, 16, 0)
|
391
|
+
self.add(self.xmm5)
|
392
|
+
|
393
|
+
self.ymm6 = state.Register("ymm6", 32)
|
394
|
+
self.add(self.ymm6)
|
395
|
+
self.xmm6 = state.RegisterAlias("xmm6", self.ymm6, 16, 0)
|
396
|
+
self.add(self.xmm6)
|
397
|
+
|
398
|
+
self.ymm7 = state.Register("ymm7", 32)
|
399
|
+
self.add(self.ymm7)
|
400
|
+
self.xmm7 = state.RegisterAlias("xmm7", self.ymm7, 16, 0)
|
401
|
+
self.add(self.xmm7)
|
402
|
+
|
403
|
+
self.ymm8 = state.Register("ymm8", 32)
|
404
|
+
self.add(self.ymm8)
|
405
|
+
self.xmm8 = state.RegisterAlias("xmm8", self.ymm8, 16, 0)
|
406
|
+
self.add(self.xmm8)
|
407
|
+
|
408
|
+
self.ymm9 = state.Register("ymm9", 32)
|
409
|
+
self.add(self.ymm9)
|
410
|
+
self.xmm9 = state.RegisterAlias("xmm9", self.ymm9, 16, 0)
|
411
|
+
self.add(self.xmm9)
|
412
|
+
|
413
|
+
self.ymm10 = state.Register("ymm10", 32)
|
414
|
+
self.add(self.ymm10)
|
415
|
+
self.xmm10 = state.RegisterAlias("xmm10", self.ymm10, 16, 0)
|
416
|
+
self.add(self.xmm10)
|
417
|
+
|
418
|
+
self.ymm11 = state.Register("ymm11", 32)
|
419
|
+
self.add(self.ymm11)
|
420
|
+
self.xmm11 = state.RegisterAlias("xmm11", self.ymm11, 16, 0)
|
421
|
+
self.add(self.xmm11)
|
422
|
+
|
423
|
+
self.ymm12 = state.Register("ymm12", 32)
|
424
|
+
self.add(self.ymm12)
|
425
|
+
self.xmm12 = state.RegisterAlias("xmm12", self.ymm12, 16, 0)
|
426
|
+
self.add(self.xmm12)
|
427
|
+
|
428
|
+
self.ymm13 = state.Register("ymm13", 32)
|
429
|
+
self.add(self.ymm13)
|
430
|
+
self.xmm13 = state.RegisterAlias("xmm13", self.ymm13, 16, 0)
|
431
|
+
self.add(self.xmm13)
|
432
|
+
|
433
|
+
self.ymm14 = state.Register("ymm14", 32)
|
434
|
+
self.add(self.ymm14)
|
435
|
+
self.xmm14 = state.RegisterAlias("xmm14", self.ymm14, 16, 0)
|
436
|
+
self.add(self.xmm14)
|
437
|
+
|
438
|
+
self.ymm15 = state.Register("ymm15", 32)
|
439
|
+
self.add(self.ymm15)
|
440
|
+
self.xmm15 = state.RegisterAlias("xmm15", self.ymm15, 16, 0)
|
441
|
+
self.add(self.xmm15)
|
442
|
+
|
443
|
+
|
444
|
+
class AMD64AVX512(AMD64):
|
445
|
+
"""AMD64 CPU supporting up to AVX512"""
|
446
|
+
|
447
|
+
platform = platforms.Platform(
|
448
|
+
platforms.Architecture.X86_64_AVX512, platforms.Byteorder.LITTLE
|
449
|
+
)
|
450
|
+
|
451
|
+
def __init__(self):
|
452
|
+
super().__init__()
|
453
|
+
# *** SSE/AVX/AVX2/AVX512 registers ***
|
454
|
+
self.zmm0 = state.Register("zmm0", 64)
|
455
|
+
self.add(self.zmm0)
|
456
|
+
self.ymm0 = state.RegisterAlias("ymm0", self.zmm0, 32, 0)
|
457
|
+
self.add(self.ymm0)
|
458
|
+
self.xmm0 = state.RegisterAlias("xmm0", self.zmm0, 16, 0)
|
459
|
+
self.add(self.xmm0)
|
460
|
+
|
461
|
+
self.zmm1 = state.Register("zmm1", 64)
|
462
|
+
self.add(self.zmm1)
|
463
|
+
self.ymm1 = state.RegisterAlias("ymm1", self.zmm1, 32, 0)
|
464
|
+
self.add(self.ymm1)
|
465
|
+
self.xmm1 = state.RegisterAlias("xmm1", self.zmm1, 16, 0)
|
466
|
+
self.add(self.xmm1)
|
467
|
+
|
468
|
+
self.zmm2 = state.Register("zmm2", 64)
|
469
|
+
self.add(self.zmm2)
|
470
|
+
self.ymm2 = state.RegisterAlias("ymm2", self.zmm2, 32, 0)
|
471
|
+
self.add(self.ymm2)
|
472
|
+
self.xmm2 = state.RegisterAlias("xmm2", self.zmm2, 16, 0)
|
473
|
+
self.add(self.xmm2)
|
474
|
+
|
475
|
+
self.zmm3 = state.Register("zmm3", 64)
|
476
|
+
self.add(self.zmm3)
|
477
|
+
self.ymm3 = state.RegisterAlias("ymm3", self.zmm3, 32, 0)
|
478
|
+
self.add(self.ymm3)
|
479
|
+
self.xmm3 = state.RegisterAlias("xmm3", self.zmm3, 16, 0)
|
480
|
+
self.add(self.xmm3)
|
481
|
+
|
482
|
+
self.zmm4 = state.Register("zmm4", 64)
|
483
|
+
self.add(self.zmm4)
|
484
|
+
self.ymm4 = state.RegisterAlias("ymm4", self.zmm4, 32, 0)
|
485
|
+
self.add(self.ymm4)
|
486
|
+
self.xmm4 = state.RegisterAlias("xmm4", self.zmm4, 16, 0)
|
487
|
+
self.add(self.xmm4)
|
488
|
+
|
489
|
+
self.zmm5 = state.Register("zmm5", 64)
|
490
|
+
self.add(self.zmm5)
|
491
|
+
self.ymm5 = state.RegisterAlias("ymm5", self.zmm5, 32, 0)
|
492
|
+
self.add(self.ymm5)
|
493
|
+
self.xmm5 = state.RegisterAlias("xmm5", self.zmm5, 16, 0)
|
494
|
+
self.add(self.xmm5)
|
495
|
+
|
496
|
+
self.zmm6 = state.Register("zmm6", 64)
|
497
|
+
self.add(self.zmm6)
|
498
|
+
self.ymm6 = state.RegisterAlias("ymm6", self.zmm6, 32, 0)
|
499
|
+
self.add(self.ymm6)
|
500
|
+
self.xmm6 = state.RegisterAlias("xmm6", self.zmm6, 16, 0)
|
501
|
+
self.add(self.xmm6)
|
502
|
+
|
503
|
+
self.zmm7 = state.Register("zmm7", 64)
|
504
|
+
self.add(self.zmm7)
|
505
|
+
self.ymm7 = state.RegisterAlias("ymm7", self.zmm7, 32, 0)
|
506
|
+
self.add(self.ymm7)
|
507
|
+
self.xmm7 = state.RegisterAlias("xmm7", self.zmm7, 16, 0)
|
508
|
+
self.add(self.xmm7)
|
509
|
+
|
510
|
+
self.zmm8 = state.Register("zmm8", 64)
|
511
|
+
self.add(self.zmm8)
|
512
|
+
self.ymm8 = state.RegisterAlias("ymm8", self.zmm8, 32, 0)
|
513
|
+
self.add(self.ymm8)
|
514
|
+
self.xmm8 = state.RegisterAlias("xmm8", self.zmm8, 16, 0)
|
515
|
+
self.add(self.xmm8)
|
516
|
+
|
517
|
+
self.zmm9 = state.Register("zmm9", 64)
|
518
|
+
self.add(self.zmm9)
|
519
|
+
self.ymm9 = state.RegisterAlias("ymm9", self.zmm9, 32, 0)
|
520
|
+
self.add(self.ymm9)
|
521
|
+
self.xmm9 = state.RegisterAlias("xmm9", self.zmm9, 16, 0)
|
522
|
+
self.add(self.xmm9)
|
523
|
+
|
524
|
+
self.zmm10 = state.Register("zmm10", 64)
|
525
|
+
self.add(self.zmm10)
|
526
|
+
self.ymm10 = state.RegisterAlias("ymm10", self.zmm10, 32, 0)
|
527
|
+
self.add(self.ymm10)
|
528
|
+
self.xmm10 = state.RegisterAlias("xmm10", self.zmm10, 16, 0)
|
529
|
+
self.add(self.xmm10)
|
530
|
+
|
531
|
+
self.zmm11 = state.Register("zmm11", 64)
|
532
|
+
self.add(self.zmm11)
|
533
|
+
self.ymm11 = state.RegisterAlias("ymm11", self.zmm11, 32, 0)
|
534
|
+
self.add(self.ymm11)
|
535
|
+
self.xmm11 = state.RegisterAlias("xmm11", self.zmm11, 16, 0)
|
536
|
+
self.add(self.xmm11)
|
537
|
+
|
538
|
+
self.zmm12 = state.Register("zmm12", 64)
|
539
|
+
self.add(self.zmm12)
|
540
|
+
self.ymm12 = state.RegisterAlias("ymm12", self.zmm12, 32, 0)
|
541
|
+
self.add(self.ymm12)
|
542
|
+
self.xmm12 = state.RegisterAlias("xmm12", self.zmm12, 16, 0)
|
543
|
+
self.add(self.xmm12)
|
544
|
+
|
545
|
+
self.zmm13 = state.Register("zmm13", 64)
|
546
|
+
self.add(self.zmm13)
|
547
|
+
self.ymm13 = state.RegisterAlias("ymm13", self.zmm13, 32, 0)
|
548
|
+
self.add(self.ymm13)
|
549
|
+
self.xmm13 = state.RegisterAlias("xmm13", self.zmm13, 16, 0)
|
550
|
+
self.add(self.xmm13)
|
551
|
+
|
552
|
+
self.zmm14 = state.Register("zmm14", 64)
|
553
|
+
self.add(self.zmm14)
|
554
|
+
self.ymm14 = state.RegisterAlias("ymm14", self.zmm14, 32, 0)
|
555
|
+
self.add(self.ymm14)
|
556
|
+
self.xmm14 = state.RegisterAlias("xmm14", self.zmm14, 16, 0)
|
557
|
+
self.add(self.xmm14)
|
558
|
+
|
559
|
+
self.zmm15 = state.Register("zmm15", 64)
|
560
|
+
self.add(self.zmm15)
|
561
|
+
self.ymm15 = state.RegisterAlias("ymm15", self.zmm15, 32, 0)
|
562
|
+
self.add(self.ymm15)
|
563
|
+
self.xmm15 = state.RegisterAlias("xmm15", self.zmm15, 16, 0)
|
564
|
+
self.add(self.xmm15)
|
565
|
+
|
566
|
+
self.zmm16 = state.Register("zmm16", 64)
|
567
|
+
self.add(self.zmm16)
|
568
|
+
self.ymm16 = state.RegisterAlias("ymm16", self.zmm16, 32, 0)
|
569
|
+
self.add(self.ymm16)
|
570
|
+
self.xmm16 = state.RegisterAlias("xmm16", self.zmm16, 16, 0)
|
571
|
+
self.add(self.xmm16)
|
572
|
+
|
573
|
+
self.zmm17 = state.Register("zmm17", 64)
|
574
|
+
self.add(self.zmm17)
|
575
|
+
self.ymm17 = state.RegisterAlias("ymm17", self.zmm17, 32, 0)
|
576
|
+
self.add(self.ymm17)
|
577
|
+
self.xmm17 = state.RegisterAlias("xmm17", self.zmm17, 16, 0)
|
578
|
+
self.add(self.xmm17)
|
579
|
+
|
580
|
+
self.zmm18 = state.Register("zmm18", 64)
|
581
|
+
self.add(self.zmm18)
|
582
|
+
self.ymm18 = state.RegisterAlias("ymm18", self.zmm18, 32, 0)
|
583
|
+
self.add(self.ymm18)
|
584
|
+
self.xmm18 = state.RegisterAlias("xmm18", self.zmm18, 16, 0)
|
585
|
+
self.add(self.xmm18)
|
586
|
+
|
587
|
+
self.zmm19 = state.Register("zmm19", 64)
|
588
|
+
self.add(self.zmm19)
|
589
|
+
self.ymm19 = state.RegisterAlias("ymm19", self.zmm19, 32, 0)
|
590
|
+
self.add(self.ymm19)
|
591
|
+
self.xmm19 = state.RegisterAlias("xmm19", self.zmm19, 16, 0)
|
592
|
+
self.add(self.xmm19)
|
593
|
+
|
594
|
+
self.zmm20 = state.Register("zmm20", 64)
|
595
|
+
self.add(self.zmm20)
|
596
|
+
self.ymm20 = state.RegisterAlias("ymm20", self.zmm20, 32, 0)
|
597
|
+
self.add(self.ymm20)
|
598
|
+
self.xmm20 = state.RegisterAlias("xmm20", self.zmm20, 16, 0)
|
599
|
+
self.add(self.xmm20)
|
600
|
+
|
601
|
+
self.zmm21 = state.Register("zmm21", 64)
|
602
|
+
self.add(self.zmm21)
|
603
|
+
self.ymm21 = state.RegisterAlias("ymm21", self.zmm21, 32, 0)
|
604
|
+
self.add(self.ymm21)
|
605
|
+
self.xmm21 = state.RegisterAlias("xmm21", self.zmm21, 16, 0)
|
606
|
+
self.add(self.xmm21)
|
607
|
+
|
608
|
+
self.zmm22 = state.Register("zmm22", 64)
|
609
|
+
self.add(self.zmm22)
|
610
|
+
self.ymm22 = state.RegisterAlias("ymm22", self.zmm22, 32, 0)
|
611
|
+
self.add(self.ymm22)
|
612
|
+
self.xmm22 = state.RegisterAlias("xmm22", self.zmm22, 16, 0)
|
613
|
+
self.add(self.xmm22)
|
614
|
+
|
615
|
+
self.zmm23 = state.Register("zmm23", 64)
|
616
|
+
self.add(self.zmm23)
|
617
|
+
self.ymm23 = state.RegisterAlias("ymm23", self.zmm23, 32, 0)
|
618
|
+
self.add(self.ymm23)
|
619
|
+
self.xmm23 = state.RegisterAlias("xmm23", self.zmm23, 16, 0)
|
620
|
+
self.add(self.xmm23)
|
621
|
+
|
622
|
+
self.zmm24 = state.Register("zmm24", 64)
|
623
|
+
self.add(self.zmm24)
|
624
|
+
self.ymm24 = state.RegisterAlias("ymm24", self.zmm24, 32, 0)
|
625
|
+
self.add(self.ymm24)
|
626
|
+
self.xmm24 = state.RegisterAlias("xmm24", self.zmm24, 16, 0)
|
627
|
+
self.add(self.xmm24)
|
628
|
+
|
629
|
+
self.zmm25 = state.Register("zmm25", 64)
|
630
|
+
self.add(self.zmm25)
|
631
|
+
self.ymm25 = state.RegisterAlias("ymm25", self.zmm25, 32, 0)
|
632
|
+
self.add(self.ymm25)
|
633
|
+
self.xmm25 = state.RegisterAlias("xmm25", self.zmm25, 16, 0)
|
634
|
+
self.add(self.xmm25)
|
635
|
+
|
636
|
+
self.zmm26 = state.Register("zmm26", 64)
|
637
|
+
self.add(self.zmm26)
|
638
|
+
self.ymm26 = state.RegisterAlias("ymm26", self.zmm26, 32, 0)
|
639
|
+
self.add(self.ymm26)
|
640
|
+
self.xmm26 = state.RegisterAlias("xmm26", self.zmm26, 16, 0)
|
641
|
+
self.add(self.xmm26)
|
642
|
+
|
643
|
+
self.zmm27 = state.Register("zmm27", 64)
|
644
|
+
self.add(self.zmm27)
|
645
|
+
self.ymm27 = state.RegisterAlias("ymm27", self.zmm27, 32, 0)
|
646
|
+
self.add(self.ymm27)
|
647
|
+
self.xmm27 = state.RegisterAlias("xmm27", self.zmm27, 16, 0)
|
648
|
+
self.add(self.xmm27)
|
649
|
+
|
650
|
+
self.zmm28 = state.Register("zmm28", 64)
|
651
|
+
self.add(self.zmm28)
|
652
|
+
self.ymm28 = state.RegisterAlias("ymm28", self.zmm28, 32, 0)
|
653
|
+
self.add(self.ymm28)
|
654
|
+
self.xmm28 = state.RegisterAlias("xmm28", self.zmm28, 16, 0)
|
655
|
+
self.add(self.xmm28)
|
656
|
+
|
657
|
+
self.zmm29 = state.Register("zmm29", 64)
|
658
|
+
self.add(self.zmm29)
|
659
|
+
self.ymm29 = state.RegisterAlias("ymm29", self.zmm29, 32, 0)
|
660
|
+
self.add(self.ymm29)
|
661
|
+
self.xmm29 = state.RegisterAlias("xmm29", self.zmm29, 16, 0)
|
662
|
+
self.add(self.xmm29)
|
663
|
+
|
664
|
+
self.zmm30 = state.Register("zmm30", 64)
|
665
|
+
self.add(self.zmm30)
|
666
|
+
self.ymm30 = state.RegisterAlias("ymm30", self.zmm30, 32, 0)
|
667
|
+
self.add(self.ymm30)
|
668
|
+
self.xmm30 = state.RegisterAlias("xmm30", self.zmm30, 16, 0)
|
669
|
+
self.add(self.xmm30)
|
670
|
+
|
671
|
+
self.zmm31 = state.Register("zmm31", 64)
|
672
|
+
self.add(self.zmm31)
|
673
|
+
self.ymm31 = state.RegisterAlias("ymm31", self.zmm31, 32, 0)
|
674
|
+
self.add(self.ymm31)
|
675
|
+
self.xmm31 = state.RegisterAlias("xmm31", self.zmm31, 16, 0)
|
676
|
+
self.add(self.xmm31)
|