OLD | NEW |
(Empty) | |
| 1 BITS: 64 |
| 2 OUTCOME: invalid |
| 3 |
| 4 # 2 prefixes of the same type |
| 5 # lock lock add %eax,(%rsp) |
| 6 hex: F0 F0 01 04 24 |
| 7 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 8 nc_out: ERROR: Duplicating a prefix byte is not allowed by Native Client |
| 9 |
| 10 # mov %edi,%edi |
| 11 # lea (%r15,%rdi),%rdi |
| 12 # rep rep stos %eax,%es:(%rdi) |
| 13 asm: mov %edi,%edi |
| 14 hex: 89 FF |
| 15 |
| 16 asm: lea (%r15,%rdi,1),%rdi |
| 17 hex: 49 8D 3C 3F |
| 18 |
| 19 hex: F3 F3 AB |
| 20 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 21 nc_out: ERROR: Duplicating a prefix byte is not allowed by Native Client |
| 22 |
| 23 # mov %edi,%edi |
| 24 # lea (%r15,%rdi),%rdi |
| 25 # repne rep stos %eax,%es:(%rdi) |
| 26 asm: mov %edi,%edi |
| 27 hex: 89 FF |
| 28 |
| 29 asm: lea (%r15,%rdi,1),%rdi |
| 30 hex: 49 8D 3C 3F |
| 31 |
| 32 hex: F2 F3 AB |
| 33 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 34 nc_out: ERROR: Use of REPNE (F2) prefix for instruction not allowed by Native Cl
ient |
| 35 |
| 36 # mov %edi,%edi |
| 37 # lea (%r15,%rdi),%rdi |
| 38 # rep repne scas %es:(%rdi),%al |
| 39 asm: mov %edi,%edi |
| 40 hex: 89 FF |
| 41 |
| 42 asm: lea (%r15,%rdi,1),%rdi |
| 43 hex: 49 8D 3C 3F |
| 44 |
| 45 hex: F3 F2 AE |
| 46 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 47 |
| 48 # fs gs mov %eax,%eax |
| 49 asm: fs; gs; mov %eax,%eax |
| 50 hex: 64 65 89 C0 |
| 51 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 52 nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
| 53 nc_out: ERROR: Specifying different segment registers using prefix bytes is not
allowed by Native Client |
| 54 |
| 55 # 0x66 mov %ax,%ax |
| 56 hex: 66 66 89 C0 |
| 57 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 58 nc_out: ERROR: Duplicating a prefix byte is not allowed by Native Client |
| 59 |
| 60 # 0x67 mov %eax,(%esp) |
| 61 hex: 67 67 89 04 24 |
| 62 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 63 nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
| 64 nc_out: ERROR: Duplicating a prefix byte is not allowed by Native Client |
| 65 nc_out: ERROR: Assignment to non-64 bit memory address |
| 66 |
| 67 # rex rex jmp $ |
| 68 hex: 40 40 EB FD |
| 69 nc_out: ERROR: Multiple use of REX prefix not allowed |
| 70 nc_out: [at +1] Bad jump target |
| 71 |
| 72 |
| 73 # 2 prefixes of different type |
| 74 # lock add %eax, %ss:(%rsp) |
| 75 hex: 36 F0 01 04 24 |
| 76 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 77 nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
| 78 |
| 79 hex: F0 36 01 04 24 |
| 80 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 81 nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
| 82 |
| 83 |
| 84 # Nops for bundle alignment. |
| 85 asm: nop; nop; nop |
| 86 hex: 90 90 90 |
| 87 |
| 88 |
| 89 # mov %edi,%edi |
| 90 # lea (%r15,%rdi),%rdi |
| 91 # es rep stos %eax,%es:(%rdi) |
| 92 asm: mov %edi,%edi |
| 93 hex: 89 FF |
| 94 |
| 95 asm: lea (%r15,%rdi,1),%rdi |
| 96 hex: 49 8D 3C 3F |
| 97 nc_out: Bad basic block alignment. |
| 98 |
| 99 hex: 26 F3 AB |
| 100 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 101 nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
| 102 |
| 103 asm: mov %edi,%edi |
| 104 hex: 89 FF |
| 105 |
| 106 asm: lea (%r15,%rdi,1),%rdi |
| 107 hex: 49 8D 3C 3F |
| 108 |
| 109 hex: F3 26 AB |
| 110 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 111 nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
| 112 |
| 113 # lock add %ax, (%rsp) |
| 114 asm: lock add %ax,(%rsp) |
| 115 hex: 66 F0 01 04 24 |
| 116 |
| 117 hex: F0 66 01 04 24 |
| 118 |
| 119 # Doesn't validate due to bug. |
| 120 # mov %edi,%edi |
| 121 # lea (%r15,%rdi),%rdi |
| 122 # rep stosw %ax,%es:(%rdi) |
| 123 asm: mov %edi,%edi |
| 124 hex: 89 FF |
| 125 |
| 126 asm: lea (%r15,%rdi,1),%rdi |
| 127 hex: 49 8D 3C 3F |
| 128 |
| 129 asm: rep stos %ax,%es:(%rdi) |
| 130 hex: 66 F3 AB |
| 131 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 132 nc_out: Bad basic block alignment. |
| 133 |
| 134 asm: mov %edi,%edi |
| 135 hex: 89 FF |
| 136 |
| 137 asm: lea (%r15,%rdi,1),%rdi |
| 138 hex: 49 8D 3C 3F |
| 139 |
| 140 hex: F3 66 AB |
| 141 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 142 |
| 143 # lock add %eax, (%esp) |
| 144 asm: lock addr32 add %eax,(%esp) |
| 145 hex: 67 F0 01 04 24 |
| 146 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 147 nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
| 148 nc_out: ERROR: Assignment to non-64 bit memory address |
| 149 |
| 150 hex: F0 67 01 04 24 |
| 151 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 152 nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
| 153 nc_out: ERROR: Assignment to non-64 bit memory address |
| 154 |
| 155 |
| 156 # Nop for bundle alignment. |
| 157 asm: nop |
| 158 hex: 90 |
| 159 |
| 160 |
| 161 # rep stos %eax, %es:(%edi) |
| 162 asm: mov %edi,%edi |
| 163 hex: 89 FF |
| 164 |
| 165 asm: lea (%r15,%rdi,1),%rdi |
| 166 hex: 49 8D 3C 3F |
| 167 |
| 168 asm: rep addr32 stos %eax,%es:(%edi) |
| 169 hex: 67 F3 AB |
| 170 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 171 nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
| 172 nc_out: ERROR: Assignment to non-64 bit segment address |
| 173 |
| 174 asm: mov %edi,%edi |
| 175 hex: 89 FF |
| 176 |
| 177 asm: lea (%r15,%rdi,1),%rdi |
| 178 hex: 49 8D 3C 3F |
| 179 |
| 180 hex: F3 67 AB |
| 181 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 182 nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
| 183 nc_out: ERROR: Assignment to non-64 bit segment address |
| 184 |
| 185 # lock add %rax, (%rsp) |
| 186 asm: lock add %rax,(%rsp) |
| 187 hex: f0 48 01 04 24 |
| 188 |
| 189 asm: rex.W; lock add %eax,(%rsp) |
| 190 hex: 48 f0 01 04 24 |
| 191 nc_out: ERROR: REX prefix byte must appear last |
| 192 |
| 193 # mov %edi,%edi |
| 194 # lea (%r15,%rdi),%rdi |
| 195 # rep stos %rax,%es:(%rdi) |
| 196 asm: mov %edi,%edi |
| 197 hex: 89 FF |
| 198 |
| 199 asm: lea (%r15,%rdi,1),%rdi |
| 200 hex: 49 8D 3C 3F |
| 201 |
| 202 asm: rep stos %rax,%es:(%rdi) |
| 203 hex: F3 48 AB |
| 204 |
| 205 # fs mov %ax,%ax |
| 206 asm: fs; mov %ax,%ax |
| 207 hex: 64 66 89 C0 |
| 208 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 209 nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
| 210 |
| 211 asm: data16; fs; mov %eax,%eax |
| 212 hex: 66 64 89 C0 |
| 213 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 214 nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
| 215 |
| 216 # fs add %eax, (%esp) |
| 217 hex: 67 64 01 04 24 |
| 218 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 219 nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
| 220 nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
| 221 nc_out: ERROR: Assignment to non-64 bit segment address |
| 222 |
| 223 asm: addr32 add %eax,%fs:(%esp) |
| 224 hex: 64 67 01 04 24 |
| 225 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 226 nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
| 227 nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
| 228 nc_out: ERROR: Assignment to non-64 bit segment address |
| 229 |
| 230 # fs mov %rax,%rax |
| 231 asm: fs; mov %rax,%rax |
| 232 hex: 64 48 89 C0 |
| 233 nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
| 234 |
| 235 asm: rex.W; fs; mov %eax,%eax |
| 236 hex: 48 64 89 C0 |
| 237 nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
| 238 nc_out: ERROR: REX prefix byte must appear last |
| 239 |
| 240 # add %ax, (%esp) |
| 241 hex: 66 67 01 04 24 |
| 242 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 243 nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
| 244 nc_out: ERROR: Assignment to non-64 bit memory address |
| 245 |
| 246 asm: addr32 add %ax,(%esp) |
| 247 hex: 67 66 01 04 24 |
| 248 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 249 nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
| 250 nc_out: ERROR: Assignment to non-64 bit memory address |
| 251 |
| 252 # mov %r15l, (%rsp) |
| 253 asm: mov %r15w,(%rsp) |
| 254 hex: 66 44 89 3C 24 |
| 255 |
| 256 asm: rex.R; mov %di,(%rsp) |
| 257 hex: 44 66 89 3C 24 |
| 258 nc_out: ERROR: REX prefix byte must appear last |
| 259 |
| 260 # mov %r15, (%esp) |
| 261 asm: addr32 mov %r15,(%esp) |
| 262 hex: 67 4C 89 3C 24 |
| 263 nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
| 264 nc_out: ERROR: Assignment to non-64 bit memory address |
| 265 |
| 266 asm: rex.WR; addr32 mov %edi,(%esp) |
| 267 hex: 4C 67 89 3C 24 |
| 268 nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
| 269 nc_out: ERROR: REX prefix byte must appear last |
| 270 nc_out: ERROR: Assignment to non-64 bit memory address |
| 271 |
| 272 |
| 273 # 2 prefixes when one is mandatory |
| 274 # fs phaddw %xmm0,%xmm1 |
| 275 asm: fs; phaddw %xmm0,%xmm1 |
| 276 hex: 64 66 0F 38 01 C8 |
| 277 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 278 nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
| 279 |
| 280 # fs addsd %xmm0,%xmm1 |
| 281 asm: fs; addsd %xmm0,%xmm1 |
| 282 hex: 64 F2 0F 58 C8 |
| 283 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 284 nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
| 285 |
| 286 # 0x66 phaddw %xmm0,%xmm1 |
| 287 hex: 66 66 0F 38 01 C8 |
| 288 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 289 nc_out: ERROR: Duplicating a prefix byte is not allowed by Native Client |
| 290 nc_out: [at +1] Bad basic block alignment. |
| 291 |
| 292 # 0x66 addsd %xmm0,%xmm1 |
| 293 asm: data16; addsd %xmm0,%xmm1 |
| 294 hex: 66 F2 0F 58 C8 |
| 295 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 296 nc_out: ERROR: Use of DATA16 (66) prefix for instruction not allowed by Native C
lient |
| 297 |
| 298 # phaddw (%esp), %xmm0 |
| 299 asm: addr32 phaddw (%esp),%xmm0 |
| 300 hex: 67 66 0f 38 01 04 24 |
| 301 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 302 nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
| 303 nc_out: ERROR: Assignment to non-64 bit memory address |
| 304 |
| 305 # addsd (%esp), %xmm0 |
| 306 asm: addr32 addsd (%esp),%xmm0 |
| 307 hex: 67 f2 0f 58 04 24 |
| 308 nc_out: ERROR: More than one (non-REX) prefix byte specified |
| 309 nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
| 310 nc_out: ERROR: Assignment to non-64 bit memory address |
| 311 |
| 312 # mov %eax,%eax |
| 313 # phaddw (%r15,%rax),%xmm0 |
| 314 asm: mov %eax,%eax |
| 315 hex: 89 C0 |
| 316 |
| 317 asm: phaddw (%r15,%rax,1),%xmm0 |
| 318 hex: 66 41 0F 38 01 04 07 |
| 319 |
| 320 asm: mov %eax,%eax |
| 321 hex: 89 C0 |
| 322 |
| 323 asm: rex.B; phaddw (%rdi,%rax,1),%xmm0 |
| 324 hex: 41 66 0F 38 01 04 07 |
| 325 nc_out: ERROR: REX prefix byte must appear last |
| 326 |
| 327 # mov %eax,%eax |
| 328 # addsd (%r15,%rax),%xmm0 |
| 329 asm: mov %eax,%eax |
| 330 hex: 89 C0 |
| 331 |
| 332 asm: addsd (%r15,%rax,1),%xmm0 |
| 333 hex: F2 41 0F 58 04 07 |
| 334 |
| 335 asm: mov %eax,%eax |
| 336 hex: 89 C0 |
| 337 |
| 338 asm: rex.B; addsd (%rdi,%rax,1),%xmm0 |
| 339 hex: 41 F2 0F 58 04 07 |
| 340 nc_out: ERROR: REX prefix byte must appear last |
| 341 |
OLD | NEW |