Add AVX instructions to the x86 configuration file.
Signed-off-by: Jan Bobek
---
x86.risu | 1362 ++
1 file changed, 1362 insertions(+)
diff --git a/x86.risu b/x86.risu
index 177979a..03ffc89 100644
--- a/x86.risu
+++ b/x86.risu
@@ -29,6 +29,12 @@ MOVD SSE2 011 d 1110 \
!constraints { data16($_); modrm($_); !(defined $_->{modrm}{reg2} &&
$_->{modrm}{reg2} == REG_RSP) } \
!memory { $d ? store(size => 4) : load(size => 4); }
+# VEX.128.66.0F.W0 6E /r: VMOVD xmm1,r32/m32
+# VEX.128.66.0F.W0 7E /r: VMOVD r32/m32,xmm1
+VMOVD AVX 011 d 1110 \
+ !constraints { vex($_, m => 0x0F, l => 128, v => 0, p => 0x66, w => 0);
modrm($_); !(defined $_->{modrm}{reg2} && $_->{modrm}{reg2} == REG_RSP) } \
+ !memory { $d ? store(size => 4) : load(size => 4); }
+
# NP REX.W + 0F 6E /r: MOVQ mm,r/m64
# NP REX.W + 0F 7E /r: MOVQ r/m64,mm
MOVQ MMX 011 d 1110 \
@@ -41,6 +47,12 @@ MOVQ SSE2 011 d 1110 \
!constraints { data16($_); rex($_, w => 1); modrm($_); !(defined
$_->{modrm}{reg2} && $_->{modrm}{reg2} == REG_RSP) } \
!memory { $d ? store(size => 8) : load(size => 8); }
+# VEX.128.66.0F.W1 6E /r: VMOVQ xmm1,r64/m64
+# VEX.128.66.0F.W1 7E /r: VMOVQ r64/m64,xmm1
+VMOVQ AVX 011 d 1110 \
+ !constraints { vex($_, m => 0x0F, l => 128, v => 0, p => 0x66, w => 1);
modrm($_); !(defined $_->{modrm}{reg2} && $_->{modrm}{reg2} == REG_RSP) } \
+ !memory { $d ? store(size => 8) : load(size => 8); }
+
# NP 0F 6F /r: MOVQ mm, mm/m64
# NP 0F 7F /r: MOVQ mm/m64, mm
MOVQ_mm MMX 011 d \
@@ -52,59 +64,121 @@ MOVQ_xmm1 SSE2 0110 \
!constraints { rep($_); modrm($_); 1 } \
!memory { load(size => 8); }
+# VEX.128.F3.0F.WIG 7E /r: VMOVQ xmm1, xmm2/m64
+VMOVQ_xmm1 AVX 0110 \
+ !constraints { vex($_, m => 0x0F, l => 128, v => 0, p => 0xF3); modrm($_); 1
} \
+ !memory { load(size => 8); }
+
# 66 0F D6 /r: MOVQ xmm2/m64, xmm1
MOVQ_xmm2 SSE2 11010110 \
!constraints { data16($_); modrm($_); 1 } \
!memory { store(size => 8); }
+# VEX.128.66.0F.WIG D6 /r: VMOVQ xmm1/m64, xmm2
+VMOVQ_xmm2 AVX 11010110 \
+ !constraints { vex($_, m => 0x0F, l => 128, v => 0, p => 0x66); modrm($_); 1
} \
+ !memory { store(size => 8); }
+
# NP 0F 28 /r: MOVAPS xmm1, xmm2/m128
# NP 0F 29 /r: MOVAPS xmm2/m128, xmm1
MOVAPS SSE 0010100 d \
!constraints { modrm($_); 1 } \
!memory { $d ? store(size => 16, align => 16) : load(size => 16, align =>
16); }
+# VEX.128.0F.WIG 28 /r: VMOVAPS xmm1, xmm2/m128
+# VEX.128.0F.WIG 29 /r: VMOVAPS xmm2/m128, xmm1
+VMOVAPS AVX 0010100 d \
+ !constraints { vex($_, m => 0x0F, l => 128, v => 0); modrm($_); 1 } \
+ !memory { $d ? store(size => 16, align => 16) : load(size => 16, align =>
16); }
+
# 66 0F 28 /r: MOVAPD xmm1, xmm2/m128
# 66 0F 29 /r: MOVAPD xmm2/m128, xmm1
MOVAPD SSE2 0010100 d \
!constraints { data16($_); modrm($_); 1 } \
!memory { $d ? store(size => 16, align => 16) : load(size => 16, align =>
16); }
+# VEX.128.66.0F.WIG 28 /r: VMOVAPD xmm1, xmm2/m128
+# VEX.128.66.0F.WIG 29 /r: VMOVAPD xmm2/m128, xmm1
+VMOVAPD AVX 0010100 d \
+ !constraints { vex($_, m => 0x0F, l => 128, v => 0, p => 0x66); modrm($_); 1
} \
+ !memory { $d ? store(size => 16, align => 16) : load(size => 16, align =>
16); }
+
# 66 0F 6F /r: MOVDQA xmm1, xmm2/m128
# 66 0F 7F /r: MOVDQA xmm2/m128, xmm1
MOVDQA SSE2 011 d \
!constraints { data16($_); modrm($_); 1 } \
!memory { $d ? store(size => 16, align => 16) : load(size => 16, align =>
16); }
+# VEX.128.66.0F.WIG 6F /r: VMOVDQA xmm1, xmm2/m128
+# VEX.128.66.0F.WIG 7F /r: VMOVDQA xmm2/m128, xmm1
+VMOVDQA AVX 011 d \
+ !constraints { vex($_, m => 0x0F, l => 128, v => 0, p => 0x66); modrm($_); 1
} \
+ !memory { $d ? store(size => 16, align => 16) : load(size => 16, align =>
16); }
+
# NP 0F 10 /r: MOVUPS xmm1, xmm2/m128
# NP 0F 11 /r: MOVUPS xmm2/m128, xmm1
MOVUPS SSE 0001000 d \
!constraints { modrm($_); 1 } \
!memory { $d ? store(size => 16) : load(size => 16); }
+# VEX.128.0F.WIG 10 /r: VMOVUPS xmm1, xmm2/m128
+# VEX.128.0F.WIG 11 /r: VMOVUPS xmm2/m128, xmm1
+VMOVUPS AVX 0001000 d \
+ !constraints { vex($_, m => 0x0F, l => 128, v => 0); modrm($_); 1 } \
+ !memory { $d ? store(size => 16) : load(size => 16); }
+
# 66 0F 10 /r: MOVUPD xmm1, xmm2/m128
# 66 0F 11 /r: MOVUPD xmm2/m128, xmm1
MOVUPD SSE2 0001000 d \
!constraints { data16($_); modrm($_); 1 } \
!memory { $d ? store(size => 16) : load(size => 16); }
+# VEX.128.66.0F.WIG 10 /r: VMOVUPD xmm1, xmm2/m128
+# VEX.128.66.0F.WIG 11 /r: VMOVUPD xmm2/m128, xmm1
+VMOVUPD AVX 0001000 d \
+ !constraints { vex($_, m => 0x0F, l => 128, v => 0, p => 0x66); modrm($_); 1
} \
+ !memory { $d ? store(size => 16) : load(size => 16); }
+
# F3 0F 6F /r: MOVDQU xmm1,xmm2/m128
# F3 0F 7F /r: MOVDQU xmm2/m128,xmm1
MOVDQU SSE2 011 d \
!constraints { rep($_); modrm($_); 1 } \
!m