Index: src/trusted/validator_x86/testdata/64/sse.tf |
diff --git a/src/trusted/validator_x86/testdata/64/sse.tf b/src/trusted/validator_x86/testdata/64/sse.tf |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b49f54a89f830d187e485eacef62759e04ffa2cb |
--- /dev/null |
+++ b/src/trusted/validator_x86/testdata/64/sse.tf |
@@ -0,0 +1,319 @@ |
+BITS: 64 |
+OUTCOME: invalid |
+ |
+# Test SSE instructions |
+# SSE |
+# addps %xmm0,%xmm1 |
+asm: addps %xmm0,%xmm1 |
+hex: 0f 58 c8 |
+ |
+# subss %xmm0,%xmm1 |
+asm: subss %xmm0,%xmm1 |
+hex: f3 0f 5c c8 |
+ |
+# pmaxsw %xmm0,%xmm1 |
+asm: pmaxsw %xmm0,%xmm1 |
+hex: 66 0f ee c8 |
+ |
+# pminub %xmm0,%xmm1 |
+asm: pminub %xmm0,%xmm1 |
+hex: 66 0f da c8 |
+ |
+# pinsrw $0x1,%eax,%xmm0 |
+asm: pinsrw $0x1,%eax,%xmm0 |
+hex: 66 0f c4 c0 01 |
+ |
+# pmovmskb %xmm0,%eax |
+asm: pmovmskb %xmm0,%eax |
+hex: 66 0f d7 c0 |
+ |
+# pmulhuw %xmm0,%xmm1 |
+asm: pmulhuw %xmm0,%xmm1 |
+hex: 66 0f e4 c8 |
+ |
+# comiss %xmm0,%xmm1 |
+asm: comiss %xmm0,%xmm1 |
+hex: 0f 2f c8 |
+ |
+ |
+# Nop for bundle alignment. |
+asm: nop |
+hex: 90 |
+ |
+ |
+# cvtps2pi %xmm1,%mm0 |
+asm: cvtps2pi %xmm1,%mm0 |
+hex: 0f 2d c1 |
+ |
+# ldmxcsr (%rsp) |
+asm: ldmxcsr (%rsp) |
+hex: 0f ae 14 24 |
+ |
+# stmxcsr (%rsp) |
+asm: stmxcsr (%rsp) |
+hex: 0f ae 1c 24 |
+ |
+# movaps %xmm0,%xmm1 |
+asm: movaps %xmm0,%xmm1 |
+hex: 0f 28 c8 |
+ |
+# movmskps %xmm1,%eax |
+asm: movmskps %xmm1,%eax |
+hex: 0f 50 c1 |
+ |
+# movntps %xmm0,(%rsp) |
+asm: movntps %xmm0,(%rsp) |
+hex: 0f 2b 04 24 |
+ |
+# shufps $0x1,%xmm0,%xmm1 |
+asm: shufps $0x1,%xmm0,%xmm1 |
+hex: 0f c6 c8 01 |
+ |
+# unpcklps %xmm0,%xmm1 |
+asm: unpcklps %xmm0,%xmm1 |
+hex: 0f 14 c8 |
+ |
+# sfence |
+asm: sfence |
+hex: 0f ae f8 |
+ |
+# prefetcht2 (%rsp) |
+asm: prefetcht2 (%rsp) |
+hex: 0f 18 1c 24 |
+nc_out: [at +1] Bad basic block alignment. |
+ |
+ |
+# SSE2 |
+# addpd %xmm0,%xmm1 |
+asm: addpd %xmm0,%xmm1 |
+hex: 66 0f 58 c8 |
+ |
+# maxsd %xmm0,%xmm1 |
+asm: maxsd %xmm0,%xmm1 |
+hex: f2 0f 5f c8 |
+ |
+# cmpeqpd %xmm0,%xmm1 |
+asm: cmpeqpd %xmm0,%xmm1 |
+hex: 66 0f c2 c8 00 |
+ |
+# comisd %xmm0,%xmm1 |
+asm: comisd %xmm0,%xmm1 |
+hex: 66 0f 2f c8 |
+ |
+# cvtpd2dq %xmm0,%xmm1 |
+asm: cvtpd2dq %xmm0,%xmm1 |
+hex: f2 0f e6 c8 |
+ |
+# movapd %xmm0,%xmm1 |
+asm: movapd %xmm0,%xmm1 |
+hex: 66 0f 28 c8 |
+ |
+# movmskpd %xmm0,%eax |
+asm: movmskpd %xmm0,%eax |
+hex: 66 0f 50 c0 |
+ |
+# shufpd $0x1,%xmm0,%xmm1 |
+asm: shufpd $0x1,%xmm0,%xmm1 |
+hex: 66 0f c6 c8 01 |
+ |
+# unpckhpd %xmm0,%xmm1 |
+asm: unpckhpd %xmm0,%xmm1 |
+hex: 66 0f 15 c8 |
+ |
+# movdq2q %xmm0,%mm1 |
+asm: movdq2q %xmm0,%mm1 |
+hex: f2 0f d6 c8 |
+ |
+# movdqa %xmm0,%xmm1 |
+asm: movdqa %xmm0,%xmm1 |
+hex: 66 0f 6f c8 |
+ |
+# paddq %xmm0,%xmm1 |
+asm: paddq %xmm0,%xmm1 |
+hex: 66 0f d4 c8 |
+ |
+# psrldq $0x1,%xmm0 |
+asm: psrldq $0x1,%xmm0 |
+hex: 66 0f 73 d8 01 |
+ |
+# pshufd $0x1,%xmm0,%xmm1 |
+asm: pshufd $0x1,%xmm0,%xmm1 |
+hex: 66 0f 70 c8 01 |
+ |
+ |
+# Nop for bundle alignment. |
+asm: nop |
+hex: 90 |
+ |
+ |
+# punpcklqdq %xmm0,%xmm1 |
+asm: punpcklqdq %xmm0,%xmm1 |
+hex: 66 0f 6c c8 |
+ |
+ |
+# SSE 3 |
+# addsubpd %xmm0,%xmm1 |
+asm: addsubpd %xmm0,%xmm1 |
+hex: 66 0f d0 c8 |
+ |
+# haddps %xmm0,%xmm1 |
+asm: haddps %xmm0,%xmm1 |
+hex: f2 0f 7c c8 |
+ |
+# movshdup %xmm0,%xmm1 |
+asm: movshdup %xmm0,%xmm1 |
+hex: f3 0f 16 c8 |
+ |
+ |
+# SSSE3 |
+# psignb %xmm0,%xmm1 |
+asm: psignb %xmm0,%xmm1 |
+hex: 66 0f 38 08 c8 |
+ |
+# pshufb %xmm0,%xmm1 |
+asm: pshufb %xmm0,%xmm1 |
+hex: 66 0f 38 00 c8 |
+ |
+# pmaddubsw %xmm0,%xmm1 |
+asm: pmaddubsw %xmm0,%xmm1 |
+hex: 66 0f 38 04 c8 |
+ |
+# phaddd %xmm0,%xmm1 |
+asm: phaddd %xmm0,%xmm1 |
+hex: 66 0f 38 02 c8 |
+nc_out: [at +1] Bad basic block alignment. |
+ |
+# palignr $0x1,%xmm0,%xmm1 |
+asm: palignr $0x1,%xmm0,%xmm1 |
+hex: 66 0f 3a 0f c8 01 |
+ |
+ |
+# SSE41 |
+# mpsadbw $0x1,%xmm0,%xmm1 |
+asm: mpsadbw $0x1,%xmm0,%xmm1 |
+hex: 66 0f 3a 42 c8 01 |
+ |
+# phminposuw %xmm0,%xmm1 |
+asm: phminposuw %xmm0,%xmm1 |
+hex: 66 0f 38 41 c8 |
+ |
+# dppd $0x1,%xmm0,%xmm1 |
+asm: dppd $0x1,%xmm0,%xmm1 |
+hex: 66 0f 3a 41 c8 01 |
+ |
+# blendvpd %xmm0,%xmm0,%xmm1 |
+asm: blendvpd %xmm0,%xmm0,%xmm1 |
+hex: 66 0f 38 15 c8 |
+ |
+# pmaxuw %xmm0,%xmm1 |
+asm: pmaxuw %xmm0,%xmm1 |
+hex: 66 0f 38 3e c8 |
+ |
+# insertps $0x1,%xmm0,%xmm1 |
+asm: insertps $0x1,%xmm0,%xmm1 |
+hex: 66 0f 3a 21 c8 01 |
+ |
+# pmovsxwq %xmm0,%xmm1 |
+asm: pmovsxwq %xmm0,%xmm1 |
+hex: 66 0f 38 24 c8 |
+ |
+# ptest %xmm0,%xmm1 |
+asm: ptest %xmm0,%xmm1 |
+hex: 66 0f 38 17 c8 |
+ |
+# packusdw %xmm0,%xmm1 |
+asm: packusdw %xmm0,%xmm1 |
+hex: 66 0f 38 2b c8 |
+ |
+# movntdqa (%rsp),%xmm0 |
+asm: movntdqa (%rsp),%xmm0 |
+hex: 66 0f 38 2a 04 24 |
+ |
+ |
+# SSE4a |
+# popcnt %rax,%rax |
+asm: popcnt %rax,%rax |
+hex: f3 48 0f b8 c0 |
+ |
+# lzcnt %rax,%rax |
+asm: lzcnt %rax,%rax |
+hex: f3 48 0f bd c0 |
+ |
+# extrq $0x1,$0x2,%xmm0 |
+asm: extrq $0x1,$0x2,%xmm0 |
+hex: 66 0f 78 c0 02 01 |
+nc_out: ERROR: This instruction has been marked illegal by Native Client |
+ |
+# movntss %xmm0,(%rsp) |
+asm: movntss %xmm0,(%rsp) |
+hex: f3 0f 2b 04 24 |
+ |
+ |
+# SSE42 |
+# crc32b %al,%rax |
+asm: crc32b %al,%rax |
+hex: f2 48 0f 38 f0 c0 |
+ |
+ |
+# Nops for bundle alignment. |
+asm: nop; nop; nop; nop; nop |
+hex: 90 90 90 90 90 |
+ |
+ |
+# pcmpistri $0x1,%xmm0,%xmm1 |
+asm: pcmpistri $0x1,%xmm0,%xmm1 |
+hex: 66 0f 3a 63 c8 01 |
+ |
+# pcmpgtq %xmm0,%xmm1 |
+asm: pcmpgtq %xmm0,%xmm1 |
+hex: 66 0f 38 37 c8 |
+ |
+ |
+# AVX FMA |
+# vfmaddpd %xmm0,%xmm1,%xmm2,%xmm3 |
+asm: vfmaddpd %xmm0,%xmm1,%xmm2,%xmm3 |
+hex: c4 e3 f1 69 d8 20 |
+nc_out: ERROR: This instruction has been marked illegal by Native Client |
+nc_out: ERROR: Opcode sequence doesn't define a valid x86 instruction |
+ |
+asm: nop; nop; nop |
+hex: 90 90 90 |
+ |
+ |
+# AES |
+# aesenc %xmm0,%xmm1 |
+asm: aesenc %xmm0,%xmm1 |
+hex: 66 0f 38 dc c8 |
+nc_out: ERROR: This instruction has been marked illegal by Native Client |
+nc_out: ERROR: Opcode sequence doesn't define a valid x86 instruction |
+nc_out: [at +4] ERROR: This instruction has been marked illegal by Native Client |
+nc_out: [at +4] ERROR: Illegal assignment to RSP |
+nc_out: [at +4] ERROR: Illegal change to register RBP |
+ |
+asm: nop; nop; nop |
+hex: 90 90 90 |
+ |
+# aeskeygenassist $0x1,%xmm0,%xmm1 |
+asm: aeskeygenassist $0x1,%xmm0,%xmm1 |
+hex: 66 0f 3a df c8 01 |
+nc_out: ERROR: Opcode sequence doesn't define a valid x86 instruction |
+nc_out: ERROR: Use of DATA16 (66) prefix for instruction not allowed by Native Client |
+nc_out: [at +4] ERROR: This instruction has been marked illegal by Native Client |
+nc_out: [at +4] ERROR: Illegal assignment to RSP |
+nc_out: [at +4] ERROR: Illegal change to register RBP |
+ |
+asm: nop; nop |
+hex: 90 90 |
+ |
+# aesimc %xmm0,%xmm1 |
+asm: aesimc %xmm0,%xmm1 |
+hex: 66 0f 38 db c8 |
+nc_out: ERROR: This instruction has been marked illegal by Native Client |
+nc_out: ERROR: Opcode sequence doesn't define a valid x86 instruction |
+nc_out: [at +4] ERROR: This instruction has been marked illegal by Native Client |
+nc_out: [at +4] ERROR: Illegal assignment to RSP |
+nc_out: [at +4] ERROR: Illegal change to register RBP |
+ |
+asm: nop; nop; nop |
+hex: 90 90 90 |
+ |