| #!/usr/bin/perl |
| %packed_insns = ( |
| 'vfmadd' => 0x98, |
| 'vfmaddsub' => 0x96, |
| 'vfmsubadd' => 0x97, |
| 'vfmsub' => 0x9a, |
| 'vfnmadd' => 0x9c, |
| 'vfnmsub' => 0x9e |
| ); |
| |
| %scalar_insns = ( |
| 'vfmadd' => 0x99, |
| 'vfmsub' => 0x9b, |
| 'vfnmadd' => 0x9d, |
| 'vfnmsub' => 0x9f |
| ); |
| |
| foreach $pi ( sort(keys(%packed_insns)) ) { |
| $op = $packed_insns{$pi}; |
| foreach $order ('132', '213', '231') { |
| $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'; |
| 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}"; |
| } |
| } |
| } |
| $op += 0x10; |
| } |
| } |
| |
| foreach $si ( sort(keys(%scalar_insns)) ) { |
| $op = $scalar_insns{$si}; |
| foreach $order ('132', '213', '231') { |
| $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 ? 'sd' : 'ss'; |
| $sx = $w ? 'SQ' : 'SD'; |
| $l = 128; |
| $mm = 'xmm'; |
| printf "%-15s %-31s %-8s%-39s %s\n", |
| "\U${si}${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}"; |
| } |
| } |
| $op += 0x10; |
| } |
| } |