summaryrefslogtreecommitdiff
path: root/misc/genfma.pl
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@linux.intel.com>2009-03-17 16:13:10 -0700
committerH. Peter Anvin <hpa@linux.intel.com>2009-03-17 16:16:39 -0700
commitef72b03fb4338f98db41fc6e14307b9dbbb81a4a (patch)
treef991faea1a82d450744be3dee0e34ff00ba2fe47 /misc/genfma.pl
parentcdf42e675dd1164d2ee0409fd4dd1ab2eb17607c (diff)
downloadnasm-ef72b03fb4338f98db41fc6e14307b9dbbb81a4a.tar.gz
nasm-ef72b03fb4338f98db41fc6e14307b9dbbb81a4a.tar.bz2
nasm-ef72b03fb4338f98db41fc6e14307b9dbbb81a4a.zip
BR 2690688: add missing VFM instructions
The Perl script which auto-generated the VFM instructions had incorrectly conflated the VEX.W and VEX.L bits, with the result that only half the valid instructions were generated.
Diffstat (limited to 'misc/genfma.pl')
-rwxr-xr-xmisc/genfma.pl53
1 files changed, 29 insertions, 24 deletions
diff --git a/misc/genfma.pl b/misc/genfma.pl
index 09551ab..b1bb001 100755
--- a/misc/genfma.pl
+++ b/misc/genfma.pl
@@ -21,22 +21,25 @@ foreach $pi ( sort(keys(%packed_insns)) ) {
$xorder = substr($order,1,1).substr($order,0,1).substr($order,2,1);
foreach $o ($order, $xorder) {
for ($w = 0; $w < 2; $w++) {
- $suf = $w ? 'pd' : 'ps';
- $mm = $w ? 'ymm' : 'xmm';
- $sx = $w ? 'SY' : 'SO';
- $ww = $w ? 256 : 128;
- printf "%-15s %-31s %-47s %s\n",
- "\U${pi}${o}${suf}",
- "${mm}reg,${mm}reg,${mm}rm",
- sprintf("[rvm:\tvex.dds.%d.66.0f38.w%d %02x /r]",
- $ww, $w, $op),
- "FMA,FUTURE,${sx}";
- printf "%-15s %-31s %-47s %s\n",
- "\U${pi}${o}${suf}",
- "${mm}reg,${mm}rm",
- sprintf("[r+vm:\tvex.dds.%d.66.0f38.w%d %02x /r]",
- $ww, $w, $op),
- "FMA,FUTURE,${sx}";
+ $suf = $w ? 'pd' : 'ps';
+ for ($l = 128; $l <= 256; $l <<= 1) {
+ $sx = ($l == 256) ? 'SY' : 'SO';
+ $mm = ($l == 256) ? 'ymm' : 'xmm';
+ printf "%-15s %-31s %-8s%-39s %s\n",
+ "\U${pi}${o}${suf}",
+ "${mm}reg,${mm}reg,${mm}rm",
+ "[rvm:",
+ sprintf("vex.dds.%d.66.0f38.w%d %02x /r]",
+ $l, $w, $op),
+ "FMA,FUTURE,${sx}";
+ printf "%-15s %-31s %-8s%-39s %s\n",
+ "\U${pi}${o}${suf}",
+ "${mm}reg,${mm}rm",
+ "[r+vm:",
+ sprintf("vex.dds.%d.66.0f38.w%d %02x /r]",
+ $l, $w, $op),
+ "FMA,FUTURE,${sx}";
+ }
}
}
$op++;
@@ -50,20 +53,22 @@ foreach $si ( sort(keys(%scalar_insns)) ) {
foreach $o ($order, $xorder) {
for ($w = 0; $w < 2; $w++) {
$suf = $w ? 'sd' : 'ss';
- $mm = 'xmm';
$sx = $w ? 'SQ' : 'SD';
- $ww = 128;
- printf "%-15s %-31s %-47s %s\n",
+ $l = 128;
+ $mm = 'xmm';
+ printf "%-15s %-31s %-8s%-39s %s\n",
"\U${si}${o}${suf}",
"${mm}reg,${mm}reg,${mm}rm",
- sprintf("[rvm:\tvex.dds.%d.66.0f38.w%d %02x /r]",
- $ww, $w, $op),
+ '[rvm:',
+ sprintf("vex.dds.%d.66.0f38.w%d %02x /r]",
+ $l, $w, $op),
"FMA,FUTURE,${sx}";
- printf "%-15s %-31s %-47s %s\n",
+ printf "%-15s %-31s %-8s%-39s %s\n",
"\U${si}${o}${suf}",
"${mm}reg,${mm}rm",
- sprintf("[r+vm:\tvex.dds.%d.66.0f38.w%d %02x /r]",
- $ww, $w, $op),
+ '[r+vm:',
+ sprintf("vex.dds.%d.66.0f38.w%d %02x /r]",
+ $l, $w, $op),
"FMA,FUTURE,${sx}";
}
}