Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(209)

Side by Side Diff: unittest/AssemblerX8664/LowLevel.cpp

Issue 1224173006: Adds the x86-64 assembler. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addresses comments; make format Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « unittest/AssemblerX8664/Locked.cpp ('k') | unittest/AssemblerX8664/Other.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 //===- subzero/unittest/AssemblerX8664/LowLevel.cpp -----------------------===//
2 //
3 // The Subzero Code Generator
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 #include "AssemblerX8664/TestUtil.h"
10
11 namespace Ice {
12 namespace X8664 {
13 namespace Test {
14 namespace {
15
16 TEST_F(AssemblerX8664LowLevelTest, Ret) {
17 __ ret();
18
19 constexpr size_t ByteCount = 1;
20 ASSERT_EQ(ByteCount, codeBytesSize());
21
22 verifyBytes<ByteCount>(codeBytes(), 0xc3);
23 }
24
25 TEST_F(AssemblerX8664LowLevelTest, RetImm) {
26 __ ret(Immediate(0x20));
27
28 constexpr size_t ByteCount = 3;
29 ASSERT_EQ(ByteCount, codeBytesSize());
30
31 verifyBytes<ByteCount>(codeBytes(), 0xC2, 0x20, 0x00);
32 }
33
34 TEST_F(AssemblerX8664LowLevelTest, CallImm4) {
35 __ call(Immediate(4));
36
37 constexpr size_t ByteCount = 5;
38 ASSERT_EQ(ByteCount, codeBytesSize());
39
40 verifyBytes<ByteCount>(codeBytes(), 0xe8, 0x00, 0x00, 0x00, 0x00);
41 }
42
43 TEST_F(AssemblerX8664LowLevelTest, PopRegs) {
44 __ popl(Encoded_GPR_eax());
45 __ popl(Encoded_GPR_ebx());
46 __ popl(Encoded_GPR_ecx());
47 __ popl(Encoded_GPR_edx());
48 __ popl(Encoded_GPR_edi());
49 __ popl(Encoded_GPR_esi());
50 __ popl(Encoded_GPR_ebp());
51 __ popl(Encoded_GPR_r8());
52 __ popl(Encoded_GPR_r9());
53 __ popl(Encoded_GPR_r10());
54 __ popl(Encoded_GPR_r11());
55 __ popl(Encoded_GPR_r12());
56 __ popl(Encoded_GPR_r13());
57 __ popl(Encoded_GPR_r14());
58 __ popl(Encoded_GPR_r15());
59
60 constexpr size_t ByteCount = 23;
61 ASSERT_EQ(ByteCount, codeBytesSize());
62
63 constexpr uint8_t Rex_B = 0x41;
64 constexpr uint8_t PopOpcode = 0x58;
65 verifyBytes<ByteCount>(
66 codeBytes(), PopOpcode | Encoded_GPR_eax(), PopOpcode | Encoded_GPR_ebx(),
67 PopOpcode | Encoded_GPR_ecx(), PopOpcode | Encoded_GPR_edx(),
68 PopOpcode | Encoded_GPR_edi(), PopOpcode | Encoded_GPR_esi(),
69 PopOpcode | Encoded_GPR_ebp(), Rex_B, PopOpcode | (Encoded_GPR_r8() & 7),
70 Rex_B, PopOpcode | (Encoded_GPR_r9() & 7), Rex_B,
71 PopOpcode | (Encoded_GPR_r10() & 7), Rex_B,
72 PopOpcode | (Encoded_GPR_r11() & 7), Rex_B,
73 PopOpcode | (Encoded_GPR_r12() & 7), Rex_B,
74 PopOpcode | (Encoded_GPR_r13() & 7), Rex_B,
75 PopOpcode | (Encoded_GPR_r14() & 7), Rex_B,
76 PopOpcode | (Encoded_GPR_r15() & 7));
77 }
78
79 TEST_F(AssemblerX8664LowLevelTest, PushRegs) {
80 __ pushl(Encoded_GPR_eax());
81 __ pushl(Encoded_GPR_ebx());
82 __ pushl(Encoded_GPR_ecx());
83 __ pushl(Encoded_GPR_edx());
84 __ pushl(Encoded_GPR_edi());
85 __ pushl(Encoded_GPR_esi());
86 __ pushl(Encoded_GPR_ebp());
87 __ pushl(Encoded_GPR_r8());
88 __ pushl(Encoded_GPR_r9());
89 __ pushl(Encoded_GPR_r10());
90 __ pushl(Encoded_GPR_r11());
91 __ pushl(Encoded_GPR_r12());
92 __ pushl(Encoded_GPR_r13());
93 __ pushl(Encoded_GPR_r14());
94 __ pushl(Encoded_GPR_r15());
95
96 constexpr size_t ByteCount = 23;
97 ASSERT_EQ(ByteCount, codeBytesSize());
98
99 constexpr uint8_t Rex_B = 0x41;
100 constexpr uint8_t PushOpcode = 0x50;
101 verifyBytes<ByteCount>(
102 codeBytes(), PushOpcode | Encoded_GPR_eax(),
103 PushOpcode | Encoded_GPR_ebx(), PushOpcode | Encoded_GPR_ecx(),
104 PushOpcode | Encoded_GPR_edx(), PushOpcode | Encoded_GPR_edi(),
105 PushOpcode | Encoded_GPR_esi(), PushOpcode | Encoded_GPR_ebp(), Rex_B,
106 PushOpcode | (Encoded_GPR_r8() & 7), Rex_B,
107 PushOpcode | (Encoded_GPR_r9() & 7), Rex_B,
108 PushOpcode | (Encoded_GPR_r10() & 7), Rex_B,
109 PushOpcode | (Encoded_GPR_r11() & 7), Rex_B,
110 PushOpcode | (Encoded_GPR_r12() & 7), Rex_B,
111 PushOpcode | (Encoded_GPR_r13() & 7), Rex_B,
112 PushOpcode | (Encoded_GPR_r14() & 7), Rex_B,
113 PushOpcode | (Encoded_GPR_r15() & 7));
114 }
115
116 TEST_F(AssemblerX8664LowLevelTest, MovRegisterZero) {
117 __ mov(IceType_i32, Encoded_GPR_eax(), Immediate(0x00));
118 __ mov(IceType_i32, Encoded_GPR_ebx(), Immediate(0x00));
119 __ mov(IceType_i32, Encoded_GPR_ecx(), Immediate(0x00));
120 __ mov(IceType_i32, Encoded_GPR_edx(), Immediate(0x00));
121 __ mov(IceType_i32, Encoded_GPR_edi(), Immediate(0x00));
122 __ mov(IceType_i32, Encoded_GPR_esi(), Immediate(0x00));
123 __ mov(IceType_i32, Encoded_GPR_ebp(), Immediate(0x00));
124 __ mov(IceType_i32, Encoded_GPR_r8(), Immediate(0x00));
125 __ mov(IceType_i32, Encoded_GPR_r10(), Immediate(0x00));
126 __ mov(IceType_i32, Encoded_GPR_r11(), Immediate(0x00));
127 __ mov(IceType_i32, Encoded_GPR_r12(), Immediate(0x00));
128 __ mov(IceType_i32, Encoded_GPR_r13(), Immediate(0x00));
129 __ mov(IceType_i32, Encoded_GPR_r14(), Immediate(0x00));
130 __ mov(IceType_i32, Encoded_GPR_r15(), Immediate(0x00));
131
132 constexpr uint8_t Rex_B = 0x41;
133 constexpr size_t MovReg32BitImmBytes = 5;
134 constexpr size_t ByteCount = 14 * MovReg32BitImmBytes + 7 /*Rex_B*/;
135
136 ASSERT_EQ(ByteCount, codeBytesSize());
137
138 constexpr uint8_t MovOpcode = 0xb8;
139 verifyBytes<ByteCount>(
140 codeBytes(), MovOpcode | Encoded_GPR_eax(), 0x00, 0x00, 0x00, 0x00,
141 MovOpcode | Encoded_GPR_ebx(), 0x00, 0x00, 0x00, 0x00,
142 MovOpcode | Encoded_GPR_ecx(), 0x00, 0x00, 0x00, 0x00,
143 MovOpcode | Encoded_GPR_edx(), 0x00, 0x00, 0x00, 0x00,
144 MovOpcode | Encoded_GPR_edi(), 0x00, 0x00, 0x00, 0x00,
145 MovOpcode | Encoded_GPR_esi(), 0x00, 0x00, 0x00, 0x00,
146 MovOpcode | Encoded_GPR_ebp(), 0x00, 0x00, 0x00, 0x00, Rex_B,
147 MovOpcode | (Encoded_GPR_r8() & 7), 0x00, 0x00, 0x00, 0x00, Rex_B,
148 MovOpcode | (Encoded_GPR_r10() & 7), 0x00, 0x00, 0x00, 0x00, Rex_B,
149 MovOpcode | (Encoded_GPR_r11() & 7), 0x00, 0x00, 0x00, 0x00, Rex_B,
150 MovOpcode | (Encoded_GPR_r12() & 7), 0x00, 0x00, 0x00, 0x00, Rex_B,
151 MovOpcode | (Encoded_GPR_r13() & 7), 0x00, 0x00, 0x00, 0x00, Rex_B,
152 MovOpcode | (Encoded_GPR_r14() & 7), 0x00, 0x00, 0x00, 0x00, Rex_B,
153 MovOpcode | (Encoded_GPR_r15() & 7), 0x00, 0x00, 0x00, 0x00);
154 }
155
156 TEST_F(AssemblerX8664LowLevelTest, Cmp) {
157 #define TestRegReg(Inst, Dst, Src, OpType, ByteCountUntyped, ...) \
158 do { \
159 static constexpr char TestString[] = \
160 "(" #Inst ", " #Dst ", " #Src ", " #OpType ", " #ByteCountUntyped \
161 ", " #__VA_ARGS__ ")"; \
162 static constexpr uint8_t ByteCount = ByteCountUntyped; \
163 __ Inst(IceType_##OpType, Encoded_GPR_##Dst(), Encoded_GPR_##Src()); \
164 ASSERT_EQ(ByteCount, codeBytesSize()) << TestString; \
165 ASSERT_TRUE(verifyBytes<ByteCount>(codeBytes(), __VA_ARGS__)) \
166 << TestString; \
167 reset(); \
168 } while (0)
169
170 #define TestRegImm(Inst, Dst, Imm, OpType, ByteCountUntyped, ...) \
171 do { \
172 static constexpr char TestString[] = \
173 "(" #Inst ", " #Dst ", " #Imm ", " #OpType ", " #ByteCountUntyped \
174 ", " #__VA_ARGS__ ")"; \
175 static constexpr uint8_t ByteCount = ByteCountUntyped; \
176 __ Inst(IceType_##OpType, Encoded_GPR_##Dst(), Immediate(Imm)); \
177 ASSERT_EQ(ByteCount, codeBytesSize()) << TestString; \
178 ASSERT_TRUE(verifyBytes<ByteCount>(codeBytes(), __VA_ARGS__)) \
179 << TestString; \
180 reset(); \
181 } while (0)
182
183 #define TestRegAbsoluteAddr(Inst, Dst, Disp, OpType, ByteCountUntyped, ...) \
184 do { \
185 static constexpr char TestString[] = \
186 "(" #Inst ", " #Dst ", " #Disp ", " #OpType ", " #ByteCountUntyped \
187 ", " #__VA_ARGS__ ")"; \
188 static constexpr uint8_t ByteCount = ByteCountUntyped; \
189 __ Inst(IceType_##OpType, Encoded_GPR_##Dst(), \
190 Address(Address::ABSOLUTE, Disp)); \
191 ASSERT_EQ(ByteCount, codeBytesSize()) << TestString; \
192 ASSERT_TRUE(verifyBytes<ByteCount>(codeBytes(), __VA_ARGS__)) \
193 << TestString; \
194 reset(); \
195 } while (0)
196
197 #define TestRegAddrBase(Inst, Dst, Base, Disp, OpType, ByteCountUntyped, ...) \
198 do { \
199 static constexpr char TestString[] = \
200 "(" #Inst ", " #Dst ", " #Base ", " #Disp ", " #OpType \
201 ", " #ByteCountUntyped ", " #__VA_ARGS__ ")"; \
202 static constexpr uint8_t ByteCount = ByteCountUntyped; \
203 __ Inst(IceType_##OpType, Encoded_GPR_##Dst(), \
204 Address(Encoded_GPR_##Base(), Disp)); \
205 ASSERT_EQ(ByteCount, codeBytesSize()) << TestString; \
206 ASSERT_TRUE(verifyBytes<ByteCount>(codeBytes(), __VA_ARGS__)) \
207 << TestString; \
208 reset(); \
209 } while (0)
210
211 #define TestRegAddrScaledIndex(Inst, Dst, Index, Scale, Disp, OpType, \
212 ByteCountUntyped, ...) \
213 do { \
214 static constexpr char TestString[] = \
215 "(" #Inst ", " #Dst ", " #Index ", " #Scale ", " #Disp ", " #OpType \
216 ", " #ByteCountUntyped ", " #__VA_ARGS__ ")"; \
217 static constexpr uint8_t ByteCount = ByteCountUntyped; \
218 __ Inst(IceType_##OpType, Encoded_GPR_##Dst(), \
219 Address(Encoded_GPR_##Index(), Traits::TIMES_##Scale, Disp)); \
220 ASSERT_EQ(ByteCount, codeBytesSize()) << TestString; \
221 ASSERT_TRUE(verifyBytes<ByteCount>(codeBytes(), __VA_ARGS__)) \
222 << TestString; \
223 reset(); \
224 } while (0)
225
226 #define TestRegAddrBaseScaledIndex(Inst, Dst, Base, Index, Scale, Disp, \
227 OpType, ByteCountUntyped, ...) \
228 do { \
229 static constexpr char TestString[] = \
230 "(" #Inst ", " #Dst ", " #Base ", " #Index ", " #Scale ", " #Disp \
231 ", " #OpType ", " #ByteCountUntyped ", " #__VA_ARGS__ ")"; \
232 static constexpr uint8_t ByteCount = ByteCountUntyped; \
233 __ Inst(IceType_##OpType, Encoded_GPR_##Dst(), \
234 Address(Encoded_GPR_##Base(), Encoded_GPR_##Index(), \
235 Traits::TIMES_##Scale, Disp)); \
236 ASSERT_EQ(ByteCount, codeBytesSize()) << TestString; \
237 ASSERT_TRUE(verifyBytes<ByteCount>(codeBytes(), __VA_ARGS__)) \
238 << TestString; \
239 reset(); \
240 } while (0)
241
242 #define TestAddrBaseScaledIndexImm(Inst, Base, Index, Scale, Disp, Imm, \
243 OpType, ByteCountUntyped, ...) \
244 do { \
245 static constexpr char TestString[] = \
246 "(" #Inst ", " #Base ", " #Index ", " #Scale ", " #Disp ", " #Imm \
247 ", " #OpType ", " #ByteCountUntyped ", " #__VA_ARGS__ ")"; \
248 static constexpr uint8_t ByteCount = ByteCountUntyped; \
249 __ Inst(IceType_##OpType, \
250 Address(Encoded_GPR_##Base(), Encoded_GPR_##Index(), \
251 Traits::TIMES_##Scale, Disp), \
252 Immediate(Imm)); \
253 ASSERT_EQ(ByteCount, codeBytesSize()) << TestString; \
254 ASSERT_TRUE(verifyBytes<ByteCount>(codeBytes(), __VA_ARGS__)) \
255 << TestString; \
256 reset(); \
257 } while (0)
258
259 #define TestAddrBaseScaledIndexReg(Inst, Base, Index, Scale, Disp, Src, \
260 OpType, ByteCountUntyped, ...) \
261 do { \
262 static constexpr char TestString[] = \
263 "(" #Inst ", " #Base ", " #Index ", " #Scale ", " #Disp ", " #Src \
264 ", " #OpType ", " #ByteCountUntyped ", " #__VA_ARGS__ ")"; \
265 static constexpr uint8_t ByteCount = ByteCountUntyped; \
266 __ Inst(IceType_##OpType, \
267 Address(Encoded_GPR_##Base(), Encoded_GPR_##Index(), \
268 Traits::TIMES_##Scale, Disp), \
269 Encoded_GPR_##Src()); \
270 ASSERT_EQ(ByteCount, codeBytesSize()) << TestString; \
271 ASSERT_TRUE(verifyBytes<ByteCount>(codeBytes(), __VA_ARGS__)) \
272 << TestString; \
273 reset(); \
274 } while (0)
275
276 /* cmp GPR, GPR */
277 TestRegReg(cmp, eax, ecx, i32, 2, 0x3B, 0xC1);
278 TestRegReg(cmp, ecx, edx, i32, 2, 0x3B, 0xCA);
279 TestRegReg(cmp, edx, ebx, i32, 2, 0x3B, 0xD3);
280 TestRegReg(cmp, ebx, esp, i32, 2, 0x3B, 0xDC);
281 TestRegReg(cmp, esp, ebp, i32, 2, 0x3B, 0xE5);
282 TestRegReg(cmp, ebp, esi, i32, 2, 0x3B, 0xEE);
283 TestRegReg(cmp, esi, edi, i32, 2, 0x3B, 0xF7);
284 TestRegReg(cmp, edi, r8, i32, 3, 0x41, 0x3B, 0xF8);
285 TestRegReg(cmp, r8, r9, i32, 3, 0x45, 0x3B, 0xC1);
286 TestRegReg(cmp, r9, r10, i32, 3, 0x45, 0x3B, 0xCA);
287 TestRegReg(cmp, r10, r11, i32, 3, 0x45, 0x3B, 0xD3);
288 TestRegReg(cmp, r11, r12, i32, 3, 0x45, 0x3B, 0xDC);
289 TestRegReg(cmp, r12, r13, i32, 3, 0x45, 0x3B, 0xE5);
290 TestRegReg(cmp, r13, r14, i32, 3, 0x45, 0x3B, 0xEE);
291 TestRegReg(cmp, r14, r15, i32, 3, 0x45, 0x3B, 0xF7);
292 TestRegReg(cmp, r15, eax, i32, 3, 0x44, 0x3B, 0xF8);
293
294 TestRegReg(cmp, eax, ecx, i16, 3, 0x66, 0x3B, 0xC1);
295 TestRegReg(cmp, ecx, edx, i16, 3, 0x66, 0x3B, 0xCA);
296 TestRegReg(cmp, edx, ebx, i16, 3, 0x66, 0x3B, 0xD3);
297 TestRegReg(cmp, ebx, esp, i16, 3, 0x66, 0x3B, 0xDC);
298 TestRegReg(cmp, esp, ebp, i16, 3, 0x66, 0x3B, 0xE5);
299 TestRegReg(cmp, ebp, esi, i16, 3, 0x66, 0x3B, 0xEE);
300 TestRegReg(cmp, esi, edi, i16, 3, 0x66, 0x3B, 0xF7);
301 TestRegReg(cmp, edi, r8, i16, 4, 0x66, 0x41, 0x3B, 0xF8);
302 TestRegReg(cmp, r8, r9, i16, 4, 0x66, 0x45, 0x3B, 0xC1);
303 TestRegReg(cmp, r9, r10, i16, 4, 0x66, 0x45, 0x3B, 0xCA);
304 TestRegReg(cmp, r10, r11, i16, 4, 0x66, 0x45, 0x3B, 0xD3);
305 TestRegReg(cmp, r11, r12, i16, 4, 0x66, 0x45, 0x3B, 0xDC);
306 TestRegReg(cmp, r12, r13, i16, 4, 0x66, 0x45, 0x3B, 0xE5);
307 TestRegReg(cmp, r13, r14, i16, 4, 0x66, 0x45, 0x3B, 0xEE);
308 TestRegReg(cmp, r14, r15, i16, 4, 0x66, 0x45, 0x3B, 0xF7);
309 TestRegReg(cmp, r15, eax, i16, 4, 0x66, 0x44, 0x3B, 0xF8);
310
311 TestRegReg(cmp, eax, ecx, i8, 2, 0x3A, 0xC1);
312 TestRegReg(cmp, ecx, edx, i8, 2, 0x3A, 0xCA);
313 TestRegReg(cmp, edx, ebx, i8, 2, 0x3A, 0xD3);
314 TestRegReg(cmp, ebx, esp, i8, 3, 0x40, 0x3A, 0xDC);
315 TestRegReg(cmp, esp, ebp, i8, 3, 0x40, 0x3A, 0xE5);
316 TestRegReg(cmp, ebp, esi, i8, 3, 0x40, 0x3A, 0xEE);
317 TestRegReg(cmp, esi, edi, i8, 3, 0x40, 0x3A, 0xF7);
318 TestRegReg(cmp, edi, r8, i8, 3, 0x41, 0x3A, 0xF8);
319 TestRegReg(cmp, r8, r9, i8, 3, 0x45, 0x3A, 0xC1);
320 TestRegReg(cmp, r9, r10, i8, 3, 0x45, 0x3A, 0xCA);
321 TestRegReg(cmp, r10, r11, i8, 3, 0x45, 0x3A, 0xD3);
322 TestRegReg(cmp, r11, r12, i8, 3, 0x45, 0x3A, 0xDC);
323 TestRegReg(cmp, r12, r13, i8, 3, 0x45, 0x3A, 0xE5);
324 TestRegReg(cmp, r13, r14, i8, 3, 0x45, 0x3A, 0xEE);
325 TestRegReg(cmp, r14, r15, i8, 3, 0x45, 0x3A, 0xF7);
326 TestRegReg(cmp, r15, eax, i8, 3, 0x44, 0x3A, 0xF8);
327
328 /* cmp GPR, Imm8 */
329 TestRegImm(cmp, eax, 5, i32, 3, 0x83, 0xF8, 0x05);
330 TestRegImm(cmp, ecx, 5, i32, 3, 0x83, 0xF9, 0x05);
331 TestRegImm(cmp, edx, 5, i32, 3, 0x83, 0xFA, 0x05);
332 TestRegImm(cmp, ebx, 5, i32, 3, 0x83, 0xFB, 0x05);
333 TestRegImm(cmp, esp, 5, i32, 3, 0x83, 0xFC, 0x05);
334 TestRegImm(cmp, ebp, 5, i32, 3, 0x83, 0xFD, 0x05);
335 TestRegImm(cmp, esi, 5, i32, 3, 0x83, 0xFE, 0x05);
336 TestRegImm(cmp, edi, 5, i32, 3, 0x83, 0xFF, 0x05);
337 TestRegImm(cmp, r8, 5, i32, 4, 0x41, 0x83, 0xF8, 0x05);
338 TestRegImm(cmp, r9, 5, i32, 4, 0x41, 0x83, 0xF9, 0x05);
339 TestRegImm(cmp, r10, 5, i32, 4, 0x41, 0x83, 0xFA, 0x05);
340 TestRegImm(cmp, r11, 5, i32, 4, 0x41, 0x83, 0xFB, 0x05);
341 TestRegImm(cmp, r12, 5, i32, 4, 0x41, 0x83, 0xFC, 0x05);
342 TestRegImm(cmp, r13, 5, i32, 4, 0x41, 0x83, 0xFD, 0x05);
343 TestRegImm(cmp, r14, 5, i32, 4, 0x41, 0x83, 0xFE, 0x05);
344 TestRegImm(cmp, r15, 5, i32, 4, 0x41, 0x83, 0xFF, 0x05);
345
346 TestRegImm(cmp, eax, 5, i16, 4, 0x66, 0x83, 0xF8, 0x05);
347 TestRegImm(cmp, ecx, 5, i16, 4, 0x66, 0x83, 0xF9, 0x05);
348 TestRegImm(cmp, edx, 5, i16, 4, 0x66, 0x83, 0xFA, 0x05);
349 TestRegImm(cmp, ebx, 5, i16, 4, 0x66, 0x83, 0xFB, 0x05);
350 TestRegImm(cmp, esp, 5, i16, 4, 0x66, 0x83, 0xFC, 0x05);
351 TestRegImm(cmp, ebp, 5, i16, 4, 0x66, 0x83, 0xFD, 0x05);
352 TestRegImm(cmp, esi, 5, i16, 4, 0x66, 0x83, 0xFE, 0x05);
353 TestRegImm(cmp, edi, 5, i16, 4, 0x66, 0x83, 0xFF, 0x05);
354 TestRegImm(cmp, r8, 5, i16, 5, 0x66, 0x41, 0x83, 0xF8, 0x05);
355 TestRegImm(cmp, r9, 5, i16, 5, 0x66, 0x41, 0x83, 0xF9, 0x05);
356 TestRegImm(cmp, r10, 5, i16, 5, 0x66, 0x41, 0x83, 0xFA, 0x05);
357 TestRegImm(cmp, r11, 5, i16, 5, 0x66, 0x41, 0x83, 0xFB, 0x05);
358 TestRegImm(cmp, r12, 5, i16, 5, 0x66, 0x41, 0x83, 0xFC, 0x05);
359 TestRegImm(cmp, r13, 5, i16, 5, 0x66, 0x41, 0x83, 0xFD, 0x05);
360 TestRegImm(cmp, r14, 5, i16, 5, 0x66, 0x41, 0x83, 0xFE, 0x05);
361 TestRegImm(cmp, r15, 5, i16, 5, 0x66, 0x41, 0x83, 0xFF, 0x05);
362
363 TestRegImm(cmp, eax, 5, i8, 2, 0x3C, 0x05);
364 TestRegImm(cmp, ecx, 5, i8, 3, 0x80, 0xF9, 0x05);
365 TestRegImm(cmp, edx, 5, i8, 3, 0x80, 0xFA, 0x05);
366 TestRegImm(cmp, ebx, 5, i8, 3, 0x80, 0xFB, 0x05);
367 TestRegImm(cmp, esp, 5, i8, 4, 0x40, 0x80, 0xFC, 0x05);
368 TestRegImm(cmp, ebp, 5, i8, 4, 0x40, 0x80, 0xFD, 0x05);
369 TestRegImm(cmp, esi, 5, i8, 4, 0x40, 0x80, 0xFE, 0x05);
370 TestRegImm(cmp, edi, 5, i8, 4, 0x40, 0x80, 0xFF, 0x05);
371 TestRegImm(cmp, r8, 5, i8, 4, 0x41, 0x80, 0xF8, 0x05);
372 TestRegImm(cmp, r9, 5, i8, 4, 0x41, 0x80, 0xF9, 0x05);
373 TestRegImm(cmp, r10, 5, i8, 4, 0x41, 0x80, 0xFA, 0x05);
374 TestRegImm(cmp, r11, 5, i8, 4, 0x41, 0x80, 0xFB, 0x05);
375 TestRegImm(cmp, r12, 5, i8, 4, 0x41, 0x80, 0xFC, 0x05);
376 TestRegImm(cmp, r13, 5, i8, 4, 0x41, 0x80, 0xFD, 0x05);
377 TestRegImm(cmp, r14, 5, i8, 4, 0x41, 0x80, 0xFE, 0x05);
378 TestRegImm(cmp, r15, 5, i8, 4, 0x41, 0x80, 0xFF, 0x05);
379
380 /* cmp GPR, Imm16 */
381 TestRegImm(cmp, eax, 0x100, i32, 5, 0x3D, 0x00, 0x01, 0x00, 0x00);
382 TestRegImm(cmp, ecx, 0x100, i32, 6, 0x81, 0xF9, 0x00, 0x01, 0x00, 0x00);
383 TestRegImm(cmp, edx, 0x100, i32, 6, 0x81, 0xFA, 0x00, 0x01, 0x00, 0x00);
384 TestRegImm(cmp, ebx, 0x100, i32, 6, 0x81, 0xFB, 0x00, 0x01, 0x00, 0x00);
385 TestRegImm(cmp, esp, 0x100, i32, 6, 0x81, 0xFC, 0x00, 0x01, 0x00, 0x00);
386 TestRegImm(cmp, ebp, 0x100, i32, 6, 0x81, 0xFD, 0x00, 0x01, 0x00, 0x00);
387 TestRegImm(cmp, esi, 0x100, i32, 6, 0x81, 0xFE, 0x00, 0x01, 0x00, 0x00);
388 TestRegImm(cmp, edi, 0x100, i32, 6, 0x81, 0xFF, 0x00, 0x01, 0x00, 0x00);
389 TestRegImm(cmp, r8, 0x100, i32, 7, 0x41, 0x81, 0xF8, 0x00, 0x01, 0x00, 0x00);
390 TestRegImm(cmp, r9, 0x100, i32, 7, 0x41, 0x81, 0xF9, 0x00, 0x01, 0x00, 0x00);
391 TestRegImm(cmp, r10, 0x100, i32, 7, 0x41, 0x81, 0xFA, 0x00, 0x01, 0x00, 0x00);
392 TestRegImm(cmp, r11, 0x100, i32, 7, 0x41, 0x81, 0xFB, 0x00, 0x01, 0x00, 0x00);
393 TestRegImm(cmp, r12, 0x100, i32, 7, 0x41, 0x81, 0xFC, 0x00, 0x01, 0x00, 0x00);
394 TestRegImm(cmp, r13, 0x100, i32, 7, 0x41, 0x81, 0xFD, 0x00, 0x01, 0x00, 0x00);
395 TestRegImm(cmp, r14, 0x100, i32, 7, 0x41, 0x81, 0xFE, 0x00, 0x01, 0x00, 0x00);
396 TestRegImm(cmp, r15, 0x100, i32, 7, 0x41, 0x81, 0xFF, 0x00, 0x01, 0x00, 0x00);
397
398 TestRegImm(cmp, eax, 0x100, i16, 4, 0x66, 0x3D, 0x00, 0x01);
399 TestRegImm(cmp, ecx, 0x100, i16, 5, 0x66, 0x81, 0xF9, 0x00, 0x01);
400 TestRegImm(cmp, edx, 0x100, i16, 5, 0x66, 0x81, 0xFA, 0x00, 0x01);
401 TestRegImm(cmp, ebx, 0x100, i16, 5, 0x66, 0x81, 0xFB, 0x00, 0x01);
402 TestRegImm(cmp, esp, 0x100, i16, 5, 0x66, 0x81, 0xFC, 0x00, 0x01);
403 TestRegImm(cmp, ebp, 0x100, i16, 5, 0x66, 0x81, 0xFD, 0x00, 0x01);
404 TestRegImm(cmp, esi, 0x100, i16, 5, 0x66, 0x81, 0xFE, 0x00, 0x01);
405 TestRegImm(cmp, edi, 0x100, i16, 5, 0x66, 0x81, 0xFF, 0x00, 0x01);
406 TestRegImm(cmp, r8, 0x100, i16, 6, 0x66, 0x41, 0x81, 0xF8, 0x00, 0x01);
407 TestRegImm(cmp, r9, 0x100, i16, 6, 0x66, 0x41, 0x81, 0xF9, 0x00, 0x01);
408 TestRegImm(cmp, r10, 0x100, i16, 6, 0x66, 0x41, 0x81, 0xFA, 0x00, 0x01);
409 TestRegImm(cmp, r11, 0x100, i16, 6, 0x66, 0x41, 0x81, 0xFB, 0x00, 0x01);
410 TestRegImm(cmp, r12, 0x100, i16, 6, 0x66, 0x41, 0x81, 0xFC, 0x00, 0x01);
411 TestRegImm(cmp, r13, 0x100, i16, 6, 0x66, 0x41, 0x81, 0xFD, 0x00, 0x01);
412 TestRegImm(cmp, r14, 0x100, i16, 6, 0x66, 0x41, 0x81, 0xFE, 0x00, 0x01);
413 TestRegImm(cmp, r15, 0x100, i16, 6, 0x66, 0x41, 0x81, 0xFF, 0x00, 0x01);
414
415 /* cmp GPR, Absolute */
416 TestRegAbsoluteAddr(cmp, eax, 0xF00FBEEF, i32, 6, 0x3B, 0x05, 0xEF, 0xBE,
417 0x0F, 0xF0);
418 TestRegAbsoluteAddr(cmp, eax, 0xF00FBEEF, i16, 7, 0x66, 0x3B, 0x05, 0xEF,
419 0xBE, 0x0F, 0xF0);
420 TestRegAbsoluteAddr(cmp, eax, 0xF00FBEEF, i8, 6, 0x3A, 0x05, 0xEF, 0xBE, 0x0F,
421 0xF0);
422 TestRegAbsoluteAddr(cmp, r8, 0xF00FBEEF, i32, 7, 0x44, 0x3B, 0x05, 0xEF, 0xBE,
423 0x0F, 0xF0);
424 TestRegAbsoluteAddr(cmp, r8, 0xF00FBEEF, i16, 8, 0x66, 0x44, 0x3B, 0x05, 0xEF,
425 0xBE, 0x0F, 0xF0);
426 TestRegAbsoluteAddr(cmp, r8, 0xF00FBEEF, i8, 7, 0x44, 0x3A, 0x05, 0xEF, 0xBE,
427 0x0F, 0xF0);
428
429 /* cmp GPR, 0(Base) */
430 TestRegAddrBase(cmp, eax, ecx, 0, i32, 2, 0x3B, 0x01);
431 TestRegAddrBase(cmp, ecx, edx, 0, i32, 2, 0x3B, 0x0A);
432 TestRegAddrBase(cmp, edx, ebx, 0, i32, 2, 0x3B, 0x13);
433 TestRegAddrBase(cmp, ebx, esp, 0, i32, 3, 0x3B, 0x1C, 0x24);
434 TestRegAddrBase(cmp, esp, ebp, 0, i32, 3, 0x3B, 0x65, 0x00);
435 TestRegAddrBase(cmp, ebp, esi, 0, i32, 2, 0x3B, 0x2E);
436 TestRegAddrBase(cmp, esi, edi, 0, i32, 2, 0x3B, 0x37);
437 TestRegAddrBase(cmp, edi, r8, 0, i32, 3, 0x41, 0x3B, 0x38);
438 TestRegAddrBase(cmp, r8, r9, 0, i32, 3, 0x45, 0x3B, 0x01);
439 TestRegAddrBase(cmp, r9, r10, 0, i32, 3, 0x45, 0x3B, 0x0A);
440 TestRegAddrBase(cmp, r10, r11, 0, i32, 3, 0x45, 0x3B, 0x13);
441 TestRegAddrBase(cmp, r11, r12, 0, i32, 4, 0x45, 0x3B, 0x1C, 0x24);
442 TestRegAddrBase(cmp, r12, r13, 0, i32, 4, 0x45, 0x3B, 0x65, 0x00);
443 TestRegAddrBase(cmp, r13, r14, 0, i32, 3, 0x45, 0x3B, 0x2E);
444 TestRegAddrBase(cmp, r14, r15, 0, i32, 3, 0x45, 0x3B, 0x37);
445 TestRegAddrBase(cmp, r15, eax, 0, i32, 3, 0x44, 0x3B, 0x38);
446
447 TestRegAddrBase(cmp, eax, ecx, 0, i16, 3, 0x66, 0x3B, 0x01);
448 TestRegAddrBase(cmp, ecx, edx, 0, i16, 3, 0x66, 0x3B, 0x0A);
449 TestRegAddrBase(cmp, edx, ebx, 0, i16, 3, 0x66, 0x3B, 0x13);
450 TestRegAddrBase(cmp, ebx, esp, 0, i16, 4, 0x66, 0x3B, 0x1C, 0x24);
451 TestRegAddrBase(cmp, esp, ebp, 0, i16, 4, 0x66, 0x3B, 0x65, 0x00);
452 TestRegAddrBase(cmp, ebp, esi, 0, i16, 3, 0x66, 0x3B, 0x2E);
453 TestRegAddrBase(cmp, esi, edi, 0, i16, 3, 0x66, 0x3B, 0x37);
454 TestRegAddrBase(cmp, edi, r8, 0, i16, 4, 0x66, 0x41, 0x3B, 0x38);
455 TestRegAddrBase(cmp, r8, r9, 0, i16, 4, 0x66, 0x45, 0x3B, 0x01);
456 TestRegAddrBase(cmp, r9, r10, 0, i16, 4, 0x66, 0x45, 0x3B, 0x0A);
457 TestRegAddrBase(cmp, r10, r11, 0, i16, 4, 0x66, 0x45, 0x3B, 0x13);
458 TestRegAddrBase(cmp, r11, r12, 0, i16, 5, 0x66, 0x45, 0x3B, 0x1C, 0x24);
459 TestRegAddrBase(cmp, r12, r13, 0, i16, 5, 0x66, 0x45, 0x3B, 0x65, 0x00);
460 TestRegAddrBase(cmp, r13, r14, 0, i16, 4, 0x66, 0x45, 0x3B, 0x2E);
461 TestRegAddrBase(cmp, r14, r15, 0, i16, 4, 0x66, 0x45, 0x3B, 0x37);
462 TestRegAddrBase(cmp, r15, eax, 0, i16, 4, 0x66, 0x44, 0x3B, 0x38);
463
464 TestRegAddrBase(cmp, eax, ecx, 0, i8, 2, 0x3A, 0x01);
465 TestRegAddrBase(cmp, ecx, edx, 0, i8, 2, 0x3A, 0x0A);
466 TestRegAddrBase(cmp, edx, ebx, 0, i8, 2, 0x3A, 0x13);
467 TestRegAddrBase(cmp, ebx, esp, 0, i8, 3, 0x3A, 0x1C, 0x24);
468 TestRegAddrBase(cmp, esp, ebp, 0, i8, 4, 0x40, 0x3A, 0x65, 0x00);
469 TestRegAddrBase(cmp, ebp, esi, 0, i8, 3, 0x40, 0x3A, 0x2E);
470 TestRegAddrBase(cmp, esi, edi, 0, i8, 3, 0x40, 0x3A, 0x37);
471 TestRegAddrBase(cmp, edi, r8, 0, i8, 3, 0x41, 0x3A, 0x38);
472 TestRegAddrBase(cmp, r8, r9, 0, i8, 3, 0x45, 0x3A, 0x01);
473 TestRegAddrBase(cmp, r9, r10, 0, i8, 3, 0x45, 0x3A, 0x0A);
474 TestRegAddrBase(cmp, r10, r11, 0, i8, 3, 0x45, 0x3A, 0x13);
475 TestRegAddrBase(cmp, r11, r12, 0, i8, 4, 0x45, 0x3A, 0x1C, 0x24);
476 TestRegAddrBase(cmp, r12, r13, 0, i8, 4, 0x45, 0x3A, 0x65, 0x00);
477 TestRegAddrBase(cmp, r13, r14, 0, i8, 3, 0x45, 0x3A, 0x2E);
478 TestRegAddrBase(cmp, r14, r15, 0, i8, 3, 0x45, 0x3A, 0x37);
479 TestRegAddrBase(cmp, r15, eax, 0, i8, 3, 0x44, 0x3A, 0x38);
480
481 /* cmp GPR, Imm8(Base) */
482 TestRegAddrBase(cmp, eax, ecx, 0x40, i32, 3, 0x3B, 0x41, 0x40);
483 TestRegAddrBase(cmp, ecx, edx, 0x40, i32, 3, 0x3B, 0x4A, 0x40);
484 TestRegAddrBase(cmp, edx, ebx, 0x40, i32, 3, 0x3B, 0x53, 0x40);
485 TestRegAddrBase(cmp, ebx, esp, 0x40, i32, 4, 0x3B, 0x5C, 0x24, 0x40);
486 TestRegAddrBase(cmp, esp, ebp, 0x40, i32, 3, 0x3B, 0x65, 0x40);
487 TestRegAddrBase(cmp, ebp, esi, 0x40, i32, 3, 0x3B, 0x6E, 0x40);
488 TestRegAddrBase(cmp, esi, edi, 0x40, i32, 3, 0x3B, 0x77, 0x40);
489 TestRegAddrBase(cmp, edi, r8, 0x40, i32, 4, 0x41, 0x3B, 0x78, 0x40);
490 TestRegAddrBase(cmp, r8, r9, 0x40, i32, 4, 0x45, 0x3B, 0x41, 0x40);
491 TestRegAddrBase(cmp, r9, r10, 0x40, i32, 4, 0x45, 0x3B, 0x4A, 0x40);
492 TestRegAddrBase(cmp, r10, r11, 0x40, i32, 4, 0x45, 0x3B, 0x53, 0x40);
493 TestRegAddrBase(cmp, r11, r12, 0x40, i32, 5, 0x45, 0x3B, 0x5C, 0x24, 0x40);
494 TestRegAddrBase(cmp, r12, r13, 0x40, i32, 4, 0x45, 0x3B, 0x65, 0x40);
495 TestRegAddrBase(cmp, r13, r14, 0x40, i32, 4, 0x45, 0x3B, 0x6E, 0x40);
496 TestRegAddrBase(cmp, r14, r15, 0x40, i32, 4, 0x45, 0x3B, 0x77, 0x40);
497 TestRegAddrBase(cmp, r15, eax, 0x40, i32, 4, 0x44, 0x3B, 0x78, 0x40);
498
499 TestRegAddrBase(cmp, eax, ecx, 0x40, i16, 4, 0x66, 0x3B, 0x41, 0x40);
500 TestRegAddrBase(cmp, ecx, edx, 0x40, i16, 4, 0x66, 0x3B, 0x4A, 0x40);
501 TestRegAddrBase(cmp, edx, ebx, 0x40, i16, 4, 0x66, 0x3B, 0x53, 0x40);
502 TestRegAddrBase(cmp, ebx, esp, 0x40, i16, 5, 0x66, 0x3B, 0x5C, 0x24, 0x40);
503 TestRegAddrBase(cmp, esp, ebp, 0x40, i16, 4, 0x66, 0x3B, 0x65, 0x40);
504 TestRegAddrBase(cmp, ebp, esi, 0x40, i16, 4, 0x66, 0x3B, 0x6E, 0x40);
505 TestRegAddrBase(cmp, esi, edi, 0x40, i16, 4, 0x66, 0x3B, 0x77, 0x40);
506 TestRegAddrBase(cmp, edi, r8, 0x40, i16, 5, 0x66, 0x41, 0x3B, 0x78, 0x40);
507 TestRegAddrBase(cmp, r8, r9, 0x40, i16, 5, 0x66, 0x45, 0x3B, 0x41, 0x40);
508 TestRegAddrBase(cmp, r9, r10, 0x40, i16, 5, 0x66, 0x45, 0x3B, 0x4A, 0x40);
509 TestRegAddrBase(cmp, r10, r11, 0x40, i16, 5, 0x66, 0x45, 0x3B, 0x53, 0x40);
510 TestRegAddrBase(cmp, r11, r12, 0x40, i16, 6, 0x66, 0x45, 0x3B, 0x5C, 0x24,
511 0x40);
512 TestRegAddrBase(cmp, r12, r13, 0x40, i16, 5, 0x66, 0x45, 0x3B, 0x65, 0x40);
513 TestRegAddrBase(cmp, r13, r14, 0x40, i16, 5, 0x66, 0x45, 0x3B, 0x6E, 0x40);
514 TestRegAddrBase(cmp, r14, r15, 0x40, i16, 5, 0x66, 0x45, 0x3B, 0x77, 0x40);
515 TestRegAddrBase(cmp, r15, eax, 0x40, i16, 5, 0x66, 0x44, 0x3B, 0x78, 0x40);
516
517 TestRegAddrBase(cmp, eax, ecx, 0x40, i8, 3, 0x3A, 0x41, 0x40);
518 TestRegAddrBase(cmp, ecx, edx, 0x40, i8, 3, 0x3A, 0x4A, 0x40);
519 TestRegAddrBase(cmp, edx, ebx, 0x40, i8, 3, 0x3A, 0x53, 0x40);
520 TestRegAddrBase(cmp, ebx, esp, 0x40, i8, 4, 0x3A, 0x5C, 0x24, 0x40);
521 TestRegAddrBase(cmp, esp, ebp, 0x40, i8, 4, 0x40, 0x3A, 0x65, 0x40);
522 TestRegAddrBase(cmp, ebp, esi, 0x40, i8, 4, 0x40, 0x3A, 0x6E, 0x40);
523 TestRegAddrBase(cmp, esi, edi, 0x40, i8, 4, 0x40, 0x3A, 0x77, 0x40);
524 TestRegAddrBase(cmp, edi, r8, 0x40, i8, 4, 0x41, 0x3A, 0x78, 0x40);
525 TestRegAddrBase(cmp, r8, r9, 0x40, i8, 4, 0x45, 0x3A, 0x41, 0x40);
526 TestRegAddrBase(cmp, r9, r10, 0x40, i8, 4, 0x45, 0x3A, 0x4A, 0x40);
527 TestRegAddrBase(cmp, r10, r11, 0x40, i8, 4, 0x45, 0x3A, 0x53, 0x40);
528 TestRegAddrBase(cmp, r11, r12, 0x40, i8, 5, 0x45, 0x3A, 0x5C, 0x24, 0x40);
529 TestRegAddrBase(cmp, r12, r13, 0x40, i8, 4, 0x45, 0x3A, 0x65, 0x40);
530 TestRegAddrBase(cmp, r13, r14, 0x40, i8, 4, 0x45, 0x3A, 0x6E, 0x40);
531 TestRegAddrBase(cmp, r14, r15, 0x40, i8, 4, 0x45, 0x3A, 0x77, 0x40);
532 TestRegAddrBase(cmp, r15, eax, 0x40, i8, 4, 0x44, 0x3A, 0x78, 0x40);
533
534 /* cmp GPR, Imm32(Base) */
535 TestRegAddrBase(cmp, eax, ecx, 0xF0, i32, 6, 0x3B, 0x81, 0xF0, 0x00, 0x00,
536 0x00);
537 TestRegAddrBase(cmp, ecx, edx, 0xF0, i32, 6, 0x3B, 0x8A, 0xF0, 0x00, 0x00,
538 0x00);
539 TestRegAddrBase(cmp, edx, ebx, 0xF0, i32, 6, 0x3B, 0x93, 0xF0, 0x00, 0x00,
540 0x00);
541 TestRegAddrBase(cmp, ebx, esp, 0xF0, i32, 7, 0x3B, 0x9C, 0x24, 0xF0, 0x00,
542 0x00, 0x00);
543 TestRegAddrBase(cmp, esp, ebp, 0xF0, i32, 6, 0x3B, 0xA5, 0xF0, 0x00, 0x00,
544 0x00);
545 TestRegAddrBase(cmp, ebp, esi, 0xF0, i32, 6, 0x3B, 0xAE, 0xF0, 0x00, 0x00,
546 0x00);
547 TestRegAddrBase(cmp, esi, edi, 0xF0, i32, 6, 0x3B, 0xB7, 0xF0, 0x00, 0x00,
548 0x00);
549 TestRegAddrBase(cmp, edi, r8, 0xF0, i32, 7, 0x41, 0x3B, 0xB8, 0xF0, 0x00,
550 0x00, 0x00);
551 TestRegAddrBase(cmp, r8, r9, 0xF0, i32, 7, 0x45, 0x3B, 0x81, 0xF0, 0x00, 0x00,
552 0x00);
553 TestRegAddrBase(cmp, r9, r10, 0xF0, i32, 7, 0x45, 0x3B, 0x8A, 0xF0, 0x00,
554 0x00, 0x00);
555 TestRegAddrBase(cmp, r10, r11, 0xF0, i32, 7, 0x45, 0x3B, 0x93, 0xF0, 0x00,
556 0x00, 0x00);
557 TestRegAddrBase(cmp, r11, r12, 0xF0, i32, 8, 0x45, 0x3B, 0x9C, 0x24, 0xF0,
558 0x00, 0x00, 0x00);
559 TestRegAddrBase(cmp, r12, r13, 0xF0, i32, 7, 0x45, 0x3B, 0xA5, 0xF0, 0x00,
560 0x00, 0x00);
561 TestRegAddrBase(cmp, r13, r14, 0xF0, i32, 7, 0x45, 0x3B, 0xAE, 0xF0, 0x00,
562 0x00, 0x00);
563 TestRegAddrBase(cmp, r14, r15, 0xF0, i32, 7, 0x45, 0x3B, 0xB7, 0xF0, 0x00,
564 0x00, 0x00);
565 TestRegAddrBase(cmp, r15, eax, 0xF0, i32, 7, 0x44, 0x3B, 0xB8, 0xF0, 0x00,
566 0x00, 0x00);
567
568 TestRegAddrBase(cmp, eax, ecx, 0xF0, i16, 7, 0x66, 0x3B, 0x81, 0xF0, 0x00,
569 0x00, 0x00);
570 TestRegAddrBase(cmp, ecx, edx, 0xF0, i16, 7, 0x66, 0x3B, 0x8A, 0xF0, 0x00,
571 0x00, 0x00);
572 TestRegAddrBase(cmp, edx, ebx, 0xF0, i16, 7, 0x66, 0x3B, 0x93, 0xF0, 0x00,
573 0x00, 0x00);
574 TestRegAddrBase(cmp, ebx, esp, 0xF0, i16, 8, 0x66, 0x3B, 0x9C, 0x24, 0xF0,
575 0x00, 0x00, 0x00);
576 TestRegAddrBase(cmp, esp, ebp, 0xF0, i16, 7, 0x66, 0x3B, 0xa5, 0xF0, 0x00,
577 0x00, 0x00);
578 TestRegAddrBase(cmp, ebp, esi, 0xF0, i16, 7, 0x66, 0x3B, 0xaE, 0xF0, 0x00,
579 0x00, 0x00);
580 TestRegAddrBase(cmp, esi, edi, 0xF0, i16, 7, 0x66, 0x3B, 0xb7, 0xF0, 0x00,
581 0x00, 0x00);
582 TestRegAddrBase(cmp, edi, r8, 0xF0, i16, 8, 0x66, 0x41, 0x3B, 0xb8, 0xF0,
583 0x00, 0x00, 0x00);
584 TestRegAddrBase(cmp, r8, r9, 0xF0, i16, 8, 0x66, 0x45, 0x3B, 0x81, 0xF0, 0x00,
585 0x00, 0x00);
586 TestRegAddrBase(cmp, r9, r10, 0xF0, i16, 8, 0x66, 0x45, 0x3B, 0x8A, 0xF0,
587 0x00, 0x00, 0x00);
588 TestRegAddrBase(cmp, r10, r11, 0xF0, i16, 8, 0x66, 0x45, 0x3B, 0x93, 0xF0,
589 0x00, 0x00, 0x00);
590 TestRegAddrBase(cmp, r11, r12, 0xF0, i16, 9, 0x66, 0x45, 0x3B, 0x9C, 0x24,
591 0xF0, 0x00, 0x00, 0x00);
592 TestRegAddrBase(cmp, r12, r13, 0xF0, i16, 8, 0x66, 0x45, 0x3B, 0xa5, 0xF0,
593 0x00, 0x00, 0x00);
594 TestRegAddrBase(cmp, r13, r14, 0xF0, i16, 8, 0x66, 0x45, 0x3B, 0xaE, 0xF0,
595 0x00, 0x00, 0x00);
596 TestRegAddrBase(cmp, r14, r15, 0xF0, i16, 8, 0x66, 0x45, 0x3B, 0xb7, 0xF0,
597 0x00, 0x00, 0x00);
598 TestRegAddrBase(cmp, r15, eax, 0xF0, i16, 8, 0x66, 0x44, 0x3B, 0xb8, 0xF0,
599 0x00, 0x00, 0x00);
600
601 TestRegAddrBase(cmp, eax, ecx, 0xF0, i8, 6, 0x3A, 0x81, 0xF0, 0x00, 0x00,
602 0x00);
603 TestRegAddrBase(cmp, ecx, edx, 0xF0, i8, 6, 0x3A, 0x8A, 0xF0, 0x00, 0x00,
604 0x00);
605 TestRegAddrBase(cmp, edx, ebx, 0xF0, i8, 6, 0x3A, 0x93, 0xF0, 0x00, 0x00,
606 0x00);
607 TestRegAddrBase(cmp, ebx, esp, 0xF0, i8, 7, 0x3A, 0x9C, 0x24, 0xF0, 0x00,
608 0x00, 0x00);
609 TestRegAddrBase(cmp, esp, ebp, 0xF0, i8, 7, 0x40, 0x3A, 0xA5, 0xF0, 0x00,
610 0x00, 0x00);
611 TestRegAddrBase(cmp, ebp, esi, 0xF0, i8, 7, 0x40, 0x3A, 0xAE, 0xF0, 0x00,
612 0x00, 0x00);
613 TestRegAddrBase(cmp, esi, edi, 0xF0, i8, 7, 0x40, 0x3A, 0xB7, 0xF0, 0x00,
614 0x00, 0x00);
615 TestRegAddrBase(cmp, edi, r8, 0xF0, i8, 7, 0x41, 0x3A, 0xB8, 0xF0, 0x00, 0x00,
616 0x00);
617 TestRegAddrBase(cmp, r8, r9, 0xF0, i8, 7, 0x45, 0x3A, 0x81, 0xF0, 0x00, 0x00,
618 0x00);
619 TestRegAddrBase(cmp, r9, r10, 0xF0, i8, 7, 0x45, 0x3A, 0x8A, 0xF0, 0x00, 0x00,
620 0x00);
621 TestRegAddrBase(cmp, r10, r11, 0xF0, i8, 7, 0x45, 0x3A, 0x93, 0xF0, 0x00,
622 0x00, 0x00);
623 TestRegAddrBase(cmp, r11, r12, 0xF0, i8, 8, 0x45, 0x3A, 0x9C, 0x24, 0xF0,
624 0x00, 0x00, 0x00);
625 TestRegAddrBase(cmp, r12, r13, 0xF0, i8, 7, 0x45, 0x3A, 0xA5, 0xF0, 0x00,
626 0x00, 0x00);
627 TestRegAddrBase(cmp, r13, r14, 0xF0, i8, 7, 0x45, 0x3A, 0xAE, 0xF0, 0x00,
628 0x00, 0x00);
629 TestRegAddrBase(cmp, r14, r15, 0xF0, i8, 7, 0x45, 0x3A, 0xB7, 0xF0, 0x00,
630 0x00, 0x00);
631 TestRegAddrBase(cmp, r15, eax, 0xF0, i8, 7, 0x44, 0x3A, 0xB8, 0xF0, 0x00,
632 0x00, 0x00);
633
634 /* cmp GPR, Imm(,Index,Scale) */
635 TestRegAddrScaledIndex(cmp, eax, ecx, 1, 0, i32, 7, 0x3B, 0x04, 0x0D, 0x00,
636 0x00, 0x00, 0x00);
637 TestRegAddrScaledIndex(cmp, ecx, edx, 2, 0, i32, 7, 0x3B, 0x0C, 0x55, 0x00,
638 0x00, 0x00, 0x00);
639 TestRegAddrScaledIndex(cmp, edx, ebx, 4, 0, i32, 7, 0x3B, 0x14, 0x9D, 0x00,
640 0x00, 0x00, 0x00);
641 TestRegAddrScaledIndex(cmp, r8, r9, 1, 0, i32, 8, 0x46, 0x3B, 0x04, 0x0D,
642 0x00, 0x00, 0x00, 0x00);
643 TestRegAddrScaledIndex(cmp, r9, r10, 2, 0, i32, 8, 0x46, 0x3B, 0x0C, 0x55,
644 0x00, 0x00, 0x00, 0x00);
645 TestRegAddrScaledIndex(cmp, r10, r11, 4, 0, i32, 8, 0x46, 0x3B, 0x14, 0x9D,
646 0x00, 0x00, 0x00, 0x00);
647 // esp cannot be an scaled index.
648 TestRegAddrScaledIndex(cmp, esp, ebp, 8, 0, i32, 7, 0x3B, 0x24, 0xED, 0x00,
649 0x00, 0x00, 0x00);
650 TestRegAddrScaledIndex(cmp, ebp, esi, 1, 0, i32, 7, 0x3B, 0x2C, 0x35, 0x00,
651 0x00, 0x00, 0x00);
652 TestRegAddrScaledIndex(cmp, esi, edi, 2, 0, i32, 7, 0x3B, 0x34, 0x7D, 0x00,
653 0x00, 0x00, 0x00);
654 TestRegAddrScaledIndex(cmp, edi, eax, 4, 0, i32, 7, 0x3B, 0x3C, 0x85, 0x00,
655 0x00, 0x00, 0x00);
656 TestRegAddrScaledIndex(cmp, ebx, ecx, 8, 0, i32, 7, 0x3B, 0x1C, 0xCD, 0x00,
657 0x00, 0x00, 0x00);
658 TestRegAddrScaledIndex(cmp, r12, r13, 8, 0, i32, 8, 0x46, 0x3B, 0x24, 0xED,
659 0x00, 0x00, 0x00, 0x00);
660 TestRegAddrScaledIndex(cmp, r13, r14, 1, 0, i32, 8, 0x46, 0x3B, 0x2C, 0x35,
661 0x00, 0x00, 0x00, 0x00);
662 TestRegAddrScaledIndex(cmp, r14, r15, 2, 0, i32, 8, 0x46, 0x3B, 0x34, 0x7D,
663 0x00, 0x00, 0x00, 0x00);
664 TestRegAddrScaledIndex(cmp, r15, r8, 4, 0, i32, 8, 0x46, 0x3B, 0x3C, 0x85,
665 0x00, 0x00, 0x00, 0x00);
666 TestRegAddrScaledIndex(cmp, r11, r9, 8, 0, i32, 8, 0x46, 0x3B, 0x1C, 0xCD,
667 0x00, 0x00, 0x00, 0x00);
668
669 TestRegAddrScaledIndex(cmp, eax, ecx, 8, 0, i16, 8, 0x66, 0x3B, 0x04, 0xCD,
670 0x00, 0x00, 0x00, 0x00);
671 TestRegAddrScaledIndex(cmp, ecx, edx, 1, 0, i16, 8, 0x66, 0x3B, 0x0C, 0x15,
672 0x00, 0x00, 0x00, 0x00);
673 TestRegAddrScaledIndex(cmp, edx, ebx, 2, 0, i16, 8, 0x66, 0x3B, 0x14, 0x5D,
674 0x00, 0x00, 0x00, 0x00);
675 TestRegAddrScaledIndex(cmp, r8, r9, 8, 0, i16, 9, 0x66, 0x46, 0x3B, 0x04,
676 0xCD, 0x00, 0x00, 0x00, 0x00);
677 TestRegAddrScaledIndex(cmp, r9, r10, 1, 0, i16, 9, 0x66, 0x46, 0x3B, 0x0C,
678 0x15, 0x00, 0x00, 0x00, 0x00);
679 TestRegAddrScaledIndex(cmp, r10, r11, 2, 0, i16, 9, 0x66, 0x46, 0x3B, 0x14,
680 0x5D, 0x00, 0x00, 0x00, 0x00);
681 // esp cannot be an scaled index.
682 TestRegAddrScaledIndex(cmp, esp, ebp, 4, 0, i16, 8, 0x66, 0x3B, 0x24, 0xAD,
683 0x00, 0x00, 0x00, 0x00);
684 TestRegAddrScaledIndex(cmp, ebp, esi, 8, 0, i16, 8, 0x66, 0x3B, 0x2C, 0xF5,
685 0x00, 0x00, 0x00, 0x00);
686 TestRegAddrScaledIndex(cmp, esi, edi, 1, 0, i16, 8, 0x66, 0x3B, 0x34, 0x3D,
687 0x00, 0x00, 0x00, 0x00);
688 TestRegAddrScaledIndex(cmp, edi, eax, 2, 0, i16, 8, 0x66, 0x3B, 0x3C, 0x45,
689 0x00, 0x00, 0x00, 0x00);
690 TestRegAddrScaledIndex(cmp, ebx, ecx, 8, 0, i16, 8, 0x66, 0x3B, 0x1C, 0xCD,
691 0x00, 0x00, 0x00, 0x00);
692
693 TestRegAddrScaledIndex(cmp, eax, ecx, 4, 0, i8, 7, 0x3A, 0x04, 0x8D, 0x00,
694 0x00, 0x00, 0x00);
695 TestRegAddrScaledIndex(cmp, ecx, edx, 8, 0, i8, 7, 0x3A, 0x0C, 0xD5, 0x00,
696 0x00, 0x00, 0x00);
697 TestRegAddrScaledIndex(cmp, edx, ebx, 1, 0, i8, 7, 0x3A, 0x14, 0x1D, 0x00,
698 0x00, 0x00, 0x00);
699 TestRegAddrScaledIndex(cmp, r8, r9, 4, 0, i8, 8, 0x46, 0x3A, 0x04, 0x8D, 0x00,
700 0x00, 0x00, 0x00);
701 TestRegAddrScaledIndex(cmp, r9, r10, 8, 0, i8, 8, 0x46, 0x3A, 0x0C, 0xD5,
702 0x00, 0x00, 0x00, 0x00);
703 TestRegAddrScaledIndex(cmp, r10, r11, 1, 0, i8, 8, 0x46, 0x3A, 0x14, 0x1D,
704 0x00, 0x00, 0x00, 0x00);
705 // esp cannot be an scaled index.
706 TestRegAddrScaledIndex(cmp, esp, ebp, 2, 0, i8, 8, 0x40, 0x3A, 0x24, 0x6D,
707 0x00, 0x00, 0x00, 0x00);
708 TestRegAddrScaledIndex(cmp, ebp, esi, 4, 0, i8, 8, 0x40, 0x3A, 0x2C, 0xB5,
709 0x00, 0x00, 0x00, 0x00);
710 TestRegAddrScaledIndex(cmp, esi, edi, 8, 0, i8, 8, 0x40, 0x3A, 0x34, 0xFD,
711 0x00, 0x00, 0x00, 0x00);
712 TestRegAddrScaledIndex(cmp, edi, eax, 1, 0, i8, 8, 0x40, 0x3A, 0x3C, 0x05,
713 0x00, 0x00, 0x00, 0x00);
714 TestRegAddrScaledIndex(cmp, ebx, ecx, 8, 0, i8, 7, 0x3a, 0x1C, 0xCD, 0x00,
715 0x00, 0x00, 0x00);
716 TestRegAddrScaledIndex(cmp, r12, r13, 2, 0, i8, 8, 0x46, 0x3A, 0x24, 0x6D,
717 0x00, 0x00, 0x00, 0x00);
718 TestRegAddrScaledIndex(cmp, r13, r14, 4, 0, i8, 8, 0x46, 0x3A, 0x2C, 0xB5,
719 0x00, 0x00, 0x00, 0x00);
720 TestRegAddrScaledIndex(cmp, r14, r15, 8, 0, i8, 8, 0x46, 0x3A, 0x34, 0xFD,
721 0x00, 0x00, 0x00, 0x00);
722 TestRegAddrScaledIndex(cmp, r15, r8, 1, 0, i8, 8, 0x46, 0x3A, 0x3C, 0x05,
723 0x00, 0x00, 0x00, 0x00);
724 TestRegAddrScaledIndex(cmp, r11, r9, 8, 0, i8, 8, 0x46, 0x3a, 0x1C, 0xCD,
725 0x00, 0x00, 0x00, 0x00);
726
727 /* cmp GPR, 0(Base,Index,Scale) */
728 TestRegAddrBaseScaledIndex(cmp, eax, ecx, edx, 1, 0, i32, 3, 0x3B, 0x04,
729 0x11);
730 TestRegAddrBaseScaledIndex(cmp, ecx, edx, ebx, 2, 0, i32, 3, 0x3B, 0x0C,
731 0x5A);
732 TestRegAddrBaseScaledIndex(cmp, r8, r9, r10, 1, 0, i32, 4, 0x47, 0x3B, 0x04,
733 0x11);
734 TestRegAddrBaseScaledIndex(cmp, r9, r10, r11, 2, 0, i32, 4, 0x47, 0x3B, 0x0C,
735 0x5A);
736 // esp cannot be an scaled index.
737 TestRegAddrBaseScaledIndex(cmp, ebx, esp, ebp, 4, 0, i32, 3, 0x3B, 0x1C,
738 0xAC);
739 TestRegAddrBaseScaledIndex(cmp, esp, ebp, esi, 8, 0, i32, 4, 0x3B, 0x64, 0xF5,
740 0x00);
741 TestRegAddrBaseScaledIndex(cmp, ebp, esi, edi, 1, 0, i32, 3, 0x3B, 0x2C,
742 0x3E);
743 TestRegAddrBaseScaledIndex(cmp, esi, edi, eax, 2, 0, i32, 3, 0x3B, 0x34,
744 0x47);
745 TestRegAddrBaseScaledIndex(cmp, edi, eax, ebx, 4, 0, i32, 3, 0x3B, 0x3C,
746 0x98);
747 TestRegAddrBaseScaledIndex(cmp, ebx, ecx, edx, 8, 0, i32, 3, 0x3B, 0x1C,
748 0xD1);
749 TestRegAddrBaseScaledIndex(cmp, r11, r12, r13, 4, 0, i32, 4, 0x47, 0x3B, 0x1C,
750 0xAC);
751 TestRegAddrBaseScaledIndex(cmp, r12, r13, r14, 8, 0, i32, 5, 0x47, 0x3B, 0x64,
752 0xF5, 0x00);
753 TestRegAddrBaseScaledIndex(cmp, r13, r14, r15, 1, 0, i32, 4, 0x47, 0x3B, 0x2C,
754 0x3E);
755 TestRegAddrBaseScaledIndex(cmp, r14, r15, r8, 2, 0, i32, 4, 0x47, 0x3B, 0x34,
756 0x47);
757 TestRegAddrBaseScaledIndex(cmp, r15, r8, r11, 4, 0, i32, 4, 0x47, 0x3B, 0x3C,
758 0x98);
759 TestRegAddrBaseScaledIndex(cmp, r11, r9, r10, 8, 0, i32, 4, 0x47, 0x3B, 0x1C,
760 0xD1);
761
762 TestRegAddrBaseScaledIndex(cmp, eax, ecx, edx, 1, 0, i16, 4, 0x66, 0x3B, 0x04,
763 0x11);
764 TestRegAddrBaseScaledIndex(cmp, ecx, edx, ebx, 2, 0, i16, 4, 0x66, 0x3B, 0x0C,
765 0x5A);
766 TestRegAddrBaseScaledIndex(cmp, r8, r9, r10, 1, 0, i16, 5, 0x66, 0x47, 0x3B,
767 0x04, 0x11);
768 TestRegAddrBaseScaledIndex(cmp, r9, r10, r11, 2, 0, i16, 5, 0x66, 0x47, 0x3B,
769 0x0C, 0x5A);
770 // esp cannot be an scaled index.
771 TestRegAddrBaseScaledIndex(cmp, ebx, esp, ebp, 4, 0, i16, 4, 0x66, 0x3B, 0x1C,
772 0xAC);
773 TestRegAddrBaseScaledIndex(cmp, esp, ebp, esi, 8, 0, i16, 5, 0x66, 0x3B, 0x64,
774 0xF5, 0x00);
775 TestRegAddrBaseScaledIndex(cmp, ebp, esi, edi, 1, 0, i16, 4, 0x66, 0x3B, 0x2C,
776 0x3E);
777 TestRegAddrBaseScaledIndex(cmp, esi, edi, eax, 2, 0, i16, 4, 0x66, 0x3B, 0x34,
778 0x47);
779 TestRegAddrBaseScaledIndex(cmp, edi, eax, ebx, 4, 0, i16, 4, 0x66, 0x3B, 0x3C,
780 0x98);
781 TestRegAddrBaseScaledIndex(cmp, ebx, ecx, edx, 8, 0, i16, 4, 0x66, 0x3B, 0x1C,
782 0xD1);
783 TestRegAddrBaseScaledIndex(cmp, r11, r12, r13, 4, 0, i16, 5, 0x66, 0x47, 0x3B,
784 0x1C, 0xAC);
785 TestRegAddrBaseScaledIndex(cmp, r12, r13, r14, 8, 0, i16, 6, 0x66, 0x47, 0x3B,
786 0x64, 0xF5, 0x00);
787 TestRegAddrBaseScaledIndex(cmp, r13, r14, r15, 1, 0, i16, 5, 0x66, 0x47, 0x3B,
788 0x2C, 0x3E);
789 TestRegAddrBaseScaledIndex(cmp, r14, r15, r8, 2, 0, i16, 5, 0x66, 0x47, 0x3B,
790 0x34, 0x47);
791 TestRegAddrBaseScaledIndex(cmp, r15, r8, r11, 4, 0, i16, 5, 0x66, 0x47, 0x3B,
792 0x3C, 0x98);
793 TestRegAddrBaseScaledIndex(cmp, r11, r9, r10, 8, 0, i16, 5, 0x66, 0x47, 0x3B,
794 0x1C, 0xD1);
795
796 TestRegAddrBaseScaledIndex(cmp, eax, ecx, edx, 1, 0, i8, 3, 0x3A, 0x04, 0x11);
797 TestRegAddrBaseScaledIndex(cmp, ecx, edx, ebx, 2, 0, i8, 3, 0x3A, 0x0C, 0x5A);
798 TestRegAddrBaseScaledIndex(cmp, r8, r9, r10, 1, 0, i8, 4, 0x47, 0x3A, 0x04,
799 0x11);
800 TestRegAddrBaseScaledIndex(cmp, r9, r10, r11, 2, 0, i8, 4, 0x47, 0x3A, 0x0C,
801 0x5A);
802 // esp cannot be an scaled index.
803 TestRegAddrBaseScaledIndex(cmp, ebx, esp, ebp, 4, 0, i8, 3, 0x3A, 0x1C, 0xAC);
804 TestRegAddrBaseScaledIndex(cmp, esp, ebp, esi, 8, 0, i8, 5, 0x40, 0x3A, 0x64,
805 0xF5, 0x00);
806 TestRegAddrBaseScaledIndex(cmp, ebp, esi, edi, 1, 0, i8, 4, 0x40, 0x3A, 0x2C,
807 0x3E);
808 TestRegAddrBaseScaledIndex(cmp, esi, edi, eax, 2, 0, i8, 4, 0x40, 0x3A, 0x34,
809 0x47);
810 TestRegAddrBaseScaledIndex(cmp, edi, eax, ebx, 4, 0, i8, 4, 0x40, 0x3A, 0x3C,
811 0x98);
812 TestRegAddrBaseScaledIndex(cmp, ebx, ecx, edx, 8, 0, i8, 3, 0x3A, 0x1C, 0xD1);
813 TestRegAddrBaseScaledIndex(cmp, r11, r12, r13, 4, 0, i8, 4, 0x47, 0x3A, 0x1C,
814 0xAC);
815 TestRegAddrBaseScaledIndex(cmp, r12, r13, r14, 8, 0, i8, 5, 0x47, 0x3A, 0x64,
816 0xF5, 0x00);
817 TestRegAddrBaseScaledIndex(cmp, r13, r14, r15, 1, 0, i8, 4, 0x47, 0x3A, 0x2C,
818 0x3E);
819 TestRegAddrBaseScaledIndex(cmp, r14, r15, r8, 2, 0, i8, 4, 0x47, 0x3A, 0x34,
820 0x47);
821 TestRegAddrBaseScaledIndex(cmp, r15, r8, r11, 4, 0, i8, 4, 0x47, 0x3A, 0x3C,
822 0x98);
823 TestRegAddrBaseScaledIndex(cmp, r11, r9, r10, 8, 0, i8, 4, 0x47, 0x3A, 0x1C,
824 0xD1);
825
826 /* cmp GPR, Imm8(Base,Index,Scale) */
827 TestRegAddrBaseScaledIndex(cmp, eax, ecx, edx, 1, 0x40, i32, 4, 0x3B, 0x44,
828 0x11, 0x40);
829 TestRegAddrBaseScaledIndex(cmp, ecx, edx, ebx, 2, 0x40, i32, 4, 0x3B, 0x4C,
830 0x5A, 0x40);
831 TestRegAddrBaseScaledIndex(cmp, r8, r9, r10, 1, 0x40, i32, 5, 0x47, 0x3B,
832 0x44, 0x11, 0x40);
833 TestRegAddrBaseScaledIndex(cmp, r9, r10, r11, 2, 0x40, i32, 5, 0x47, 0x3B,
834 0x4C, 0x5A, 0x40);
835 // esp cannot be an scaled index.
836 TestRegAddrBaseScaledIndex(cmp, ebx, esp, ebp, 4, 0x40, i32, 4, 0x3B, 0x5C,
837 0xAC, 0x40);
838 TestRegAddrBaseScaledIndex(cmp, esp, ebp, esi, 8, 0x40, i32, 4, 0x3B, 0x64,
839 0xF5, 0x40);
840 TestRegAddrBaseScaledIndex(cmp, ebp, esi, edi, 1, 0x40, i32, 4, 0x3B, 0x6C,
841 0x3E, 0x40);
842 TestRegAddrBaseScaledIndex(cmp, esi, edi, eax, 2, 0x40, i32, 4, 0x3B, 0x74,
843 0x47, 0x40);
844 TestRegAddrBaseScaledIndex(cmp, edi, eax, ebx, 4, 0x40, i32, 4, 0x3B, 0x7C,
845 0x98, 0x40);
846 TestRegAddrBaseScaledIndex(cmp, ebx, ecx, edx, 8, 0x40, i32, 4, 0x3B, 0x5C,
847 0xD1, 0x40);
848 TestRegAddrBaseScaledIndex(cmp, r11, r12, r13, 4, 0x40, i32, 5, 0x47, 0x3B,
849 0x5C, 0xAC, 0x40);
850 TestRegAddrBaseScaledIndex(cmp, r12, r13, r14, 8, 0x40, i32, 5, 0x47, 0x3B,
851 0x64, 0xF5, 0x40);
852 TestRegAddrBaseScaledIndex(cmp, r13, r14, r15, 1, 0x40, i32, 5, 0x47, 0x3B,
853 0x6C, 0x3E, 0x40);
854 TestRegAddrBaseScaledIndex(cmp, r14, r15, r8, 2, 0x40, i32, 5, 0x47, 0x3B,
855 0x74, 0x47, 0x40);
856 TestRegAddrBaseScaledIndex(cmp, r15, r8, r11, 4, 0x40, i32, 5, 0x47, 0x3B,
857 0x7C, 0x98, 0x40);
858 TestRegAddrBaseScaledIndex(cmp, r11, r9, r10, 8, 0x40, i32, 5, 0x47, 0x3B,
859 0x5C, 0xD1, 0x40);
860
861 TestRegAddrBaseScaledIndex(cmp, eax, ecx, edx, 1, 0x40, i16, 5, 0x66, 0x3B,
862 0x44, 0x11, 0x40);
863 TestRegAddrBaseScaledIndex(cmp, ecx, edx, ebx, 2, 0x40, i16, 5, 0x66, 0x3B,
864 0x4C, 0x5A, 0x40);
865 TestRegAddrBaseScaledIndex(cmp, r8, r9, r10, 1, 0x40, i16, 6, 0x66, 0x47,
866 0x3B, 0x44, 0x11, 0x40);
867 TestRegAddrBaseScaledIndex(cmp, r9, r10, r11, 2, 0x40, i16, 6, 0x66, 0x47,
868 0x3B, 0x4C, 0x5A, 0x40);
869 // esp cannot be an scaled index.
870 TestRegAddrBaseScaledIndex(cmp, ebx, esp, ebp, 4, 0x40, i16, 5, 0x66, 0x3B,
871 0x5C, 0xAC, 0x40);
872 TestRegAddrBaseScaledIndex(cmp, esp, ebp, esi, 8, 0x40, i16, 5, 0x66, 0x3B,
873 0x64, 0xF5, 0x40);
874 TestRegAddrBaseScaledIndex(cmp, ebp, esi, edi, 1, 0x40, i16, 5, 0x66, 0x3B,
875 0x6C, 0x3E, 0x40);
876 TestRegAddrBaseScaledIndex(cmp, esi, edi, eax, 2, 0x40, i16, 5, 0x66, 0x3B,
877 0x74, 0x47, 0x40);
878 TestRegAddrBaseScaledIndex(cmp, edi, eax, ebx, 4, 0x40, i16, 5, 0x66, 0x3B,
879 0x7C, 0x98, 0x40);
880 TestRegAddrBaseScaledIndex(cmp, ebx, ecx, edx, 8, 0x40, i16, 5, 0x66, 0x3B,
881 0x5C, 0xD1, 0x40);
882 TestRegAddrBaseScaledIndex(cmp, r11, r12, r13, 4, 0x40, i16, 6, 0x66, 0x47,
883 0x3B, 0x5C, 0xAC, 0x40);
884 TestRegAddrBaseScaledIndex(cmp, r12, r13, r14, 8, 0x40, i16, 6, 0x66, 0x47,
885 0x3B, 0x64, 0xF5, 0x40);
886 TestRegAddrBaseScaledIndex(cmp, r13, r14, r15, 1, 0x40, i16, 6, 0x66, 0x47,
887 0x3B, 0x6C, 0x3E, 0x40);
888 TestRegAddrBaseScaledIndex(cmp, r14, r15, r8, 2, 0x40, i16, 6, 0x66, 0x47,
889 0x3B, 0x74, 0x47, 0x40);
890 TestRegAddrBaseScaledIndex(cmp, r15, r8, r11, 4, 0x40, i16, 6, 0x66, 0x47,
891 0x3B, 0x7C, 0x98, 0x40);
892 TestRegAddrBaseScaledIndex(cmp, r11, r9, r10, 8, 0x40, i16, 6, 0x66, 0x47,
893 0x3B, 0x5C, 0xD1, 0x40);
894
895 TestRegAddrBaseScaledIndex(cmp, eax, ecx, edx, 1, 0x40, i8, 4, 0x3A, 0x44,
896 0x11, 0x40);
897 TestRegAddrBaseScaledIndex(cmp, ecx, edx, ebx, 2, 0x40, i8, 4, 0x3A, 0x4C,
898 0x5A, 0x40);
899 TestRegAddrBaseScaledIndex(cmp, r8, r9, r10, 1, 0x40, i8, 5, 0x47, 0x3A, 0x44,
900 0x11, 0x40);
901 TestRegAddrBaseScaledIndex(cmp, r9, r10, r11, 2, 0x40, i8, 5, 0x47, 0x3A,
902 0x4C, 0x5A, 0x40);
903 // esp cannot be an scaled index.
904 TestRegAddrBaseScaledIndex(cmp, ebx, esp, ebp, 4, 0x40, i8, 4, 0x3A, 0x5C,
905 0xAC, 0x40);
906 TestRegAddrBaseScaledIndex(cmp, esp, ebp, esi, 8, 0x40, i8, 5, 0x40, 0x3A,
907 0x64, 0xF5, 0x40);
908 TestRegAddrBaseScaledIndex(cmp, ebp, esi, edi, 1, 0x40, i8, 5, 0x40, 0x3A,
909 0x6C, 0x3E, 0x40);
910 TestRegAddrBaseScaledIndex(cmp, esi, edi, eax, 2, 0x40, i8, 5, 0x40, 0x3A,
911 0x74, 0x47, 0x40);
912 TestRegAddrBaseScaledIndex(cmp, edi, eax, ebx, 4, 0x40, i8, 5, 0x40, 0x3A,
913 0x7C, 0x98, 0x40);
914 TestRegAddrBaseScaledIndex(cmp, ebx, ecx, edx, 8, 0x40, i8, 4, 0x3A, 0x5C,
915 0xD1, 0x40);
916 TestRegAddrBaseScaledIndex(cmp, r11, r12, r13, 4, 0x40, i8, 5, 0x47, 0x3A,
917 0x5C, 0xAC, 0x40);
918 TestRegAddrBaseScaledIndex(cmp, r12, r13, r14, 8, 0x40, i8, 5, 0x47, 0x3A,
919 0x64, 0xF5, 0x40);
920 TestRegAddrBaseScaledIndex(cmp, r13, r14, r15, 1, 0x40, i8, 5, 0x47, 0x3A,
921 0x6C, 0x3E, 0x40);
922 TestRegAddrBaseScaledIndex(cmp, r14, r15, r8, 2, 0x40, i8, 5, 0x47, 0x3A,
923 0x74, 0x47, 0x40);
924 TestRegAddrBaseScaledIndex(cmp, r15, r8, r11, 4, 0x40, i8, 5, 0x47, 0x3A,
925 0x7C, 0x98, 0x40);
926 TestRegAddrBaseScaledIndex(cmp, r11, r9, r10, 8, 0x40, i8, 5, 0x47, 0x3A,
927 0x5C, 0xD1, 0x40);
928
929 /* cmp GPR, Imm32(Base,Index,Scale) */
930 TestRegAddrBaseScaledIndex(cmp, eax, ecx, edx, 1, 0xF0, i32, 7, 0x3B, 0x84,
931 0x11, 0xF0, 0x00, 0x00, 0x00);
932 TestRegAddrBaseScaledIndex(cmp, ecx, edx, ebx, 2, 0xF0, i32, 7, 0x3B, 0x8C,
933 0x5A, 0xF0, 0x00, 0x00, 0x00);
934 TestRegAddrBaseScaledIndex(cmp, r8, r9, r10, 1, 0xF0, i32, 8, 0x47, 0x3B,
935 0x84, 0x11, 0xF0, 0x00, 0x00, 0x00);
936 TestRegAddrBaseScaledIndex(cmp, r9, r10, r11, 2, 0xF0, i32, 8, 0x47, 0x3B,
937 0x8C, 0x5A, 0xF0, 0x00, 0x00, 0x00);
938 // esp cannot be an scaled index.
939 TestRegAddrBaseScaledIndex(cmp, ebx, esp, ebp, 4, 0xF0, i32, 7, 0x3B, 0x9C,
940 0xAC, 0xF0, 0x00, 0x00, 0x00);
941 TestRegAddrBaseScaledIndex(cmp, esp, ebp, esi, 8, 0xF0, i32, 7, 0x3B, 0xA4,
942 0xF5, 0xF0, 0x00, 0x00, 0x00);
943 TestRegAddrBaseScaledIndex(cmp, ebp, esi, edi, 1, 0xF0, i32, 7, 0x3B, 0xAC,
944 0x3E, 0xF0, 0x00, 0x00, 0x00);
945 TestRegAddrBaseScaledIndex(cmp, esi, edi, eax, 2, 0xF0, i32, 7, 0x3B, 0xB4,
946 0x47, 0xF0, 0x00, 0x00, 0x00);
947 TestRegAddrBaseScaledIndex(cmp, edi, eax, ebx, 4, 0xF0, i32, 7, 0x3B, 0xBC,
948 0x98, 0xF0, 0x00, 0x00, 0x00);
949 TestRegAddrBaseScaledIndex(cmp, ebx, ecx, edx, 8, 0xF0, i32, 7, 0x3B, 0x9C,
950 0xD1, 0xF0, 0x00, 0x00, 0x00);
951 TestRegAddrBaseScaledIndex(cmp, r11, r12, r13, 4, 0xF0, i32, 8, 0x47, 0x3B,
952 0x9C, 0xAC, 0xF0, 0x00, 0x00, 0x00);
953 TestRegAddrBaseScaledIndex(cmp, r12, r13, r14, 8, 0xF0, i32, 8, 0x47, 0x3B,
954 0xA4, 0xF5, 0xF0, 0x00, 0x00, 0x00);
955 TestRegAddrBaseScaledIndex(cmp, r13, r14, r15, 1, 0xF0, i32, 8, 0x47, 0x3B,
956 0xAC, 0x3E, 0xF0, 0x00, 0x00, 0x00);
957 TestRegAddrBaseScaledIndex(cmp, r14, r15, r8, 2, 0xF0, i32, 8, 0x47, 0x3B,
958 0xB4, 0x47, 0xF0, 0x00, 0x00, 0x00);
959 TestRegAddrBaseScaledIndex(cmp, r15, r8, r11, 4, 0xF0, i32, 8, 0x47, 0x3B,
960 0xBC, 0x98, 0xF0, 0x00, 0x00, 0x00);
961 TestRegAddrBaseScaledIndex(cmp, r11, r9, r10, 8, 0xF0, i32, 8, 0x47, 0x3B,
962 0x9C, 0xD1, 0xF0, 0x00, 0x00, 0x00);
963
964 TestRegAddrBaseScaledIndex(cmp, eax, ecx, edx, 1, 0xF0, i16, 8, 0x66, 0x3B,
965 0x84, 0x11, 0xF0, 0x00, 0x00, 0x00);
966 TestRegAddrBaseScaledIndex(cmp, ecx, edx, ebx, 2, 0xF0, i16, 8, 0x66, 0x3B,
967 0x8C, 0x5A, 0xF0, 0x00, 0x00, 0x00);
968 TestRegAddrBaseScaledIndex(cmp, r8, r9, r10, 1, 0xF0, i16, 9, 0x66, 0x47,
969 0x3B, 0x84, 0x11, 0xF0, 0x00, 0x00, 0x00);
970 TestRegAddrBaseScaledIndex(cmp, r9, r10, r11, 2, 0xF0, i16, 9, 0x66, 0x47,
971 0x3B, 0x8C, 0x5A, 0xF0, 0x00, 0x00, 0x00);
972 // esp cannot be an scaled index.
973 TestRegAddrBaseScaledIndex(cmp, ebx, esp, ebp, 4, 0xF0, i16, 8, 0x66, 0x3B,
974 0x9C, 0xAC, 0xF0, 0x00, 0x00, 0x00);
975 TestRegAddrBaseScaledIndex(cmp, esp, ebp, esi, 8, 0xF0, i16, 8, 0x66, 0x3B,
976 0xA4, 0xF5, 0xF0, 0x00, 0x00, 0x00);
977 TestRegAddrBaseScaledIndex(cmp, ebp, esi, edi, 1, 0xF0, i16, 8, 0x66, 0x3B,
978 0xAC, 0x3E, 0xF0, 0x00, 0x00, 0x00);
979 TestRegAddrBaseScaledIndex(cmp, esi, edi, eax, 2, 0xF0, i16, 8, 0x66, 0x3B,
980 0xB4, 0x47, 0xF0, 0x00, 0x00, 0x00);
981 TestRegAddrBaseScaledIndex(cmp, edi, eax, ebx, 4, 0xF0, i16, 8, 0x66, 0x3B,
982 0xBC, 0x98, 0xF0, 0x00, 0x00, 0x00);
983 TestRegAddrBaseScaledIndex(cmp, ebx, ecx, edx, 8, 0xF0, i16, 8, 0x66, 0x3B,
984 0x9C, 0xD1, 0xF0, 0x00, 0x00, 0x00);
985 TestRegAddrBaseScaledIndex(cmp, r11, r12, r13, 4, 0xF0, i16, 9, 0x66, 0x47,
986 0x3B, 0x9C, 0xAC, 0xF0, 0x00, 0x00, 0x00);
987 TestRegAddrBaseScaledIndex(cmp, r12, r13, r14, 8, 0xF0, i16, 9, 0x66, 0x47,
988 0x3B, 0xA4, 0xF5, 0xF0, 0x00, 0x00, 0x00);
989 TestRegAddrBaseScaledIndex(cmp, r13, r14, r15, 1, 0xF0, i16, 9, 0x66, 0x47,
990 0x3B, 0xAC, 0x3E, 0xF0, 0x00, 0x00, 0x00);
991 TestRegAddrBaseScaledIndex(cmp, r14, r15, r8, 2, 0xF0, i16, 9, 0x66, 0x47,
992 0x3B, 0xB4, 0x47, 0xF0, 0x00, 0x00, 0x00);
993 TestRegAddrBaseScaledIndex(cmp, r15, r8, r11, 4, 0xF0, i16, 9, 0x66, 0x47,
994 0x3B, 0xBC, 0x98, 0xF0, 0x00, 0x00, 0x00);
995 TestRegAddrBaseScaledIndex(cmp, r11, r9, r10, 8, 0xF0, i16, 9, 0x66, 0x47,
996 0x3B, 0x9C, 0xD1, 0xF0, 0x00, 0x00, 0x00);
997
998 TestRegAddrBaseScaledIndex(cmp, eax, ecx, edx, 1, 0xF0, i8, 7, 0x3A, 0x84,
999 0x11, 0xF0, 0x00, 0x00, 0x00);
1000 TestRegAddrBaseScaledIndex(cmp, ecx, edx, ebx, 2, 0xF0, i8, 7, 0x3A, 0x8C,
1001 0x5A, 0xF0, 0x00, 0x00, 0x00);
1002 TestRegAddrBaseScaledIndex(cmp, r8, r9, r10, 1, 0xF0, i8, 8, 0x47, 0x3A, 0x84,
1003 0x11, 0xF0, 0x00, 0x00, 0x00);
1004 TestRegAddrBaseScaledIndex(cmp, r9, r10, r11, 2, 0xF0, i8, 8, 0x47, 0x3A,
1005 0x8C, 0x5A, 0xF0, 0x00, 0x00, 0x00);
1006 // esp cannot be an scaled index.
1007 TestRegAddrBaseScaledIndex(cmp, ebx, esp, ebp, 4, 0xF0, i8, 7, 0x3A, 0x9C,
1008 0xAC, 0xF0, 0x00, 0x00, 0x00);
1009 TestRegAddrBaseScaledIndex(cmp, esp, ebp, esi, 8, 0xF0, i8, 8, 0x40, 0x3A,
1010 0xA4, 0xF5, 0xF0, 0x00, 0x00, 0x00);
1011 TestRegAddrBaseScaledIndex(cmp, ebp, esi, edi, 1, 0xF0, i8, 8, 0x40, 0x3A,
1012 0xAC, 0x3E, 0xF0, 0x00, 0x00, 0x00);
1013 TestRegAddrBaseScaledIndex(cmp, esi, edi, eax, 2, 0xF0, i8, 8, 0x40, 0x3A,
1014 0xB4, 0x47, 0xF0, 0x00, 0x00, 0x00);
1015 TestRegAddrBaseScaledIndex(cmp, edi, eax, ebx, 4, 0xF0, i8, 8, 0x40, 0x3A,
1016 0xBC, 0x98, 0xF0, 0x00, 0x00, 0x00);
1017 TestRegAddrBaseScaledIndex(cmp, ebx, ecx, edx, 8, 0xF0, i8, 7, 0x3A, 0x9C,
1018 0xD1, 0xF0, 0x00, 0x00, 0x00);
1019 TestRegAddrBaseScaledIndex(cmp, r11, r12, r13, 4, 0xF0, i8, 8, 0x47, 0x3A,
1020 0x9C, 0xAC, 0xF0, 0x00, 0x00, 0x00);
1021 TestRegAddrBaseScaledIndex(cmp, r12, r13, r14, 8, 0xF0, i8, 8, 0x47, 0x3A,
1022 0xA4, 0xF5, 0xF0, 0x00, 0x00, 0x00);
1023 TestRegAddrBaseScaledIndex(cmp, r13, r14, r15, 1, 0xF0, i8, 8, 0x47, 0x3A,
1024 0xAC, 0x3E, 0xF0, 0x00, 0x00, 0x00);
1025 TestRegAddrBaseScaledIndex(cmp, r14, r15, r8, 2, 0xF0, i8, 8, 0x47, 0x3A,
1026 0xB4, 0x47, 0xF0, 0x00, 0x00, 0x00);
1027 TestRegAddrBaseScaledIndex(cmp, r15, r8, r11, 4, 0xF0, i8, 8, 0x47, 0x3A,
1028 0xBC, 0x98, 0xF0, 0x00, 0x00, 0x00);
1029 TestRegAddrBaseScaledIndex(cmp, r11, r9, r10, 8, 0xF0, i8, 8, 0x47, 0x3A,
1030 0x9C, 0xD1, 0xF0, 0x00, 0x00, 0x00);
1031
1032 /* cmp Addr, Imm */
1033 // Note: at this point we trust the assembler knows how to encode addresses,
1034 // so no more exhaustive addressing mode testing.
1035 TestAddrBaseScaledIndexImm(cmp, eax, ecx, 1, 0xF0, 0x12, i32, 8, 0x83, 0xBC,
1036 0x08, 0xF0, 0x00, 0x00, 0x00, 0x12);
1037 TestAddrBaseScaledIndexImm(cmp, ecx, edx, 1, 0xF0, 0xF0, i32, 11, 0x81, 0xBC,
1038 0x11, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00,
1039 0x00);
1040 TestAddrBaseScaledIndexImm(cmp, r8, r9, 1, 0xF0, 0x12, i32, 9, 0x43, 0x83,
1041 0xBC, 0x08, 0xF0, 0x00, 0x00, 0x00, 0x12);
1042 TestAddrBaseScaledIndexImm(cmp, r9, r10, 1, 0xF0, 0xF0, i32, 12, 0x43, 0x81,
1043 0xBC, 0x11, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x00,
1044 0x00, 0x00);
1045
1046 TestAddrBaseScaledIndexImm(cmp, eax, ecx, 1, 0xF0, 0x12, i16, 9, 0x66, 0x83,
1047 0xBC, 0x08, 0xF0, 0x00, 0x00, 0x00, 0x12);
1048 TestAddrBaseScaledIndexImm(cmp, ecx, edx, 1, 0xF0, 0xF0, i16, 10, 0x66, 0x81,
1049 0xBC, 0x11, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x00);
1050 TestAddrBaseScaledIndexImm(cmp, r8, r9, 1, 0xF0, 0x12, i16, 10, 0x66, 0x43,
1051 0x83, 0xBC, 0x08, 0xF0, 0x00, 0x00, 0x00, 0x12);
1052 TestAddrBaseScaledIndexImm(cmp, r9, r10, 1, 0xF0, 0xF0, i16, 11, 0x66, 0x43,
1053 0x81, 0xBC, 0x11, 0xF0, 0x00, 0x00, 0x00, 0xF0,
1054 0x00);
1055
1056 TestAddrBaseScaledIndexImm(cmp, eax, ecx, 1, 0xF0, 0x12, i8, 8, 0x80, 0xBC,
1057 0x08, 0xF0, 0x00, 0x00, 0x00, 0x12);
1058 TestAddrBaseScaledIndexImm(cmp, r8, r9, 1, 0xF0, 0x12, i8, 9, 0x43, 0x80,
1059 0xBC, 0x08, 0xF0, 0x00, 0x00, 0x00, 0x12);
1060
1061 /* cmp Addr, GPR */
1062 TestAddrBaseScaledIndexReg(cmp, eax, ecx, 1, 0xF0, edx, i32, 7, 0x39, 0x94,
1063 0x08, 0xF0, 0x00, 0x00, 0x00);
1064 TestAddrBaseScaledIndexReg(cmp, r8, r9, 1, 0xF0, r10, i32, 8, 0x47, 0x39,
1065 0x94, 0x08, 0xF0, 0x00, 0x00, 0x00);
1066
1067 TestAddrBaseScaledIndexReg(cmp, eax, ecx, 1, 0xF0, edx, i16, 8, 0x66, 0x39,
1068 0x94, 0x08, 0xF0, 0x00, 0x00, 0x00);
1069 TestAddrBaseScaledIndexReg(cmp, r8, r9, 1, 0xF0, r10, i16, 9, 0x66, 0x47,
1070 0x39, 0x94, 0x08, 0xF0, 0x00, 0x00, 0x00);
1071
1072 TestAddrBaseScaledIndexReg(cmp, eax, ecx, 1, 0xF0, edx, i8, 7, 0x38, 0x94,
1073 0x08, 0xF0, 0x00, 0x00, 0x00);
1074 TestAddrBaseScaledIndexReg(cmp, r8, r9, 1, 0xF0, r10, i8, 8, 0x47, 0x38, 0x94,
1075 0x08, 0xF0, 0x00, 0x00, 0x00);
1076
1077 #undef TestAddrBaseScaledIndexReg
1078 #undef TestAddrBaseScaledIndexImm
1079 #undef TestRegAddrBaseScaledIndex
1080 #undef TestRegAddrScaledIndex
1081 #undef TestRegAddrBase
1082 #undef TestRegAbsoluteAddr
1083 #undef TestRegImm
1084 #undef TestRegReg
1085 }
1086
1087 TEST_F(AssemblerX8664Test, ScratchpadGettersAndSetters) {
1088 const uint32_t S0 = allocateDword();
1089 const uint32_t S1 = allocateDword();
1090 const uint32_t S2 = allocateDword();
1091 const uint32_t S3 = allocateDword();
1092 AssembledTest test = assemble();
1093 test.setDwordTo(S0, 0xBEEF0000u);
1094 test.setDwordTo(S1, 0xDEADu);
1095 test.setDwordTo(S2, 0x20406080u);
1096 ASSERT_EQ(0xBEEF0000u, test.contentsOfDword(S0));
1097 ASSERT_EQ(0xDEADu, test.contentsOfDword(S1));
1098 ASSERT_EQ(0x20406080u, test.contentsOfDword(S2));
1099 ASSERT_EQ(0xDEADBEEF0000ull, test.contentsOfQword(S0));
1100 ASSERT_EQ(0x204060800000DEADull, test.contentsOfQword(S1));
1101
1102 test.setQwordTo(S1, 0x1234567890ABCDEFull);
1103 ASSERT_EQ(0x1234567890ABCDEFull, test.contentsOfQword(S1));
1104 test.setDwordTo(S0, 0xBEEF0000u);
1105 ASSERT_EQ(0x90ABCDEFull, test.contentsOfDword(S1));
1106 ASSERT_EQ(0x12345678ull, test.contentsOfDword(S2));
1107
1108 test.setDwordTo(S0, 1.0f);
1109 ASSERT_FLOAT_EQ(1.0f, test.contentsOfDword<float>(S0));
1110 test.setQwordTo(S0, 3.14);
1111 ASSERT_DOUBLE_EQ(3.14, test.contentsOfQword<double>(S0));
1112
1113 test.setDqwordTo(S0, Dqword(1.0f, 2.0f, 3.0f, 4.0f));
1114 ASSERT_EQ(Dqword(1.0f, 2.0f, 3.0f, 4.0f), test.contentsOfDqword(S0));
1115 EXPECT_FLOAT_EQ(1.0f, test.contentsOfDword<float>(S0));
1116 EXPECT_FLOAT_EQ(2.0f, test.contentsOfDword<float>(S1));
1117 EXPECT_FLOAT_EQ(3.0f, test.contentsOfDword<float>(S2));
1118 EXPECT_FLOAT_EQ(4.0f, test.contentsOfDword<float>(S3));
1119 }
1120
1121 } // end of anonymous namespace
1122 } // end of namespace Test
1123 } // end of namespace X8664
1124 } // end of namespace Ice
OLDNEW
« no previous file with comments | « unittest/AssemblerX8664/Locked.cpp ('k') | unittest/AssemblerX8664/Other.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698