Index: src/trusted/validator_x86/testdata/64/prefix-single.tf |
diff --git a/src/trusted/validator_x86/testdata/64/prefix-single.tf b/src/trusted/validator_x86/testdata/64/prefix-single.tf |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8fd341b6e849bca8e21c50892df6c130e4729427 |
--- /dev/null |
+++ b/src/trusted/validator_x86/testdata/64/prefix-single.tf |
@@ -0,0 +1,173 @@ |
+BITS: 64 |
+OUTCOME: invalid |
+ |
+# lock add %eax,(%rsp) |
+asm: lock add %eax,(%rsp) |
+hex: F0 01 04 24 |
+ |
+# mov %edi,%edi |
+# lea (%r15,%rdi),%rdi |
+# rep stos %eax,%es:(%rdi) |
+asm: mov %edi,%edi |
+hex: 89 FF |
+ |
+asm: lea (%r15,%rdi,1),%rdi |
+hex: 49 8D 3C 3F |
+ |
+asm: rep stos %eax,%es:(%rdi) |
+hex: F3 AB |
+ |
+# mov %edi,%edi |
+# lea (%r15,%rdi),%rdi |
+# repne scas %es:(%rdi),%al |
+asm: mov %edi,%edi |
+hex: 89 FF |
+ |
+asm: lea (%r15,%rdi,1),%rdi |
+hex: 49 8D 3C 3F |
+ |
+asm: repnz scas %es:(%rdi),%al |
+hex: F2 AE |
+ |
+# mov %ax, %ax |
+asm: mov %ax,%ax |
+hex: 66 89 C0 |
+ |
+# rex jmp $ |
+hex: 40 EB FD |
+ |
+# Branch prediction prefixes. (for jz). |
+hex: 2e 74 02 |
+ |
+hex: 3e 74 02 |
+nc_out: [at +2] Bad jump target |
+ |
+ |
+# Forbidden prefixes. |
+# rep push %eax |
+hex: F3 50 |
+nc_out: ERROR: Use of REP (F3) prefix for instruction not allowed by Native Client |
+ |
+# mov %edi,%edi |
+# lea (%r15,%rdi),%rdi |
+# repne stos %eax,%es:(%rdi) |
+asm: mov %edi,%edi |
+hex: 89 FF |
+ |
+asm: lea (%r15,%rdi,1),%rdi |
+hex: 49 8D 3C 3F |
+ |
+asm: repnz stos %eax,%es:(%rdi) |
+hex: F2 AB |
+nc_out: ERROR: Use of REPNE (F2) prefix for instruction not allowed by Native Client |
+ |
+# fs mov %eax,%eax |
+asm: fs; mov %eax,%eax |
+hex: 64 89 C0 |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+ |
+# gs mov %eax,%eax |
+asm: gs; mov %eax,%eax |
+hex: 65 89 C0 |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+ |
+# mov %eax,%cs:(%rsp) |
+asm: mov %eax,%cs:(%rsp) |
+hex: 2E 89 04 24 |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+ |
+# mov %eax,%ss:(%rsp) |
+hex: 36 89 04 24 |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+ |
+# mov %eax,%ds:(%rsp) |
+asm: mov %eax,%ds:(%rsp) |
+hex: 3E 89 04 24 |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+ |
+# mov %eax,%es:(%rsp) |
+asm: mov %eax,%es:(%rsp) |
+hex: 26 89 04 24 |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+ |
+# mov %eax,%fs:(%rsp) |
+asm: mov %eax,%fs:(%rsp) |
+hex: 64 89 04 24 |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+nc_out: ERROR: Segment memory reference not allowed |
+ |
+# mov %eax,%gs:(%rsp) |
+asm: mov %eax,%gs:(%rsp) |
+hex: 65 89 04 24 |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+nc_out: ERROR: Segment memory reference not allowed |
+ |
+# mov %eax,(%esp) |
+asm: addr32 mov %eax,(%esp) |
+hex: 67 89 04 24 |
+nc_out: ERROR: Use of 67 (ADDR16) prefix not allowed by Native Client |
+nc_out: ERROR: Assignment to non-64 bit memory address |
+ |
+# cs jmp $ |
+hex: 2E EB FD |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+ |
+# ss jmp $ |
+hex: 36 EB FD |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+ |
+# ds jmp $ |
+hex: 3E EB FD |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+ |
+# es jmp $ |
+hex: 26 EB FD |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+ |
+# fs jmp $ |
+hex: 64 EB FD |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+ |
+# gs jmp $ |
+hex: 65 EB FD |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+ |
+# jmp dword $ |
+hex: 66 EB FD |
+nc_out: ERROR: Use of DATA16 (66) prefix for instruction not allowed by Native Client |
+nc_out: [at +2] Bad basic block alignment. |
+ |
+# ss jz $ |
+hex: 36 74 02 |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+ |
+# fs jz $ |
+hex: 64 74 02 |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+nc_out: [at +2] Bad jump target |
+ |
+# gs jz $ |
+hex: 65 74 02 |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+nc_out: [at +2] Bad jump target |
+ |
+# es jz $ |
+hex: 26 74 02 |
+nc_out: ERROR: Uses a segment prefix byte not allowed by Native Client |
+nc_out: [at +2] Bad jump target |
+ |
+ |
+# Mandatory prefix. |
+# phaddw %xmm0,%xmm1 |
+asm: phaddw %xmm0,%xmm1 |
+hex: 66 0f 38 01 c8 |
+nc_out: [at +2] Bad jump target |
+ |
+# addsd %xmm0,%xmm1 |
+asm: addsd %xmm0,%xmm1 |
+hex: f2 0f 58 c8 |
+ |
+# cmpeqss %xmm0,%xmm1 |
+asm: cmpeqss %xmm0,%xmm1 |
+hex: f3 0f c2 c8 00 |
+ |