summaryrefslogtreecommitdiff
path: root/src/liblink/asm6.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/liblink/asm6.c')
-rw-r--r--src/liblink/asm6.c1672
1 files changed, 849 insertions, 823 deletions
diff --git a/src/liblink/asm6.c b/src/liblink/asm6.c
index 66afc7a12..428eb9442 100644
--- a/src/liblink/asm6.c
+++ b/src/liblink/asm6.c
@@ -35,7 +35,7 @@
#include <bio.h>
#include <link.h>
#include "../cmd/6l/6.out.h"
-#include "../pkg/runtime/stack.h"
+#include "../runtime/stack.h"
enum
{
@@ -60,8 +60,6 @@ enum
FuncAlign = 16
};
-extern char *anames6[];
-
typedef struct Optab Optab;
typedef struct Movtab Movtab;
@@ -187,7 +185,7 @@ enum
Maxand = 10, /* in -a output width of the byte codes */
};
-static char ycover[Ymax*Ymax];
+static uchar ycover[Ymax*Ymax];
static int reg[D_NONE];
static int regrex[D_NONE+1];
static void asmins(Link *ctxt, Prog *p);
@@ -821,722 +819,735 @@ static uchar yaes2[] =
* encoded addressing mode for the Yml arg), and then a single immediate byte.
* Zilo_m is the same but a long (32-bit) immediate.
*/
-Optab optab[] =
+static Optab optab[] =
/* as, ytab, andproto, opcode */
{
{ AXXX },
- { AAAA, ynone, P32, 0x37 },
- { AAAD, ynone, P32, 0xd5,0x0a },
- { AAAM, ynone, P32, 0xd4,0x0a },
- { AAAS, ynone, P32, 0x3f },
- { AADCB, yxorb, Pb, 0x14,0x80,(02),0x10,0x10 },
- { AADCL, yxorl, Px, 0x83,(02),0x15,0x81,(02),0x11,0x13 },
- { AADCQ, yxorl, Pw, 0x83,(02),0x15,0x81,(02),0x11,0x13 },
- { AADCW, yxorl, Pe, 0x83,(02),0x15,0x81,(02),0x11,0x13 },
- { AADDB, yxorb, Pb, 0x04,0x80,(00),0x00,0x02 },
- { AADDL, yaddl, Px, 0x83,(00),0x05,0x81,(00),0x01,0x03 },
- { AADDPD, yxm, Pq, 0x58 },
- { AADDPS, yxm, Pm, 0x58 },
- { AADDQ, yaddl, Pw, 0x83,(00),0x05,0x81,(00),0x01,0x03 },
- { AADDSD, yxm, Pf2, 0x58 },
- { AADDSS, yxm, Pf3, 0x58 },
- { AADDW, yaddl, Pe, 0x83,(00),0x05,0x81,(00),0x01,0x03 },
+ { AAAA, ynone, P32, {0x37} },
+ { AAAD, ynone, P32, {0xd5,0x0a} },
+ { AAAM, ynone, P32, {0xd4,0x0a} },
+ { AAAS, ynone, P32, {0x3f} },
+ { AADCB, yxorb, Pb, {0x14,0x80,(02),0x10,0x10} },
+ { AADCL, yxorl, Px, {0x83,(02),0x15,0x81,(02),0x11,0x13} },
+ { AADCQ, yxorl, Pw, {0x83,(02),0x15,0x81,(02),0x11,0x13} },
+ { AADCW, yxorl, Pe, {0x83,(02),0x15,0x81,(02),0x11,0x13} },
+ { AADDB, yxorb, Pb, {0x04,0x80,(00),0x00,0x02} },
+ { AADDL, yaddl, Px, {0x83,(00),0x05,0x81,(00),0x01,0x03} },
+ { AADDPD, yxm, Pq, {0x58} },
+ { AADDPS, yxm, Pm, {0x58} },
+ { AADDQ, yaddl, Pw, {0x83,(00),0x05,0x81,(00),0x01,0x03} },
+ { AADDSD, yxm, Pf2, {0x58} },
+ { AADDSS, yxm, Pf3, {0x58} },
+ { AADDW, yaddl, Pe, {0x83,(00),0x05,0x81,(00),0x01,0x03} },
{ AADJSP },
- { AANDB, yxorb, Pb, 0x24,0x80,(04),0x20,0x22 },
- { AANDL, yxorl, Px, 0x83,(04),0x25,0x81,(04),0x21,0x23 },
- { AANDNPD, yxm, Pq, 0x55 },
- { AANDNPS, yxm, Pm, 0x55 },
- { AANDPD, yxm, Pq, 0x54 },
- { AANDPS, yxm, Pq, 0x54 },
- { AANDQ, yxorl, Pw, 0x83,(04),0x25,0x81,(04),0x21,0x23 },
- { AANDW, yxorl, Pe, 0x83,(04),0x25,0x81,(04),0x21,0x23 },
- { AARPL, yrl_ml, P32, 0x63 },
- { ABOUNDL, yrl_m, P32, 0x62 },
- { ABOUNDW, yrl_m, Pe, 0x62 },
- { ABSFL, yml_rl, Pm, 0xbc },
- { ABSFQ, yml_rl, Pw, 0x0f,0xbc },
- { ABSFW, yml_rl, Pq, 0xbc },
- { ABSRL, yml_rl, Pm, 0xbd },
- { ABSRQ, yml_rl, Pw, 0x0f,0xbd },
- { ABSRW, yml_rl, Pq, 0xbd },
- { ABSWAPL, ybswap, Px, 0x0f,0xc8 },
- { ABSWAPQ, ybswap, Pw, 0x0f,0xc8 },
- { ABTCL, ybtl, Pm, 0xba,(07),0xbb },
- { ABTCQ, ybtl, Pw, 0x0f,0xba,(07),0x0f,0xbb },
- { ABTCW, ybtl, Pq, 0xba,(07),0xbb },
- { ABTL, ybtl, Pm, 0xba,(04),0xa3 },
- { ABTQ, ybtl, Pw, 0x0f,0xba,(04),0x0f,0xa3},
- { ABTRL, ybtl, Pm, 0xba,(06),0xb3 },
- { ABTRQ, ybtl, Pw, 0x0f,0xba,(06),0x0f,0xb3 },
- { ABTRW, ybtl, Pq, 0xba,(06),0xb3 },
- { ABTSL, ybtl, Pm, 0xba,(05),0xab },
- { ABTSQ, ybtl, Pw, 0x0f,0xba,(05),0x0f,0xab },
- { ABTSW, ybtl, Pq, 0xba,(05),0xab },
- { ABTW, ybtl, Pq, 0xba,(04),0xa3 },
- { ABYTE, ybyte, Px, 1 },
- { ACALL, ycall, Px, 0xff,(02),0xe8 },
- { ACDQ, ynone, Px, 0x99 },
- { ACLC, ynone, Px, 0xf8 },
- { ACLD, ynone, Px, 0xfc },
- { ACLI, ynone, Px, 0xfa },
- { ACLTS, ynone, Pm, 0x06 },
- { ACMC, ynone, Px, 0xf5 },
- { ACMOVLCC, yml_rl, Pm, 0x43 },
- { ACMOVLCS, yml_rl, Pm, 0x42 },
- { ACMOVLEQ, yml_rl, Pm, 0x44 },
- { ACMOVLGE, yml_rl, Pm, 0x4d },
- { ACMOVLGT, yml_rl, Pm, 0x4f },
- { ACMOVLHI, yml_rl, Pm, 0x47 },
- { ACMOVLLE, yml_rl, Pm, 0x4e },
- { ACMOVLLS, yml_rl, Pm, 0x46 },
- { ACMOVLLT, yml_rl, Pm, 0x4c },
- { ACMOVLMI, yml_rl, Pm, 0x48 },
- { ACMOVLNE, yml_rl, Pm, 0x45 },
- { ACMOVLOC, yml_rl, Pm, 0x41 },
- { ACMOVLOS, yml_rl, Pm, 0x40 },
- { ACMOVLPC, yml_rl, Pm, 0x4b },
- { ACMOVLPL, yml_rl, Pm, 0x49 },
- { ACMOVLPS, yml_rl, Pm, 0x4a },
- { ACMOVQCC, yml_rl, Pw, 0x0f,0x43 },
- { ACMOVQCS, yml_rl, Pw, 0x0f,0x42 },
- { ACMOVQEQ, yml_rl, Pw, 0x0f,0x44 },
- { ACMOVQGE, yml_rl, Pw, 0x0f,0x4d },
- { ACMOVQGT, yml_rl, Pw, 0x0f,0x4f },
- { ACMOVQHI, yml_rl, Pw, 0x0f,0x47 },
- { ACMOVQLE, yml_rl, Pw, 0x0f,0x4e },
- { ACMOVQLS, yml_rl, Pw, 0x0f,0x46 },
- { ACMOVQLT, yml_rl, Pw, 0x0f,0x4c },
- { ACMOVQMI, yml_rl, Pw, 0x0f,0x48 },
- { ACMOVQNE, yml_rl, Pw, 0x0f,0x45 },
- { ACMOVQOC, yml_rl, Pw, 0x0f,0x41 },
- { ACMOVQOS, yml_rl, Pw, 0x0f,0x40 },
- { ACMOVQPC, yml_rl, Pw, 0x0f,0x4b },
- { ACMOVQPL, yml_rl, Pw, 0x0f,0x49 },
- { ACMOVQPS, yml_rl, Pw, 0x0f,0x4a },
- { ACMOVWCC, yml_rl, Pq, 0x43 },
- { ACMOVWCS, yml_rl, Pq, 0x42 },
- { ACMOVWEQ, yml_rl, Pq, 0x44 },
- { ACMOVWGE, yml_rl, Pq, 0x4d },
- { ACMOVWGT, yml_rl, Pq, 0x4f },
- { ACMOVWHI, yml_rl, Pq, 0x47 },
- { ACMOVWLE, yml_rl, Pq, 0x4e },
- { ACMOVWLS, yml_rl, Pq, 0x46 },
- { ACMOVWLT, yml_rl, Pq, 0x4c },
- { ACMOVWMI, yml_rl, Pq, 0x48 },
- { ACMOVWNE, yml_rl, Pq, 0x45 },
- { ACMOVWOC, yml_rl, Pq, 0x41 },
- { ACMOVWOS, yml_rl, Pq, 0x40 },
- { ACMOVWPC, yml_rl, Pq, 0x4b },
- { ACMOVWPL, yml_rl, Pq, 0x49 },
- { ACMOVWPS, yml_rl, Pq, 0x4a },
- { ACMPB, ycmpb, Pb, 0x3c,0x80,(07),0x38,0x3a },
- { ACMPL, ycmpl, Px, 0x83,(07),0x3d,0x81,(07),0x39,0x3b },
- { ACMPPD, yxcmpi, Px, Pe,0xc2 },
- { ACMPPS, yxcmpi, Pm, 0xc2,0 },
- { ACMPQ, ycmpl, Pw, 0x83,(07),0x3d,0x81,(07),0x39,0x3b },
- { ACMPSB, ynone, Pb, 0xa6 },
- { ACMPSD, yxcmpi, Px, Pf2,0xc2 },
- { ACMPSL, ynone, Px, 0xa7 },
- { ACMPSQ, ynone, Pw, 0xa7 },
- { ACMPSS, yxcmpi, Px, Pf3,0xc2 },
- { ACMPSW, ynone, Pe, 0xa7 },
- { ACMPW, ycmpl, Pe, 0x83,(07),0x3d,0x81,(07),0x39,0x3b },
- { ACOMISD, yxcmp, Pe, 0x2f },
- { ACOMISS, yxcmp, Pm, 0x2f },
- { ACPUID, ynone, Pm, 0xa2 },
- { ACVTPL2PD, yxcvm2, Px, Pf3,0xe6,Pe,0x2a },
- { ACVTPL2PS, yxcvm2, Pm, 0x5b,0,0x2a,0, },
- { ACVTPD2PL, yxcvm1, Px, Pf2,0xe6,Pe,0x2d },
- { ACVTPD2PS, yxm, Pe, 0x5a },
- { ACVTPS2PL, yxcvm1, Px, Pe,0x5b,Pm,0x2d },
- { ACVTPS2PD, yxm, Pm, 0x5a },
- { API2FW, ymfp, Px, 0x0c },
- { ACVTSD2SL, yxcvfl, Pf2, 0x2d },
- { ACVTSD2SQ, yxcvfq, Pw, Pf2,0x2d },
- { ACVTSD2SS, yxm, Pf2, 0x5a },
- { ACVTSL2SD, yxcvlf, Pf2, 0x2a },
- { ACVTSQ2SD, yxcvqf, Pw, Pf2,0x2a },
- { ACVTSL2SS, yxcvlf, Pf3, 0x2a },
- { ACVTSQ2SS, yxcvqf, Pw, Pf3,0x2a },
- { ACVTSS2SD, yxm, Pf3, 0x5a },
- { ACVTSS2SL, yxcvfl, Pf3, 0x2d },
- { ACVTSS2SQ, yxcvfq, Pw, Pf3,0x2d },
- { ACVTTPD2PL, yxcvm1, Px, Pe,0xe6,Pe,0x2c },
- { ACVTTPS2PL, yxcvm1, Px, Pf3,0x5b,Pm,0x2c },
- { ACVTTSD2SL, yxcvfl, Pf2, 0x2c },
- { ACVTTSD2SQ, yxcvfq, Pw, Pf2,0x2c },
- { ACVTTSS2SL, yxcvfl, Pf3, 0x2c },
- { ACVTTSS2SQ, yxcvfq, Pw, Pf3,0x2c },
- { ACWD, ynone, Pe, 0x99 },
- { ACQO, ynone, Pw, 0x99 },
- { ADAA, ynone, P32, 0x27 },
- { ADAS, ynone, P32, 0x2f },
+ { AANDB, yxorb, Pb, {0x24,0x80,(04),0x20,0x22} },
+ { AANDL, yxorl, Px, {0x83,(04),0x25,0x81,(04),0x21,0x23} },
+ { AANDNPD, yxm, Pq, {0x55} },
+ { AANDNPS, yxm, Pm, {0x55} },
+ { AANDPD, yxm, Pq, {0x54} },
+ { AANDPS, yxm, Pq, {0x54} },
+ { AANDQ, yxorl, Pw, {0x83,(04),0x25,0x81,(04),0x21,0x23} },
+ { AANDW, yxorl, Pe, {0x83,(04),0x25,0x81,(04),0x21,0x23} },
+ { AARPL, yrl_ml, P32, {0x63} },
+ { ABOUNDL, yrl_m, P32, {0x62} },
+ { ABOUNDW, yrl_m, Pe, {0x62} },
+ { ABSFL, yml_rl, Pm, {0xbc} },
+ { ABSFQ, yml_rl, Pw, {0x0f,0xbc} },
+ { ABSFW, yml_rl, Pq, {0xbc} },
+ { ABSRL, yml_rl, Pm, {0xbd} },
+ { ABSRQ, yml_rl, Pw, {0x0f,0xbd} },
+ { ABSRW, yml_rl, Pq, {0xbd} },
+ { ABSWAPL, ybswap, Px, {0x0f,0xc8} },
+ { ABSWAPQ, ybswap, Pw, {0x0f,0xc8} },
+ { ABTCL, ybtl, Pm, {0xba,(07),0xbb} },
+ { ABTCQ, ybtl, Pw, {0x0f,0xba,(07),0x0f,0xbb} },
+ { ABTCW, ybtl, Pq, {0xba,(07),0xbb} },
+ { ABTL, ybtl, Pm, {0xba,(04),0xa3} },
+ { ABTQ, ybtl, Pw, {0x0f,0xba,(04),0x0f,0xa3}},
+ { ABTRL, ybtl, Pm, {0xba,(06),0xb3} },
+ { ABTRQ, ybtl, Pw, {0x0f,0xba,(06),0x0f,0xb3} },
+ { ABTRW, ybtl, Pq, {0xba,(06),0xb3} },
+ { ABTSL, ybtl, Pm, {0xba,(05),0xab } },
+ { ABTSQ, ybtl, Pw, {0x0f,0xba,(05),0x0f,0xab} },
+ { ABTSW, ybtl, Pq, {0xba,(05),0xab } },
+ { ABTW, ybtl, Pq, {0xba,(04),0xa3} },
+ { ABYTE, ybyte, Px, {1} },
+ { ACALL, ycall, Px, {0xff,(02),0xe8} },
+ { ACDQ, ynone, Px, {0x99} },
+ { ACLC, ynone, Px, {0xf8} },
+ { ACLD, ynone, Px, {0xfc} },
+ { ACLI, ynone, Px, {0xfa} },
+ { ACLTS, ynone, Pm, {0x06} },
+ { ACMC, ynone, Px, {0xf5} },
+ { ACMOVLCC, yml_rl, Pm, {0x43} },
+ { ACMOVLCS, yml_rl, Pm, {0x42} },
+ { ACMOVLEQ, yml_rl, Pm, {0x44} },
+ { ACMOVLGE, yml_rl, Pm, {0x4d} },
+ { ACMOVLGT, yml_rl, Pm, {0x4f} },
+ { ACMOVLHI, yml_rl, Pm, {0x47} },
+ { ACMOVLLE, yml_rl, Pm, {0x4e} },
+ { ACMOVLLS, yml_rl, Pm, {0x46} },
+ { ACMOVLLT, yml_rl, Pm, {0x4c} },
+ { ACMOVLMI, yml_rl, Pm, {0x48} },
+ { ACMOVLNE, yml_rl, Pm, {0x45} },
+ { ACMOVLOC, yml_rl, Pm, {0x41} },
+ { ACMOVLOS, yml_rl, Pm, {0x40} },
+ { ACMOVLPC, yml_rl, Pm, {0x4b} },
+ { ACMOVLPL, yml_rl, Pm, {0x49} },
+ { ACMOVLPS, yml_rl, Pm, {0x4a} },
+ { ACMOVQCC, yml_rl, Pw, {0x0f,0x43} },
+ { ACMOVQCS, yml_rl, Pw, {0x0f,0x42} },
+ { ACMOVQEQ, yml_rl, Pw, {0x0f,0x44} },
+ { ACMOVQGE, yml_rl, Pw, {0x0f,0x4d} },
+ { ACMOVQGT, yml_rl, Pw, {0x0f,0x4f} },
+ { ACMOVQHI, yml_rl, Pw, {0x0f,0x47} },
+ { ACMOVQLE, yml_rl, Pw, {0x0f,0x4e} },
+ { ACMOVQLS, yml_rl, Pw, {0x0f,0x46} },
+ { ACMOVQLT, yml_rl, Pw, {0x0f,0x4c} },
+ { ACMOVQMI, yml_rl, Pw, {0x0f,0x48} },
+ { ACMOVQNE, yml_rl, Pw, {0x0f,0x45} },
+ { ACMOVQOC, yml_rl, Pw, {0x0f,0x41} },
+ { ACMOVQOS, yml_rl, Pw, {0x0f,0x40} },
+ { ACMOVQPC, yml_rl, Pw, {0x0f,0x4b} },
+ { ACMOVQPL, yml_rl, Pw, {0x0f,0x49} },
+ { ACMOVQPS, yml_rl, Pw, {0x0f,0x4a} },
+ { ACMOVWCC, yml_rl, Pq, {0x43} },
+ { ACMOVWCS, yml_rl, Pq, {0x42} },
+ { ACMOVWEQ, yml_rl, Pq, {0x44} },
+ { ACMOVWGE, yml_rl, Pq, {0x4d} },
+ { ACMOVWGT, yml_rl, Pq, {0x4f} },
+ { ACMOVWHI, yml_rl, Pq, {0x47} },
+ { ACMOVWLE, yml_rl, Pq, {0x4e} },
+ { ACMOVWLS, yml_rl, Pq, {0x46} },
+ { ACMOVWLT, yml_rl, Pq, {0x4c} },
+ { ACMOVWMI, yml_rl, Pq, {0x48} },
+ { ACMOVWNE, yml_rl, Pq, {0x45} },
+ { ACMOVWOC, yml_rl, Pq, {0x41} },
+ { ACMOVWOS, yml_rl, Pq, {0x40} },
+ { ACMOVWPC, yml_rl, Pq, {0x4b} },
+ { ACMOVWPL, yml_rl, Pq, {0x49} },
+ { ACMOVWPS, yml_rl, Pq, {0x4a} },
+ { ACMPB, ycmpb, Pb, {0x3c,0x80,(07),0x38,0x3a} },
+ { ACMPL, ycmpl, Px, {0x83,(07),0x3d,0x81,(07),0x39,0x3b} },
+ { ACMPPD, yxcmpi, Px, {Pe,0xc2} },
+ { ACMPPS, yxcmpi, Pm, {0xc2,0} },
+ { ACMPQ, ycmpl, Pw, {0x83,(07),0x3d,0x81,(07),0x39,0x3b} },
+ { ACMPSB, ynone, Pb, {0xa6} },
+ { ACMPSD, yxcmpi, Px, {Pf2,0xc2} },
+ { ACMPSL, ynone, Px, {0xa7} },
+ { ACMPSQ, ynone, Pw, {0xa7} },
+ { ACMPSS, yxcmpi, Px, {Pf3,0xc2} },
+ { ACMPSW, ynone, Pe, {0xa7} },
+ { ACMPW, ycmpl, Pe, {0x83,(07),0x3d,0x81,(07),0x39,0x3b} },
+ { ACOMISD, yxcmp, Pe, {0x2f} },
+ { ACOMISS, yxcmp, Pm, {0x2f} },
+ { ACPUID, ynone, Pm, {0xa2} },
+ { ACVTPL2PD, yxcvm2, Px, {Pf3,0xe6,Pe,0x2a} },
+ { ACVTPL2PS, yxcvm2, Pm, {0x5b,0,0x2a,0,} },
+ { ACVTPD2PL, yxcvm1, Px, {Pf2,0xe6,Pe,0x2d} },
+ { ACVTPD2PS, yxm, Pe, {0x5a} },
+ { ACVTPS2PL, yxcvm1, Px, {Pe,0x5b,Pm,0x2d} },
+ { ACVTPS2PD, yxm, Pm, {0x5a} },
+ { API2FW, ymfp, Px, {0x0c} },
+ { ACVTSD2SL, yxcvfl, Pf2, {0x2d} },
+ { ACVTSD2SQ, yxcvfq, Pw, {Pf2,0x2d} },
+ { ACVTSD2SS, yxm, Pf2, {0x5a} },
+ { ACVTSL2SD, yxcvlf, Pf2, {0x2a} },
+ { ACVTSQ2SD, yxcvqf, Pw, {Pf2,0x2a} },
+ { ACVTSL2SS, yxcvlf, Pf3, {0x2a} },
+ { ACVTSQ2SS, yxcvqf, Pw, {Pf3,0x2a} },
+ { ACVTSS2SD, yxm, Pf3, {0x5a} },
+ { ACVTSS2SL, yxcvfl, Pf3, {0x2d} },
+ { ACVTSS2SQ, yxcvfq, Pw, {Pf3,0x2d} },
+ { ACVTTPD2PL, yxcvm1, Px, {Pe,0xe6,Pe,0x2c} },
+ { ACVTTPS2PL, yxcvm1, Px, {Pf3,0x5b,Pm,0x2c} },
+ { ACVTTSD2SL, yxcvfl, Pf2, {0x2c} },
+ { ACVTTSD2SQ, yxcvfq, Pw, {Pf2,0x2c} },
+ { ACVTTSS2SL, yxcvfl, Pf3, {0x2c} },
+ { ACVTTSS2SQ, yxcvfq, Pw, {Pf3,0x2c} },
+ { ACWD, ynone, Pe, {0x99} },
+ { ACQO, ynone, Pw, {0x99} },
+ { ADAA, ynone, P32, {0x27} },
+ { ADAS, ynone, P32, {0x2f} },
{ ADATA },
- { ADECB, yincb, Pb, 0xfe,(01) },
- { ADECL, yincl, Px, 0xff,(01) },
- { ADECQ, yincl, Pw, 0xff,(01) },
- { ADECW, yincw, Pe, 0xff,(01) },
- { ADIVB, ydivb, Pb, 0xf6,(06) },
- { ADIVL, ydivl, Px, 0xf7,(06) },
- { ADIVPD, yxm, Pe, 0x5e },
- { ADIVPS, yxm, Pm, 0x5e },
- { ADIVQ, ydivl, Pw, 0xf7,(06) },
- { ADIVSD, yxm, Pf2, 0x5e },
- { ADIVSS, yxm, Pf3, 0x5e },
- { ADIVW, ydivl, Pe, 0xf7,(06) },
- { AEMMS, ynone, Pm, 0x77 },
+ { ADECB, yincb, Pb, {0xfe,(01)} },
+ { ADECL, yincl, Px, {0xff,(01)} },
+ { ADECQ, yincl, Pw, {0xff,(01)} },
+ { ADECW, yincw, Pe, {0xff,(01)} },
+ { ADIVB, ydivb, Pb, {0xf6,(06)} },
+ { ADIVL, ydivl, Px, {0xf7,(06)} },
+ { ADIVPD, yxm, Pe, {0x5e} },
+ { ADIVPS, yxm, Pm, {0x5e} },
+ { ADIVQ, ydivl, Pw, {0xf7,(06)} },
+ { ADIVSD, yxm, Pf2, {0x5e} },
+ { ADIVSS, yxm, Pf3, {0x5e} },
+ { ADIVW, ydivl, Pe, {0xf7,(06)} },
+ { AEMMS, ynone, Pm, {0x77} },
{ AENTER }, /* botch */
- { AFXRSTOR, ysvrs, Pm, 0xae,(01),0xae,(01) },
- { AFXSAVE, ysvrs, Pm, 0xae,(00),0xae,(00) },
- { AFXRSTOR64, ysvrs, Pw, 0x0f,0xae,(01),0x0f,0xae,(01) },
- { AFXSAVE64, ysvrs, Pw, 0x0f,0xae,(00),0x0f,0xae,(00) },
+ { AFXRSTOR, ysvrs, Pm, {0xae,(01),0xae,(01)} },
+ { AFXSAVE, ysvrs, Pm, {0xae,(00),0xae,(00)} },
+ { AFXRSTOR64, ysvrs, Pw, {0x0f,0xae,(01),0x0f,0xae,(01)} },
+ { AFXSAVE64, ysvrs, Pw, {0x0f,0xae,(00),0x0f,0xae,(00)} },
{ AGLOBL },
{ AGOK },
{ AHISTORY },
- { AHLT, ynone, Px, 0xf4 },
- { AIDIVB, ydivb, Pb, 0xf6,(07) },
- { AIDIVL, ydivl, Px, 0xf7,(07) },
- { AIDIVQ, ydivl, Pw, 0xf7,(07) },
- { AIDIVW, ydivl, Pe, 0xf7,(07) },
- { AIMULB, ydivb, Pb, 0xf6,(05) },
- { AIMULL, yimul, Px, 0xf7,(05),0x6b,0x69,Pm,0xaf },
- { AIMULQ, yimul, Pw, 0xf7,(05),0x6b,0x69,Pm,0xaf },
- { AIMULW, yimul, Pe, 0xf7,(05),0x6b,0x69,Pm,0xaf },
- { AIMUL3Q, yimul3, Pw, 0x6b,(00) },
- { AINB, yin, Pb, 0xe4,0xec },
- { AINCB, yincb, Pb, 0xfe,(00) },
- { AINCL, yincl, Px, 0xff,(00) },
- { AINCQ, yincl, Pw, 0xff,(00) },
- { AINCW, yincw, Pe, 0xff,(00) },
- { AINL, yin, Px, 0xe5,0xed },
- { AINSB, ynone, Pb, 0x6c },
- { AINSL, ynone, Px, 0x6d },
- { AINSW, ynone, Pe, 0x6d },
- { AINT, yint, Px, 0xcd },
- { AINTO, ynone, P32, 0xce },
- { AINW, yin, Pe, 0xe5,0xed },
- { AIRETL, ynone, Px, 0xcf },
- { AIRETQ, ynone, Pw, 0xcf },
- { AIRETW, ynone, Pe, 0xcf },
- { AJCC, yjcond, Px, 0x73,0x83,(00) },
- { AJCS, yjcond, Px, 0x72,0x82 },
- { AJCXZL, yloop, Px, 0xe3 },
- { AJCXZQ, yloop, Px, 0xe3 },
- { AJEQ, yjcond, Px, 0x74,0x84 },
- { AJGE, yjcond, Px, 0x7d,0x8d },
- { AJGT, yjcond, Px, 0x7f,0x8f },
- { AJHI, yjcond, Px, 0x77,0x87 },
- { AJLE, yjcond, Px, 0x7e,0x8e },
- { AJLS, yjcond, Px, 0x76,0x86 },
- { AJLT, yjcond, Px, 0x7c,0x8c },
- { AJMI, yjcond, Px, 0x78,0x88 },
- { AJMP, yjmp, Px, 0xff,(04),0xeb,0xe9 },
- { AJNE, yjcond, Px, 0x75,0x85 },
- { AJOC, yjcond, Px, 0x71,0x81,(00) },
- { AJOS, yjcond, Px, 0x70,0x80,(00) },
- { AJPC, yjcond, Px, 0x7b,0x8b },
- { AJPL, yjcond, Px, 0x79,0x89 },
- { AJPS, yjcond, Px, 0x7a,0x8a },
- { ALAHF, ynone, Px, 0x9f },
- { ALARL, yml_rl, Pm, 0x02 },
- { ALARW, yml_rl, Pq, 0x02 },
- { ALDMXCSR, ysvrs, Pm, 0xae,(02),0xae,(02) },
- { ALEAL, ym_rl, Px, 0x8d },
- { ALEAQ, ym_rl, Pw, 0x8d },
- { ALEAVEL, ynone, P32, 0xc9 },
- { ALEAVEQ, ynone, Py, 0xc9 },
- { ALEAVEW, ynone, Pe, 0xc9 },
- { ALEAW, ym_rl, Pe, 0x8d },
- { ALOCK, ynone, Px, 0xf0 },
- { ALODSB, ynone, Pb, 0xac },
- { ALODSL, ynone, Px, 0xad },
- { ALODSQ, ynone, Pw, 0xad },
- { ALODSW, ynone, Pe, 0xad },
- { ALONG, ybyte, Px, 4 },
- { ALOOP, yloop, Px, 0xe2 },
- { ALOOPEQ, yloop, Px, 0xe1 },
- { ALOOPNE, yloop, Px, 0xe0 },
- { ALSLL, yml_rl, Pm, 0x03 },
- { ALSLW, yml_rl, Pq, 0x03 },
- { AMASKMOVOU, yxr, Pe, 0xf7 },
- { AMASKMOVQ, ymr, Pm, 0xf7 },
- { AMAXPD, yxm, Pe, 0x5f },
- { AMAXPS, yxm, Pm, 0x5f },
- { AMAXSD, yxm, Pf2, 0x5f },
- { AMAXSS, yxm, Pf3, 0x5f },
- { AMINPD, yxm, Pe, 0x5d },
- { AMINPS, yxm, Pm, 0x5d },
- { AMINSD, yxm, Pf2, 0x5d },
- { AMINSS, yxm, Pf3, 0x5d },
- { AMOVAPD, yxmov, Pe, 0x28,0x29 },
- { AMOVAPS, yxmov, Pm, 0x28,0x29 },
- { AMOVB, ymovb, Pb, 0x88,0x8a,0xb0,0xc6,(00) },
- { AMOVBLSX, ymb_rl, Pm, 0xbe },
- { AMOVBLZX, ymb_rl, Pm, 0xb6 },
- { AMOVBQSX, ymb_rl, Pw, 0x0f,0xbe },
- { AMOVBQZX, ymb_rl, Pw, 0x0f,0xb6 },
- { AMOVBWSX, ymb_rl, Pq, 0xbe },
- { AMOVBWZX, ymb_rl, Pq, 0xb6 },
- { AMOVO, yxmov, Pe, 0x6f,0x7f },
- { AMOVOU, yxmov, Pf3, 0x6f,0x7f },
- { AMOVHLPS, yxr, Pm, 0x12 },
- { AMOVHPD, yxmov, Pe, 0x16,0x17 },
- { AMOVHPS, yxmov, Pm, 0x16,0x17 },
- { AMOVL, ymovl, Px, 0x89,0x8b,0x31,0xb8,0xc7,(00),0x6e,0x7e,Pe,0x6e,Pe,0x7e,0 },
- { AMOVLHPS, yxr, Pm, 0x16 },
- { AMOVLPD, yxmov, Pe, 0x12,0x13 },
- { AMOVLPS, yxmov, Pm, 0x12,0x13 },
- { AMOVLQSX, yml_rl, Pw, 0x63 },
- { AMOVLQZX, yml_rl, Px, 0x8b },
- { AMOVMSKPD, yxrrl, Pq, 0x50 },
- { AMOVMSKPS, yxrrl, Pm, 0x50 },
- { AMOVNTO, yxr_ml, Pe, 0xe7 },
- { AMOVNTPD, yxr_ml, Pe, 0x2b },
- { AMOVNTPS, yxr_ml, Pm, 0x2b },
- { AMOVNTQ, ymr_ml, Pm, 0xe7 },
- { AMOVQ, ymovq, Pw, 0x89, 0x8b, 0x31, 0xc7,(00), 0xb8, 0xc7,(00), 0x6f, 0x7f, 0x6e, 0x7e, Pf2,0xd6, Pf3,0x7e, Pe,0xd6, Pe,0x6e, Pe,0x7e,0 },
- { AMOVQOZX, ymrxr, Pf3, 0xd6,0x7e },
- { AMOVSB, ynone, Pb, 0xa4 },
- { AMOVSD, yxmov, Pf2, 0x10,0x11 },
- { AMOVSL, ynone, Px, 0xa5 },
- { AMOVSQ, ynone, Pw, 0xa5 },
- { AMOVSS, yxmov, Pf3, 0x10,0x11 },
- { AMOVSW, ynone, Pe, 0xa5 },
- { AMOVUPD, yxmov, Pe, 0x10,0x11 },
- { AMOVUPS, yxmov, Pm, 0x10,0x11 },
- { AMOVW, ymovw, Pe, 0x89,0x8b,0x31,0xb8,0xc7,(00),0 },
- { AMOVWLSX, yml_rl, Pm, 0xbf },
- { AMOVWLZX, yml_rl, Pm, 0xb7 },
- { AMOVWQSX, yml_rl, Pw, 0x0f,0xbf },
- { AMOVWQZX, yml_rl, Pw, 0x0f,0xb7 },
- { AMULB, ydivb, Pb, 0xf6,(04) },
- { AMULL, ydivl, Px, 0xf7,(04) },
- { AMULPD, yxm, Pe, 0x59 },
- { AMULPS, yxm, Ym, 0x59 },
- { AMULQ, ydivl, Pw, 0xf7,(04) },
- { AMULSD, yxm, Pf2, 0x59 },
- { AMULSS, yxm, Pf3, 0x59 },
- { AMULW, ydivl, Pe, 0xf7,(04) },
+ { AHLT, ynone, Px, {0xf4} },
+ { AIDIVB, ydivb, Pb, {0xf6,(07)} },
+ { AIDIVL, ydivl, Px, {0xf7,(07)} },
+ { AIDIVQ, ydivl, Pw, {0xf7,(07)} },
+ { AIDIVW, ydivl, Pe, {0xf7,(07)} },
+ { AIMULB, ydivb, Pb, {0xf6,(05)} },
+ { AIMULL, yimul, Px, {0xf7,(05),0x6b,0x69,Pm,0xaf} },
+ { AIMULQ, yimul, Pw, {0xf7,(05),0x6b,0x69,Pm,0xaf} },
+ { AIMULW, yimul, Pe, {0xf7,(05),0x6b,0x69,Pm,0xaf} },
+ { AIMUL3Q, yimul3, Pw, {0x6b,(00)} },
+ { AINB, yin, Pb, {0xe4,0xec} },
+ { AINCB, yincb, Pb, {0xfe,(00)} },
+ { AINCL, yincl, Px, {0xff,(00)} },
+ { AINCQ, yincl, Pw, {0xff,(00)} },
+ { AINCW, yincw, Pe, {0xff,(00)} },
+ { AINL, yin, Px, {0xe5,0xed} },
+ { AINSB, ynone, Pb, {0x6c} },
+ { AINSL, ynone, Px, {0x6d} },
+ { AINSW, ynone, Pe, {0x6d} },
+ { AINT, yint, Px, {0xcd} },
+ { AINTO, ynone, P32, {0xce} },
+ { AINW, yin, Pe, {0xe5,0xed} },
+ { AIRETL, ynone, Px, {0xcf} },
+ { AIRETQ, ynone, Pw, {0xcf} },
+ { AIRETW, ynone, Pe, {0xcf} },
+ { AJCC, yjcond, Px, {0x73,0x83,(00)} },
+ { AJCS, yjcond, Px, {0x72,0x82} },
+ { AJCXZL, yloop, Px, {0xe3} },
+ { AJCXZQ, yloop, Px, {0xe3} },
+ { AJEQ, yjcond, Px, {0x74,0x84} },
+ { AJGE, yjcond, Px, {0x7d,0x8d} },
+ { AJGT, yjcond, Px, {0x7f,0x8f} },
+ { AJHI, yjcond, Px, {0x77,0x87} },
+ { AJLE, yjcond, Px, {0x7e,0x8e} },
+ { AJLS, yjcond, Px, {0x76,0x86} },
+ { AJLT, yjcond, Px, {0x7c,0x8c} },
+ { AJMI, yjcond, Px, {0x78,0x88} },
+ { AJMP, yjmp, Px, {0xff,(04),0xeb,0xe9} },
+ { AJNE, yjcond, Px, {0x75,0x85} },
+ { AJOC, yjcond, Px, {0x71,0x81,(00)} },
+ { AJOS, yjcond, Px, {0x70,0x80,(00)} },
+ { AJPC, yjcond, Px, {0x7b,0x8b} },
+ { AJPL, yjcond, Px, {0x79,0x89} },
+ { AJPS, yjcond, Px, {0x7a,0x8a} },
+ { ALAHF, ynone, Px, {0x9f} },
+ { ALARL, yml_rl, Pm, {0x02} },
+ { ALARW, yml_rl, Pq, {0x02} },
+ { ALDMXCSR, ysvrs, Pm, {0xae,(02),0xae,(02)} },
+ { ALEAL, ym_rl, Px, {0x8d} },
+ { ALEAQ, ym_rl, Pw, {0x8d} },
+ { ALEAVEL, ynone, P32, {0xc9} },
+ { ALEAVEQ, ynone, Py, {0xc9} },
+ { ALEAVEW, ynone, Pe, {0xc9} },
+ { ALEAW, ym_rl, Pe, {0x8d} },
+ { ALOCK, ynone, Px, {0xf0} },
+ { ALODSB, ynone, Pb, {0xac} },
+ { ALODSL, ynone, Px, {0xad} },
+ { ALODSQ, ynone, Pw, {0xad} },
+ { ALODSW, ynone, Pe, {0xad} },
+ { ALONG, ybyte, Px, {4} },
+ { ALOOP, yloop, Px, {0xe2} },
+ { ALOOPEQ, yloop, Px, {0xe1} },
+ { ALOOPNE, yloop, Px, {0xe0} },
+ { ALSLL, yml_rl, Pm, {0x03 } },
+ { ALSLW, yml_rl, Pq, {0x03 } },
+ { AMASKMOVOU, yxr, Pe, {0xf7} },
+ { AMASKMOVQ, ymr, Pm, {0xf7} },
+ { AMAXPD, yxm, Pe, {0x5f} },
+ { AMAXPS, yxm, Pm, {0x5f} },
+ { AMAXSD, yxm, Pf2, {0x5f} },
+ { AMAXSS, yxm, Pf3, {0x5f} },
+ { AMINPD, yxm, Pe, {0x5d} },
+ { AMINPS, yxm, Pm, {0x5d} },
+ { AMINSD, yxm, Pf2, {0x5d} },
+ { AMINSS, yxm, Pf3, {0x5d} },
+ { AMOVAPD, yxmov, Pe, {0x28,0x29} },
+ { AMOVAPS, yxmov, Pm, {0x28,0x29} },
+ { AMOVB, ymovb, Pb, {0x88,0x8a,0xb0,0xc6,(00)} },
+ { AMOVBLSX, ymb_rl, Pm, {0xbe} },
+ { AMOVBLZX, ymb_rl, Pm, {0xb6} },
+ { AMOVBQSX, ymb_rl, Pw, {0x0f,0xbe} },
+ { AMOVBQZX, ymb_rl, Pm, {0xb6} },
+ { AMOVBWSX, ymb_rl, Pq, {0xbe} },
+ { AMOVBWZX, ymb_rl, Pq, {0xb6} },
+ { AMOVO, yxmov, Pe, {0x6f,0x7f} },
+ { AMOVOU, yxmov, Pf3, {0x6f,0x7f} },
+ { AMOVHLPS, yxr, Pm, {0x12} },
+ { AMOVHPD, yxmov, Pe, {0x16,0x17} },
+ { AMOVHPS, yxmov, Pm, {0x16,0x17} },
+ { AMOVL, ymovl, Px, {0x89,0x8b,0x31,0xb8,0xc7,(00),0x6e,0x7e,Pe,0x6e,Pe,0x7e,0} },
+ { AMOVLHPS, yxr, Pm, {0x16} },
+ { AMOVLPD, yxmov, Pe, {0x12,0x13} },
+ { AMOVLPS, yxmov, Pm, {0x12,0x13} },
+ { AMOVLQSX, yml_rl, Pw, {0x63} },
+ { AMOVLQZX, yml_rl, Px, {0x8b} },
+ { AMOVMSKPD, yxrrl, Pq, {0x50} },
+ { AMOVMSKPS, yxrrl, Pm, {0x50} },
+ { AMOVNTO, yxr_ml, Pe, {0xe7} },
+ { AMOVNTPD, yxr_ml, Pe, {0x2b} },
+ { AMOVNTPS, yxr_ml, Pm, {0x2b} },
+ { AMOVNTQ, ymr_ml, Pm, {0xe7} },
+ { AMOVQ, ymovq, Pw, {0x89, 0x8b, 0x31, 0xc7,(00), 0xb8, 0xc7,(00), 0x6f, 0x7f, 0x6e, 0x7e, Pf2,0xd6, Pf3,0x7e, Pe,0xd6, Pe,0x6e, Pe,0x7e,0} },
+ { AMOVQOZX, ymrxr, Pf3, {0xd6,0x7e} },
+ { AMOVSB, ynone, Pb, {0xa4} },
+ { AMOVSD, yxmov, Pf2, {0x10,0x11} },
+ { AMOVSL, ynone, Px, {0xa5} },
+ { AMOVSQ, ynone, Pw, {0xa5} },
+ { AMOVSS, yxmov, Pf3, {0x10,0x11} },
+ { AMOVSW, ynone, Pe, {0xa5} },
+ { AMOVUPD, yxmov, Pe, {0x10,0x11} },
+ { AMOVUPS, yxmov, Pm, {0x10,0x11} },
+ { AMOVW, ymovw, Pe, {0x89,0x8b,0x31,0xb8,0xc7,(00),0} },
+ { AMOVWLSX, yml_rl, Pm, {0xbf} },
+ { AMOVWLZX, yml_rl, Pm, {0xb7} },
+ { AMOVWQSX, yml_rl, Pw, {0x0f,0xbf} },
+ { AMOVWQZX, yml_rl, Pw, {0x0f,0xb7} },
+ { AMULB, ydivb, Pb, {0xf6,(04)} },
+ { AMULL, ydivl, Px, {0xf7,(04)} },
+ { AMULPD, yxm, Pe, {0x59} },
+ { AMULPS, yxm, Ym, {0x59} },
+ { AMULQ, ydivl, Pw, {0xf7,(04)} },
+ { AMULSD, yxm, Pf2, {0x59} },
+ { AMULSS, yxm, Pf3, {0x59} },
+ { AMULW, ydivl, Pe, {0xf7,(04)} },
{ ANAME },
- { ANEGB, yscond, Pb, 0xf6,(03) },
- { ANEGL, yscond, Px, 0xf7,(03) },
- { ANEGQ, yscond, Pw, 0xf7,(03) },
- { ANEGW, yscond, Pe, 0xf7,(03) },
- { ANOP, ynop, Px, 0,0 },
- { ANOTB, yscond, Pb, 0xf6,(02) },
- { ANOTL, yscond, Px, 0xf7,(02) },
- { ANOTQ, yscond, Pw, 0xf7,(02) },
- { ANOTW, yscond, Pe, 0xf7,(02) },
- { AORB, yxorb, Pb, 0x0c,0x80,(01),0x08,0x0a },
- { AORL, yxorl, Px, 0x83,(01),0x0d,0x81,(01),0x09,0x0b },
- { AORPD, yxm, Pq, 0x56 },
- { AORPS, yxm, Pm, 0x56 },
- { AORQ, yxorl, Pw, 0x83,(01),0x0d,0x81,(01),0x09,0x0b },
- { AORW, yxorl, Pe, 0x83,(01),0x0d,0x81,(01),0x09,0x0b },
- { AOUTB, yin, Pb, 0xe6,0xee },
- { AOUTL, yin, Px, 0xe7,0xef },
- { AOUTSB, ynone, Pb, 0x6e },
- { AOUTSL, ynone, Px, 0x6f },
- { AOUTSW, ynone, Pe, 0x6f },
- { AOUTW, yin, Pe, 0xe7,0xef },
- { APACKSSLW, ymm, Py, 0x6b,Pe,0x6b },
- { APACKSSWB, ymm, Py, 0x63,Pe,0x63 },
- { APACKUSWB, ymm, Py, 0x67,Pe,0x67 },
- { APADDB, ymm, Py, 0xfc,Pe,0xfc },
- { APADDL, ymm, Py, 0xfe,Pe,0xfe },
- { APADDQ, yxm, Pe, 0xd4 },
- { APADDSB, ymm, Py, 0xec,Pe,0xec },
- { APADDSW, ymm, Py, 0xed,Pe,0xed },
- { APADDUSB, ymm, Py, 0xdc,Pe,0xdc },
- { APADDUSW, ymm, Py, 0xdd,Pe,0xdd },
- { APADDW, ymm, Py, 0xfd,Pe,0xfd },
- { APAND, ymm, Py, 0xdb,Pe,0xdb },
- { APANDN, ymm, Py, 0xdf,Pe,0xdf },
- { APAUSE, ynone, Px, 0xf3,0x90 },
- { APAVGB, ymm, Py, 0xe0,Pe,0xe0 },
- { APAVGW, ymm, Py, 0xe3,Pe,0xe3 },
- { APCMPEQB, ymm, Py, 0x74,Pe,0x74 },
- { APCMPEQL, ymm, Py, 0x76,Pe,0x76 },
- { APCMPEQW, ymm, Py, 0x75,Pe,0x75 },
- { APCMPGTB, ymm, Py, 0x64,Pe,0x64 },
- { APCMPGTL, ymm, Py, 0x66,Pe,0x66 },
- { APCMPGTW, ymm, Py, 0x65,Pe,0x65 },
- { APEXTRW, yextrw, Pq, 0xc5,(00) },
- { APF2IL, ymfp, Px, 0x1d },
- { APF2IW, ymfp, Px, 0x1c },
- { API2FL, ymfp, Px, 0x0d },
- { APFACC, ymfp, Px, 0xae },
- { APFADD, ymfp, Px, 0x9e },
- { APFCMPEQ, ymfp, Px, 0xb0 },
- { APFCMPGE, ymfp, Px, 0x90 },
- { APFCMPGT, ymfp, Px, 0xa0 },
- { APFMAX, ymfp, Px, 0xa4 },
- { APFMIN, ymfp, Px, 0x94 },
- { APFMUL, ymfp, Px, 0xb4 },
- { APFNACC, ymfp, Px, 0x8a },
- { APFPNACC, ymfp, Px, 0x8e },
- { APFRCP, ymfp, Px, 0x96 },
- { APFRCPIT1, ymfp, Px, 0xa6 },
- { APFRCPI2T, ymfp, Px, 0xb6 },
- { APFRSQIT1, ymfp, Px, 0xa7 },
- { APFRSQRT, ymfp, Px, 0x97 },
- { APFSUB, ymfp, Px, 0x9a },
- { APFSUBR, ymfp, Px, 0xaa },
- { APINSRW, yinsrw, Pq, 0xc4,(00) },
- { APINSRD, yinsr, Pq, 0x3a, 0x22, (00) },
- { APINSRQ, yinsr, Pq3, 0x3a, 0x22, (00) },
- { APMADDWL, ymm, Py, 0xf5,Pe,0xf5 },
- { APMAXSW, yxm, Pe, 0xee },
- { APMAXUB, yxm, Pe, 0xde },
- { APMINSW, yxm, Pe, 0xea },
- { APMINUB, yxm, Pe, 0xda },
- { APMOVMSKB, ymskb, Px, Pe,0xd7,0xd7 },
- { APMULHRW, ymfp, Px, 0xb7 },
- { APMULHUW, ymm, Py, 0xe4,Pe,0xe4 },
- { APMULHW, ymm, Py, 0xe5,Pe,0xe5 },
- { APMULLW, ymm, Py, 0xd5,Pe,0xd5 },
- { APMULULQ, ymm, Py, 0xf4,Pe,0xf4 },
- { APOPAL, ynone, P32, 0x61 },
- { APOPAW, ynone, Pe, 0x61 },
- { APOPFL, ynone, P32, 0x9d },
- { APOPFQ, ynone, Py, 0x9d },
- { APOPFW, ynone, Pe, 0x9d },
- { APOPL, ypopl, P32, 0x58,0x8f,(00) },
- { APOPQ, ypopl, Py, 0x58,0x8f,(00) },
- { APOPW, ypopl, Pe, 0x58,0x8f,(00) },
- { APOR, ymm, Py, 0xeb,Pe,0xeb },
- { APSADBW, yxm, Pq, 0xf6 },
- { APSHUFHW, yxshuf, Pf3, 0x70,(00) },
- { APSHUFL, yxshuf, Pq, 0x70,(00) },
- { APSHUFLW, yxshuf, Pf2, 0x70,(00) },
- { APSHUFW, ymshuf, Pm, 0x70,(00) },
- { APSHUFB, ymshufb,Pq, 0x38, 0x00 },
- { APSLLO, ypsdq, Pq, 0x73,(07) },
- { APSLLL, yps, Py, 0xf2, 0x72,(06), Pe,0xf2, Pe,0x72,(06) },
- { APSLLQ, yps, Py, 0xf3, 0x73,(06), Pe,0xf3, Pe,0x73,(06) },
- { APSLLW, yps, Py, 0xf1, 0x71,(06), Pe,0xf1, Pe,0x71,(06) },
- { APSRAL, yps, Py, 0xe2, 0x72,(04), Pe,0xe2, Pe,0x72,(04) },
- { APSRAW, yps, Py, 0xe1, 0x71,(04), Pe,0xe1, Pe,0x71,(04) },
- { APSRLO, ypsdq, Pq, 0x73,(03) },
- { APSRLL, yps, Py, 0xd2, 0x72,(02), Pe,0xd2, Pe,0x72,(02) },
- { APSRLQ, yps, Py, 0xd3, 0x73,(02), Pe,0xd3, Pe,0x73,(02) },
- { APSRLW, yps, Py, 0xd1, 0x71,(02), Pe,0xe1, Pe,0x71,(02) },
- { APSUBB, yxm, Pe, 0xf8 },
- { APSUBL, yxm, Pe, 0xfa },
- { APSUBQ, yxm, Pe, 0xfb },
- { APSUBSB, yxm, Pe, 0xe8 },
- { APSUBSW, yxm, Pe, 0xe9 },
- { APSUBUSB, yxm, Pe, 0xd8 },
- { APSUBUSW, yxm, Pe, 0xd9 },
- { APSUBW, yxm, Pe, 0xf9 },
- { APSWAPL, ymfp, Px, 0xbb },
- { APUNPCKHBW, ymm, Py, 0x68,Pe,0x68 },
- { APUNPCKHLQ, ymm, Py, 0x6a,Pe,0x6a },
- { APUNPCKHQDQ, yxm, Pe, 0x6d },
- { APUNPCKHWL, ymm, Py, 0x69,Pe,0x69 },
- { APUNPCKLBW, ymm, Py, 0x60,Pe,0x60 },
- { APUNPCKLLQ, ymm, Py, 0x62,Pe,0x62 },
- { APUNPCKLQDQ, yxm, Pe, 0x6c },
- { APUNPCKLWL, ymm, Py, 0x61,Pe,0x61 },
- { APUSHAL, ynone, P32, 0x60 },
- { APUSHAW, ynone, Pe, 0x60 },
- { APUSHFL, ynone, P32, 0x9c },
- { APUSHFQ, ynone, Py, 0x9c },
- { APUSHFW, ynone, Pe, 0x9c },
- { APUSHL, ypushl, P32, 0x50,0xff,(06),0x6a,0x68 },
- { APUSHQ, ypushl, Py, 0x50,0xff,(06),0x6a,0x68 },
- { APUSHW, ypushl, Pe, 0x50,0xff,(06),0x6a,0x68 },
- { APXOR, ymm, Py, 0xef,Pe,0xef },
- { AQUAD, ybyte, Px, 8 },
- { ARCLB, yshb, Pb, 0xd0,(02),0xc0,(02),0xd2,(02) },
- { ARCLL, yshl, Px, 0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02) },
- { ARCLQ, yshl, Pw, 0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02) },
- { ARCLW, yshl, Pe, 0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02) },
- { ARCPPS, yxm, Pm, 0x53 },
- { ARCPSS, yxm, Pf3, 0x53 },
- { ARCRB, yshb, Pb, 0xd0,(03),0xc0,(03),0xd2,(03) },
- { ARCRL, yshl, Px, 0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03) },
- { ARCRQ, yshl, Pw, 0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03) },
- { ARCRW, yshl, Pe, 0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03) },
- { AREP, ynone, Px, 0xf3 },
- { AREPN, ynone, Px, 0xf2 },
- { ARET, ynone, Px, 0xc3 },
- { ARETFW, yret, Pe, 0xcb,0xca },
- { ARETFL, yret, Px, 0xcb,0xca },
- { ARETFQ, yret, Pw, 0xcb,0xca },
- { AROLB, yshb, Pb, 0xd0,(00),0xc0,(00),0xd2,(00) },
- { AROLL, yshl, Px, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) },
- { AROLQ, yshl, Pw, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) },
- { AROLW, yshl, Pe, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) },
- { ARORB, yshb, Pb, 0xd0,(01),0xc0,(01),0xd2,(01) },
- { ARORL, yshl, Px, 0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01) },
- { ARORQ, yshl, Pw, 0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01) },
- { ARORW, yshl, Pe, 0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01) },
- { ARSQRTPS, yxm, Pm, 0x52 },
- { ARSQRTSS, yxm, Pf3, 0x52 },
- { ASAHF, ynone, Px, 0x86,0xe0,0x50,0x9d }, /* XCHGB AH,AL; PUSH AX; POPFL */
- { ASALB, yshb, Pb, 0xd0,(04),0xc0,(04),0xd2,(04) },
- { ASALL, yshl, Px, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
- { ASALQ, yshl, Pw, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
- { ASALW, yshl, Pe, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
- { ASARB, yshb, Pb, 0xd0,(07),0xc0,(07),0xd2,(07) },
- { ASARL, yshl, Px, 0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07) },
- { ASARQ, yshl, Pw, 0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07) },
- { ASARW, yshl, Pe, 0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07) },
- { ASBBB, yxorb, Pb, 0x1c,0x80,(03),0x18,0x1a },
- { ASBBL, yxorl, Px, 0x83,(03),0x1d,0x81,(03),0x19,0x1b },
- { ASBBQ, yxorl, Pw, 0x83,(03),0x1d,0x81,(03),0x19,0x1b },
- { ASBBW, yxorl, Pe, 0x83,(03),0x1d,0x81,(03),0x19,0x1b },
- { ASCASB, ynone, Pb, 0xae },
- { ASCASL, ynone, Px, 0xaf },
- { ASCASQ, ynone, Pw, 0xaf },
- { ASCASW, ynone, Pe, 0xaf },
- { ASETCC, yscond, Pm, 0x93,(00) },
- { ASETCS, yscond, Pm, 0x92,(00) },
- { ASETEQ, yscond, Pm, 0x94,(00) },
- { ASETGE, yscond, Pm, 0x9d,(00) },
- { ASETGT, yscond, Pm, 0x9f,(00) },
- { ASETHI, yscond, Pm, 0x97,(00) },
- { ASETLE, yscond, Pm, 0x9e,(00) },
- { ASETLS, yscond, Pm, 0x96,(00) },
- { ASETLT, yscond, Pm, 0x9c,(00) },
- { ASETMI, yscond, Pm, 0x98,(00) },
- { ASETNE, yscond, Pm, 0x95,(00) },
- { ASETOC, yscond, Pm, 0x91,(00) },
- { ASETOS, yscond, Pm, 0x90,(00) },
- { ASETPC, yscond, Pm, 0x96,(00) },
- { ASETPL, yscond, Pm, 0x99,(00) },
- { ASETPS, yscond, Pm, 0x9a,(00) },
- { ASHLB, yshb, Pb, 0xd0,(04),0xc0,(04),0xd2,(04) },
- { ASHLL, yshl, Px, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
- { ASHLQ, yshl, Pw, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
- { ASHLW, yshl, Pe, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
- { ASHRB, yshb, Pb, 0xd0,(05),0xc0,(05),0xd2,(05) },
- { ASHRL, yshl, Px, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) },
- { ASHRQ, yshl, Pw, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) },
- { ASHRW, yshl, Pe, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) },
- { ASHUFPD, yxshuf, Pq, 0xc6,(00) },
- { ASHUFPS, yxshuf, Pm, 0xc6,(00) },
- { ASQRTPD, yxm, Pe, 0x51 },
- { ASQRTPS, yxm, Pm, 0x51 },
- { ASQRTSD, yxm, Pf2, 0x51 },
- { ASQRTSS, yxm, Pf3, 0x51 },
- { ASTC, ynone, Px, 0xf9 },
- { ASTD, ynone, Px, 0xfd },
- { ASTI, ynone, Px, 0xfb },
- { ASTMXCSR, ysvrs, Pm, 0xae,(03),0xae,(03) },
- { ASTOSB, ynone, Pb, 0xaa },
- { ASTOSL, ynone, Px, 0xab },
- { ASTOSQ, ynone, Pw, 0xab },
- { ASTOSW, ynone, Pe, 0xab },
- { ASUBB, yxorb, Pb, 0x2c,0x80,(05),0x28,0x2a },
- { ASUBL, yaddl, Px, 0x83,(05),0x2d,0x81,(05),0x29,0x2b },
- { ASUBPD, yxm, Pe, 0x5c },
- { ASUBPS, yxm, Pm, 0x5c },
- { ASUBQ, yaddl, Pw, 0x83,(05),0x2d,0x81,(05),0x29,0x2b },
- { ASUBSD, yxm, Pf2, 0x5c },
- { ASUBSS, yxm, Pf3, 0x5c },
- { ASUBW, yaddl, Pe, 0x83,(05),0x2d,0x81,(05),0x29,0x2b },
- { ASWAPGS, ynone, Pm, 0x01,0xf8 },
- { ASYSCALL, ynone, Px, 0x0f,0x05 }, /* fast syscall */
- { ATESTB, ytestb, Pb, 0xa8,0xf6,(00),0x84,0x84 },
- { ATESTL, ytestl, Px, 0xa9,0xf7,(00),0x85,0x85 },
- { ATESTQ, ytestl, Pw, 0xa9,0xf7,(00),0x85,0x85 },
- { ATESTW, ytestl, Pe, 0xa9,0xf7,(00),0x85,0x85 },
+ { ANEGB, yscond, Pb, {0xf6,(03)} },
+ { ANEGL, yscond, Px, {0xf7,(03)} },
+ { ANEGQ, yscond, Pw, {0xf7,(03)} },
+ { ANEGW, yscond, Pe, {0xf7,(03)} },
+ { ANOP, ynop, Px, {0,0} },
+ { ANOTB, yscond, Pb, {0xf6,(02)} },
+ { ANOTL, yscond, Px, {0xf7,(02)} },
+ { ANOTQ, yscond, Pw, {0xf7,(02)} },
+ { ANOTW, yscond, Pe, {0xf7,(02)} },
+ { AORB, yxorb, Pb, {0x0c,0x80,(01),0x08,0x0a} },
+ { AORL, yxorl, Px, {0x83,(01),0x0d,0x81,(01),0x09,0x0b} },
+ { AORPD, yxm, Pq, {0x56} },
+ { AORPS, yxm, Pm, {0x56} },
+ { AORQ, yxorl, Pw, {0x83,(01),0x0d,0x81,(01),0x09,0x0b} },
+ { AORW, yxorl, Pe, {0x83,(01),0x0d,0x81,(01),0x09,0x0b} },
+ { AOUTB, yin, Pb, {0xe6,0xee} },
+ { AOUTL, yin, Px, {0xe7,0xef} },
+ { AOUTSB, ynone, Pb, {0x6e} },
+ { AOUTSL, ynone, Px, {0x6f} },
+ { AOUTSW, ynone, Pe, {0x6f} },
+ { AOUTW, yin, Pe, {0xe7,0xef} },
+ { APACKSSLW, ymm, Py, {0x6b,Pe,0x6b} },
+ { APACKSSWB, ymm, Py, {0x63,Pe,0x63} },
+ { APACKUSWB, ymm, Py, {0x67,Pe,0x67} },
+ { APADDB, ymm, Py, {0xfc,Pe,0xfc} },
+ { APADDL, ymm, Py, {0xfe,Pe,0xfe} },
+ { APADDQ, yxm, Pe, {0xd4} },
+ { APADDSB, ymm, Py, {0xec,Pe,0xec} },
+ { APADDSW, ymm, Py, {0xed,Pe,0xed} },
+ { APADDUSB, ymm, Py, {0xdc,Pe,0xdc} },
+ { APADDUSW, ymm, Py, {0xdd,Pe,0xdd} },
+ { APADDW, ymm, Py, {0xfd,Pe,0xfd} },
+ { APAND, ymm, Py, {0xdb,Pe,0xdb} },
+ { APANDN, ymm, Py, {0xdf,Pe,0xdf} },
+ { APAUSE, ynone, Px, {0xf3,0x90} },
+ { APAVGB, ymm, Py, {0xe0,Pe,0xe0} },
+ { APAVGW, ymm, Py, {0xe3,Pe,0xe3} },
+ { APCMPEQB, ymm, Py, {0x74,Pe,0x74} },
+ { APCMPEQL, ymm, Py, {0x76,Pe,0x76} },
+ { APCMPEQW, ymm, Py, {0x75,Pe,0x75} },
+ { APCMPGTB, ymm, Py, {0x64,Pe,0x64} },
+ { APCMPGTL, ymm, Py, {0x66,Pe,0x66} },
+ { APCMPGTW, ymm, Py, {0x65,Pe,0x65} },
+ { APEXTRW, yextrw, Pq, {0xc5,(00)} },
+ { APF2IL, ymfp, Px, {0x1d} },
+ { APF2IW, ymfp, Px, {0x1c} },
+ { API2FL, ymfp, Px, {0x0d} },
+ { APFACC, ymfp, Px, {0xae} },
+ { APFADD, ymfp, Px, {0x9e} },
+ { APFCMPEQ, ymfp, Px, {0xb0} },
+ { APFCMPGE, ymfp, Px, {0x90} },
+ { APFCMPGT, ymfp, Px, {0xa0} },
+ { APFMAX, ymfp, Px, {0xa4} },
+ { APFMIN, ymfp, Px, {0x94} },
+ { APFMUL, ymfp, Px, {0xb4} },
+ { APFNACC, ymfp, Px, {0x8a} },
+ { APFPNACC, ymfp, Px, {0x8e} },
+ { APFRCP, ymfp, Px, {0x96} },
+ { APFRCPIT1, ymfp, Px, {0xa6} },
+ { APFRCPI2T, ymfp, Px, {0xb6} },
+ { APFRSQIT1, ymfp, Px, {0xa7} },
+ { APFRSQRT, ymfp, Px, {0x97} },
+ { APFSUB, ymfp, Px, {0x9a} },
+ { APFSUBR, ymfp, Px, {0xaa} },
+ { APINSRW, yinsrw, Pq, {0xc4,(00)} },
+ { APINSRD, yinsr, Pq, {0x3a, 0x22, (00)} },
+ { APINSRQ, yinsr, Pq3, {0x3a, 0x22, (00)} },
+ { APMADDWL, ymm, Py, {0xf5,Pe,0xf5} },
+ { APMAXSW, yxm, Pe, {0xee} },
+ { APMAXUB, yxm, Pe, {0xde} },
+ { APMINSW, yxm, Pe, {0xea} },
+ { APMINUB, yxm, Pe, {0xda} },
+ { APMOVMSKB, ymskb, Px, {Pe,0xd7,0xd7} },
+ { APMULHRW, ymfp, Px, {0xb7} },
+ { APMULHUW, ymm, Py, {0xe4,Pe,0xe4} },
+ { APMULHW, ymm, Py, {0xe5,Pe,0xe5} },
+ { APMULLW, ymm, Py, {0xd5,Pe,0xd5} },
+ { APMULULQ, ymm, Py, {0xf4,Pe,0xf4} },
+ { APOPAL, ynone, P32, {0x61} },
+ { APOPAW, ynone, Pe, {0x61} },
+ { APOPFL, ynone, P32, {0x9d} },
+ { APOPFQ, ynone, Py, {0x9d} },
+ { APOPFW, ynone, Pe, {0x9d} },
+ { APOPL, ypopl, P32, {0x58,0x8f,(00)} },
+ { APOPQ, ypopl, Py, {0x58,0x8f,(00)} },
+ { APOPW, ypopl, Pe, {0x58,0x8f,(00)} },
+ { APOR, ymm, Py, {0xeb,Pe,0xeb} },
+ { APSADBW, yxm, Pq, {0xf6} },
+ { APSHUFHW, yxshuf, Pf3, {0x70,(00)} },
+ { APSHUFL, yxshuf, Pq, {0x70,(00)} },
+ { APSHUFLW, yxshuf, Pf2, {0x70,(00)} },
+ { APSHUFW, ymshuf, Pm, {0x70,(00)} },
+ { APSHUFB, ymshufb,Pq, {0x38, 0x00} },
+ { APSLLO, ypsdq, Pq, {0x73,(07)} },
+ { APSLLL, yps, Py, {0xf2, 0x72,(06), Pe,0xf2, Pe,0x72,(06)} },
+ { APSLLQ, yps, Py, {0xf3, 0x73,(06), Pe,0xf3, Pe,0x73,(06)} },
+ { APSLLW, yps, Py, {0xf1, 0x71,(06), Pe,0xf1, Pe,0x71,(06)} },
+ { APSRAL, yps, Py, {0xe2, 0x72,(04), Pe,0xe2, Pe,0x72,(04)} },
+ { APSRAW, yps, Py, {0xe1, 0x71,(04), Pe,0xe1, Pe,0x71,(04)} },
+ { APSRLO, ypsdq, Pq, {0x73,(03)} },
+ { APSRLL, yps, Py, {0xd2, 0x72,(02), Pe,0xd2, Pe,0x72,(02)} },
+ { APSRLQ, yps, Py, {0xd3, 0x73,(02), Pe,0xd3, Pe,0x73,(02)} },
+ { APSRLW, yps, Py, {0xd1, 0x71,(02), Pe,0xe1, Pe,0x71,(02)} },
+ { APSUBB, yxm, Pe, {0xf8} },
+ { APSUBL, yxm, Pe, {0xfa} },
+ { APSUBQ, yxm, Pe, {0xfb} },
+ { APSUBSB, yxm, Pe, {0xe8} },
+ { APSUBSW, yxm, Pe, {0xe9} },
+ { APSUBUSB, yxm, Pe, {0xd8} },
+ { APSUBUSW, yxm, Pe, {0xd9} },
+ { APSUBW, yxm, Pe, {0xf9} },
+ { APSWAPL, ymfp, Px, {0xbb} },
+ { APUNPCKHBW, ymm, Py, {0x68,Pe,0x68} },
+ { APUNPCKHLQ, ymm, Py, {0x6a,Pe,0x6a} },
+ { APUNPCKHQDQ, yxm, Pe, {0x6d} },
+ { APUNPCKHWL, ymm, Py, {0x69,Pe,0x69} },
+ { APUNPCKLBW, ymm, Py, {0x60,Pe,0x60} },
+ { APUNPCKLLQ, ymm, Py, {0x62,Pe,0x62} },
+ { APUNPCKLQDQ, yxm, Pe, {0x6c} },
+ { APUNPCKLWL, ymm, Py, {0x61,Pe,0x61} },
+ { APUSHAL, ynone, P32, {0x60} },
+ { APUSHAW, ynone, Pe, {0x60} },
+ { APUSHFL, ynone, P32, {0x9c} },
+ { APUSHFQ, ynone, Py, {0x9c} },
+ { APUSHFW, ynone, Pe, {0x9c} },
+ { APUSHL, ypushl, P32, {0x50,0xff,(06),0x6a,0x68} },
+ { APUSHQ, ypushl, Py, {0x50,0xff,(06),0x6a,0x68} },
+ { APUSHW, ypushl, Pe, {0x50,0xff,(06),0x6a,0x68} },
+ { APXOR, ymm, Py, {0xef,Pe,0xef} },
+ { AQUAD, ybyte, Px, {8} },
+ { ARCLB, yshb, Pb, {0xd0,(02),0xc0,(02),0xd2,(02)} },
+ { ARCLL, yshl, Px, {0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02)} },
+ { ARCLQ, yshl, Pw, {0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02)} },
+ { ARCLW, yshl, Pe, {0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02)} },
+ { ARCPPS, yxm, Pm, {0x53} },
+ { ARCPSS, yxm, Pf3, {0x53} },
+ { ARCRB, yshb, Pb, {0xd0,(03),0xc0,(03),0xd2,(03)} },
+ { ARCRL, yshl, Px, {0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03)} },
+ { ARCRQ, yshl, Pw, {0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03)} },
+ { ARCRW, yshl, Pe, {0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03)} },
+ { AREP, ynone, Px, {0xf3} },
+ { AREPN, ynone, Px, {0xf2} },
+ { ARET, ynone, Px, {0xc3} },
+ { ARETFW, yret, Pe, {0xcb,0xca} },
+ { ARETFL, yret, Px, {0xcb,0xca} },
+ { ARETFQ, yret, Pw, {0xcb,0xca} },
+ { AROLB, yshb, Pb, {0xd0,(00),0xc0,(00),0xd2,(00)} },
+ { AROLL, yshl, Px, {0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00)} },
+ { AROLQ, yshl, Pw, {0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00)} },
+ { AROLW, yshl, Pe, {0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00)} },
+ { ARORB, yshb, Pb, {0xd0,(01),0xc0,(01),0xd2,(01)} },
+ { ARORL, yshl, Px, {0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01)} },
+ { ARORQ, yshl, Pw, {0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01)} },
+ { ARORW, yshl, Pe, {0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01)} },
+ { ARSQRTPS, yxm, Pm, {0x52} },
+ { ARSQRTSS, yxm, Pf3, {0x52} },
+ { ASAHF, ynone, Px, {0x86,0xe0,0x50,0x9d} }, /* XCHGB AH,AL; PUSH AX; POPFL */
+ { ASALB, yshb, Pb, {0xd0,(04),0xc0,(04),0xd2,(04)} },
+ { ASALL, yshl, Px, {0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04)} },
+ { ASALQ, yshl, Pw, {0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04)} },
+ { ASALW, yshl, Pe, {0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04)} },
+ { ASARB, yshb, Pb, {0xd0,(07),0xc0,(07),0xd2,(07)} },
+ { ASARL, yshl, Px, {0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07)} },
+ { ASARQ, yshl, Pw, {0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07)} },
+ { ASARW, yshl, Pe, {0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07)} },
+ { ASBBB, yxorb, Pb, {0x1c,0x80,(03),0x18,0x1a} },
+ { ASBBL, yxorl, Px, {0x83,(03),0x1d,0x81,(03),0x19,0x1b} },
+ { ASBBQ, yxorl, Pw, {0x83,(03),0x1d,0x81,(03),0x19,0x1b} },
+ { ASBBW, yxorl, Pe, {0x83,(03),0x1d,0x81,(03),0x19,0x1b} },
+ { ASCASB, ynone, Pb, {0xae} },
+ { ASCASL, ynone, Px, {0xaf} },
+ { ASCASQ, ynone, Pw, {0xaf} },
+ { ASCASW, ynone, Pe, {0xaf} },
+ { ASETCC, yscond, Pm, {0x93,(00)} },
+ { ASETCS, yscond, Pm, {0x92,(00)} },
+ { ASETEQ, yscond, Pm, {0x94,(00)} },
+ { ASETGE, yscond, Pm, {0x9d,(00)} },
+ { ASETGT, yscond, Pm, {0x9f,(00)} },
+ { ASETHI, yscond, Pm, {0x97,(00)} },
+ { ASETLE, yscond, Pm, {0x9e,(00)} },
+ { ASETLS, yscond, Pm, {0x96,(00)} },
+ { ASETLT, yscond, Pm, {0x9c,(00)} },
+ { ASETMI, yscond, Pm, {0x98,(00)} },
+ { ASETNE, yscond, Pm, {0x95,(00)} },
+ { ASETOC, yscond, Pm, {0x91,(00)} },
+ { ASETOS, yscond, Pm, {0x90,(00)} },
+ { ASETPC, yscond, Pm, {0x9b,(00)} },
+ { ASETPL, yscond, Pm, {0x99,(00)} },
+ { ASETPS, yscond, Pm, {0x9a,(00)} },
+ { ASHLB, yshb, Pb, {0xd0,(04),0xc0,(04),0xd2,(04)} },
+ { ASHLL, yshl, Px, {0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04)} },
+ { ASHLQ, yshl, Pw, {0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04)} },
+ { ASHLW, yshl, Pe, {0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04)} },
+ { ASHRB, yshb, Pb, {0xd0,(05),0xc0,(05),0xd2,(05)} },
+ { ASHRL, yshl, Px, {0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05)} },
+ { ASHRQ, yshl, Pw, {0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05)} },
+ { ASHRW, yshl, Pe, {0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05)} },
+ { ASHUFPD, yxshuf, Pq, {0xc6,(00)} },
+ { ASHUFPS, yxshuf, Pm, {0xc6,(00)} },
+ { ASQRTPD, yxm, Pe, {0x51} },
+ { ASQRTPS, yxm, Pm, {0x51} },
+ { ASQRTSD, yxm, Pf2, {0x51} },
+ { ASQRTSS, yxm, Pf3, {0x51} },
+ { ASTC, ynone, Px, {0xf9} },
+ { ASTD, ynone, Px, {0xfd} },
+ { ASTI, ynone, Px, {0xfb} },
+ { ASTMXCSR, ysvrs, Pm, {0xae,(03),0xae,(03)} },
+ { ASTOSB, ynone, Pb, {0xaa} },
+ { ASTOSL, ynone, Px, {0xab} },
+ { ASTOSQ, ynone, Pw, {0xab} },
+ { ASTOSW, ynone, Pe, {0xab} },
+ { ASUBB, yxorb, Pb, {0x2c,0x80,(05),0x28,0x2a} },
+ { ASUBL, yaddl, Px, {0x83,(05),0x2d,0x81,(05),0x29,0x2b} },
+ { ASUBPD, yxm, Pe, {0x5c} },
+ { ASUBPS, yxm, Pm, {0x5c} },
+ { ASUBQ, yaddl, Pw, {0x83,(05),0x2d,0x81,(05),0x29,0x2b} },
+ { ASUBSD, yxm, Pf2, {0x5c} },
+ { ASUBSS, yxm, Pf3, {0x5c} },
+ { ASUBW, yaddl, Pe, {0x83,(05),0x2d,0x81,(05),0x29,0x2b} },
+ { ASWAPGS, ynone, Pm, {0x01,0xf8} },
+ { ASYSCALL, ynone, Px, {0x0f,0x05} }, /* fast syscall */
+ { ATESTB, ytestb, Pb, {0xa8,0xf6,(00),0x84,0x84} },
+ { ATESTL, ytestl, Px, {0xa9,0xf7,(00),0x85,0x85} },
+ { ATESTQ, ytestl, Pw, {0xa9,0xf7,(00),0x85,0x85} },
+ { ATESTW, ytestl, Pe, {0xa9,0xf7,(00),0x85,0x85} },
{ ATEXT, ytext, Px },
- { AUCOMISD, yxcmp, Pe, 0x2e },
- { AUCOMISS, yxcmp, Pm, 0x2e },
- { AUNPCKHPD, yxm, Pe, 0x15 },
- { AUNPCKHPS, yxm, Pm, 0x15 },
- { AUNPCKLPD, yxm, Pe, 0x14 },
- { AUNPCKLPS, yxm, Pm, 0x14 },
- { AVERR, ydivl, Pm, 0x00,(04) },
- { AVERW, ydivl, Pm, 0x00,(05) },
- { AWAIT, ynone, Px, 0x9b },
- { AWORD, ybyte, Px, 2 },
- { AXCHGB, yml_mb, Pb, 0x86,0x86 },
- { AXCHGL, yxchg, Px, 0x90,0x90,0x87,0x87 },
- { AXCHGQ, yxchg, Pw, 0x90,0x90,0x87,0x87 },
- { AXCHGW, yxchg, Pe, 0x90,0x90,0x87,0x87 },
- { AXLAT, ynone, Px, 0xd7 },
- { AXORB, yxorb, Pb, 0x34,0x80,(06),0x30,0x32 },
- { AXORL, yxorl, Px, 0x83,(06),0x35,0x81,(06),0x31,0x33 },
- { AXORPD, yxm, Pe, 0x57 },
- { AXORPS, yxm, Pm, 0x57 },
- { AXORQ, yxorl, Pw, 0x83,(06),0x35,0x81,(06),0x31,0x33 },
- { AXORW, yxorl, Pe, 0x83,(06),0x35,0x81,(06),0x31,0x33 },
-
- { AFMOVB, yfmvx, Px, 0xdf,(04) },
- { AFMOVBP, yfmvp, Px, 0xdf,(06) },
- { AFMOVD, yfmvd, Px, 0xdd,(00),0xdd,(02),0xd9,(00),0xdd,(02) },
- { AFMOVDP, yfmvdp, Px, 0xdd,(03),0xdd,(03) },
- { AFMOVF, yfmvf, Px, 0xd9,(00),0xd9,(02) },
- { AFMOVFP, yfmvp, Px, 0xd9,(03) },
- { AFMOVL, yfmvf, Px, 0xdb,(00),0xdb,(02) },
- { AFMOVLP, yfmvp, Px, 0xdb,(03) },
- { AFMOVV, yfmvx, Px, 0xdf,(05) },
- { AFMOVVP, yfmvp, Px, 0xdf,(07) },
- { AFMOVW, yfmvf, Px, 0xdf,(00),0xdf,(02) },
- { AFMOVWP, yfmvp, Px, 0xdf,(03) },
- { AFMOVX, yfmvx, Px, 0xdb,(05) },
- { AFMOVXP, yfmvp, Px, 0xdb,(07) },
+ { AUCOMISD, yxcmp, Pe, {0x2e} },
+ { AUCOMISS, yxcmp, Pm, {0x2e} },
+ { AUNPCKHPD, yxm, Pe, {0x15} },
+ { AUNPCKHPS, yxm, Pm, {0x15} },
+ { AUNPCKLPD, yxm, Pe, {0x14} },
+ { AUNPCKLPS, yxm, Pm, {0x14} },
+ { AVERR, ydivl, Pm, {0x00,(04)} },
+ { AVERW, ydivl, Pm, {0x00,(05)} },
+ { AWAIT, ynone, Px, {0x9b} },
+ { AWORD, ybyte, Px, {2} },
+ { AXCHGB, yml_mb, Pb, {0x86,0x86} },
+ { AXCHGL, yxchg, Px, {0x90,0x90,0x87,0x87} },
+ { AXCHGQ, yxchg, Pw, {0x90,0x90,0x87,0x87} },
+ { AXCHGW, yxchg, Pe, {0x90,0x90,0x87,0x87} },
+ { AXLAT, ynone, Px, {0xd7} },
+ { AXORB, yxorb, Pb, {0x34,0x80,(06),0x30,0x32} },
+ { AXORL, yxorl, Px, {0x83,(06),0x35,0x81,(06),0x31,0x33} },
+ { AXORPD, yxm, Pe, {0x57} },
+ { AXORPS, yxm, Pm, {0x57} },
+ { AXORQ, yxorl, Pw, {0x83,(06),0x35,0x81,(06),0x31,0x33} },
+ { AXORW, yxorl, Pe, {0x83,(06),0x35,0x81,(06),0x31,0x33} },
+
+ { AFMOVB, yfmvx, Px, {0xdf,(04)} },
+ { AFMOVBP, yfmvp, Px, {0xdf,(06)} },
+ { AFMOVD, yfmvd, Px, {0xdd,(00),0xdd,(02),0xd9,(00),0xdd,(02)} },
+ { AFMOVDP, yfmvdp, Px, {0xdd,(03),0xdd,(03)} },
+ { AFMOVF, yfmvf, Px, {0xd9,(00),0xd9,(02)} },
+ { AFMOVFP, yfmvp, Px, {0xd9,(03)} },
+ { AFMOVL, yfmvf, Px, {0xdb,(00),0xdb,(02)} },
+ { AFMOVLP, yfmvp, Px, {0xdb,(03)} },
+ { AFMOVV, yfmvx, Px, {0xdf,(05)} },
+ { AFMOVVP, yfmvp, Px, {0xdf,(07)} },
+ { AFMOVW, yfmvf, Px, {0xdf,(00),0xdf,(02)} },
+ { AFMOVWP, yfmvp, Px, {0xdf,(03)} },
+ { AFMOVX, yfmvx, Px, {0xdb,(05)} },
+ { AFMOVXP, yfmvp, Px, {0xdb,(07)} },
{ AFCOMB },
{ AFCOMBP },
- { AFCOMD, yfadd, Px, 0xdc,(02),0xd8,(02),0xdc,(02) }, /* botch */
- { AFCOMDP, yfadd, Px, 0xdc,(03),0xd8,(03),0xdc,(03) }, /* botch */
- { AFCOMDPP, ycompp, Px, 0xde,(03) },
- { AFCOMF, yfmvx, Px, 0xd8,(02) },
- { AFCOMFP, yfmvx, Px, 0xd8,(03) },
- { AFCOML, yfmvx, Px, 0xda,(02) },
- { AFCOMLP, yfmvx, Px, 0xda,(03) },
- { AFCOMW, yfmvx, Px, 0xde,(02) },
- { AFCOMWP, yfmvx, Px, 0xde,(03) },
-
- { AFUCOM, ycompp, Px, 0xdd,(04) },
- { AFUCOMP, ycompp, Px, 0xdd,(05) },
- { AFUCOMPP, ycompp, Px, 0xda,(13) },
-
- { AFADDDP, yfaddp, Px, 0xde,(00) },
- { AFADDW, yfmvx, Px, 0xde,(00) },
- { AFADDL, yfmvx, Px, 0xda,(00) },
- { AFADDF, yfmvx, Px, 0xd8,(00) },
- { AFADDD, yfadd, Px, 0xdc,(00),0xd8,(00),0xdc,(00) },
-
- { AFMULDP, yfaddp, Px, 0xde,(01) },
- { AFMULW, yfmvx, Px, 0xde,(01) },
- { AFMULL, yfmvx, Px, 0xda,(01) },
- { AFMULF, yfmvx, Px, 0xd8,(01) },
- { AFMULD, yfadd, Px, 0xdc,(01),0xd8,(01),0xdc,(01) },
-
- { AFSUBDP, yfaddp, Px, 0xde,(05) },
- { AFSUBW, yfmvx, Px, 0xde,(04) },
- { AFSUBL, yfmvx, Px, 0xda,(04) },
- { AFSUBF, yfmvx, Px, 0xd8,(04) },
- { AFSUBD, yfadd, Px, 0xdc,(04),0xd8,(04),0xdc,(05) },
-
- { AFSUBRDP, yfaddp, Px, 0xde,(04) },
- { AFSUBRW, yfmvx, Px, 0xde,(05) },
- { AFSUBRL, yfmvx, Px, 0xda,(05) },
- { AFSUBRF, yfmvx, Px, 0xd8,(05) },
- { AFSUBRD, yfadd, Px, 0xdc,(05),0xd8,(05),0xdc,(04) },
-
- { AFDIVDP, yfaddp, Px, 0xde,(07) },
- { AFDIVW, yfmvx, Px, 0xde,(06) },
- { AFDIVL, yfmvx, Px, 0xda,(06) },
- { AFDIVF, yfmvx, Px, 0xd8,(06) },
- { AFDIVD, yfadd, Px, 0xdc,(06),0xd8,(06),0xdc,(07) },
-
- { AFDIVRDP, yfaddp, Px, 0xde,(06) },
- { AFDIVRW, yfmvx, Px, 0xde,(07) },
- { AFDIVRL, yfmvx, Px, 0xda,(07) },
- { AFDIVRF, yfmvx, Px, 0xd8,(07) },
- { AFDIVRD, yfadd, Px, 0xdc,(07),0xd8,(07),0xdc,(06) },
-
- { AFXCHD, yfxch, Px, 0xd9,(01),0xd9,(01) },
+ { AFCOMD, yfadd, Px, {0xdc,(02),0xd8,(02),0xdc,(02)} }, /* botch */
+ { AFCOMDP, yfadd, Px, {0xdc,(03),0xd8,(03),0xdc,(03)} }, /* botch */
+ { AFCOMDPP, ycompp, Px, {0xde,(03)} },
+ { AFCOMF, yfmvx, Px, {0xd8,(02)} },
+ { AFCOMFP, yfmvx, Px, {0xd8,(03)} },
+ { AFCOML, yfmvx, Px, {0xda,(02)} },
+ { AFCOMLP, yfmvx, Px, {0xda,(03)} },
+ { AFCOMW, yfmvx, Px, {0xde,(02)} },
+ { AFCOMWP, yfmvx, Px, {0xde,(03)} },
+
+ { AFUCOM, ycompp, Px, {0xdd,(04)} },
+ { AFUCOMP, ycompp, Px, {0xdd,(05)} },
+ { AFUCOMPP, ycompp, Px, {0xda,(13)} },
+
+ { AFADDDP, yfaddp, Px, {0xde,(00)} },
+ { AFADDW, yfmvx, Px, {0xde,(00)} },
+ { AFADDL, yfmvx, Px, {0xda,(00)} },
+ { AFADDF, yfmvx, Px, {0xd8,(00)} },
+ { AFADDD, yfadd, Px, {0xdc,(00),0xd8,(00),0xdc,(00)} },
+
+ { AFMULDP, yfaddp, Px, {0xde,(01)} },
+ { AFMULW, yfmvx, Px, {0xde,(01)} },
+ { AFMULL, yfmvx, Px, {0xda,(01)} },
+ { AFMULF, yfmvx, Px, {0xd8,(01)} },
+ { AFMULD, yfadd, Px, {0xdc,(01),0xd8,(01),0xdc,(01)} },
+
+ { AFSUBDP, yfaddp, Px, {0xde,(05)} },
+ { AFSUBW, yfmvx, Px, {0xde,(04)} },
+ { AFSUBL, yfmvx, Px, {0xda,(04)} },
+ { AFSUBF, yfmvx, Px, {0xd8,(04)} },
+ { AFSUBD, yfadd, Px, {0xdc,(04),0xd8,(04),0xdc,(05)} },
+
+ { AFSUBRDP, yfaddp, Px, {0xde,(04)} },
+ { AFSUBRW, yfmvx, Px, {0xde,(05)} },
+ { AFSUBRL, yfmvx, Px, {0xda,(05)} },
+ { AFSUBRF, yfmvx, Px, {0xd8,(05)} },
+ { AFSUBRD, yfadd, Px, {0xdc,(05),0xd8,(05),0xdc,(04)} },
+
+ { AFDIVDP, yfaddp, Px, {0xde,(07)} },
+ { AFDIVW, yfmvx, Px, {0xde,(06)} },
+ { AFDIVL, yfmvx, Px, {0xda,(06)} },
+ { AFDIVF, yfmvx, Px, {0xd8,(06)} },
+ { AFDIVD, yfadd, Px, {0xdc,(06),0xd8,(06),0xdc,(07)} },
+
+ { AFDIVRDP, yfaddp, Px, {0xde,(06)} },
+ { AFDIVRW, yfmvx, Px, {0xde,(07)} },
+ { AFDIVRL, yfmvx, Px, {0xda,(07)} },
+ { AFDIVRF, yfmvx, Px, {0xd8,(07)} },
+ { AFDIVRD, yfadd, Px, {0xdc,(07),0xd8,(07),0xdc,(06)} },
+
+ { AFXCHD, yfxch, Px, {0xd9,(01),0xd9,(01)} },
{ AFFREE },
- { AFLDCW, ystcw, Px, 0xd9,(05),0xd9,(05) },
- { AFLDENV, ystcw, Px, 0xd9,(04),0xd9,(04) },
- { AFRSTOR, ysvrs, Px, 0xdd,(04),0xdd,(04) },
- { AFSAVE, ysvrs, Px, 0xdd,(06),0xdd,(06) },
- { AFSTCW, ystcw, Px, 0xd9,(07),0xd9,(07) },
- { AFSTENV, ystcw, Px, 0xd9,(06),0xd9,(06) },
- { AFSTSW, ystsw, Px, 0xdd,(07),0xdf,0xe0 },
- { AF2XM1, ynone, Px, 0xd9, 0xf0 },
- { AFABS, ynone, Px, 0xd9, 0xe1 },
- { AFCHS, ynone, Px, 0xd9, 0xe0 },
- { AFCLEX, ynone, Px, 0xdb, 0xe2 },
- { AFCOS, ynone, Px, 0xd9, 0xff },
- { AFDECSTP, ynone, Px, 0xd9, 0xf6 },
- { AFINCSTP, ynone, Px, 0xd9, 0xf7 },
- { AFINIT, ynone, Px, 0xdb, 0xe3 },
- { AFLD1, ynone, Px, 0xd9, 0xe8 },
- { AFLDL2E, ynone, Px, 0xd9, 0xea },
- { AFLDL2T, ynone, Px, 0xd9, 0xe9 },
- { AFLDLG2, ynone, Px, 0xd9, 0xec },
- { AFLDLN2, ynone, Px, 0xd9, 0xed },
- { AFLDPI, ynone, Px, 0xd9, 0xeb },
- { AFLDZ, ynone, Px, 0xd9, 0xee },
- { AFNOP, ynone, Px, 0xd9, 0xd0 },
- { AFPATAN, ynone, Px, 0xd9, 0xf3 },
- { AFPREM, ynone, Px, 0xd9, 0xf8 },
- { AFPREM1, ynone, Px, 0xd9, 0xf5 },
- { AFPTAN, ynone, Px, 0xd9, 0xf2 },
- { AFRNDINT, ynone, Px, 0xd9, 0xfc },
- { AFSCALE, ynone, Px, 0xd9, 0xfd },
- { AFSIN, ynone, Px, 0xd9, 0xfe },
- { AFSINCOS, ynone, Px, 0xd9, 0xfb },
- { AFSQRT, ynone, Px, 0xd9, 0xfa },
- { AFTST, ynone, Px, 0xd9, 0xe4 },
- { AFXAM, ynone, Px, 0xd9, 0xe5 },
- { AFXTRACT, ynone, Px, 0xd9, 0xf4 },
- { AFYL2X, ynone, Px, 0xd9, 0xf1 },
- { AFYL2XP1, ynone, Px, 0xd9, 0xf9 },
-
- { ACMPXCHGB, yrb_mb, Pb, 0x0f,0xb0 },
- { ACMPXCHGL, yrl_ml, Px, 0x0f,0xb1 },
- { ACMPXCHGW, yrl_ml, Pe, 0x0f,0xb1 },
- { ACMPXCHGQ, yrl_ml, Pw, 0x0f,0xb1 },
- { ACMPXCHG8B, yscond, Pm, 0xc7,(01) },
- { AINVD, ynone, Pm, 0x08 },
- { AINVLPG, ymbs, Pm, 0x01,(07) },
- { ALFENCE, ynone, Pm, 0xae,0xe8 },
- { AMFENCE, ynone, Pm, 0xae,0xf0 },
- { AMOVNTIL, yrl_ml, Pm, 0xc3 },
- { AMOVNTIQ, yrl_ml, Pw, 0x0f,0xc3 },
- { ARDMSR, ynone, Pm, 0x32 },
- { ARDPMC, ynone, Pm, 0x33 },
- { ARDTSC, ynone, Pm, 0x31 },
- { ARSM, ynone, Pm, 0xaa },
- { ASFENCE, ynone, Pm, 0xae,0xf8 },
- { ASYSRET, ynone, Pm, 0x07 },
- { AWBINVD, ynone, Pm, 0x09 },
- { AWRMSR, ynone, Pm, 0x30 },
-
- { AXADDB, yrb_mb, Pb, 0x0f,0xc0 },
- { AXADDL, yrl_ml, Px, 0x0f,0xc1 },
- { AXADDQ, yrl_ml, Pw, 0x0f,0xc1 },
- { AXADDW, yrl_ml, Pe, 0x0f,0xc1 },
-
- { ACRC32B, ycrc32l,Px, 0xf2,0x0f,0x38,0xf0,0 },
- { ACRC32Q, ycrc32l,Pw, 0xf2,0x0f,0x38,0xf1,0 },
+ { AFLDCW, ystcw, Px, {0xd9,(05),0xd9,(05)} },
+ { AFLDENV, ystcw, Px, {0xd9,(04),0xd9,(04)} },
+ { AFRSTOR, ysvrs, Px, {0xdd,(04),0xdd,(04)} },
+ { AFSAVE, ysvrs, Px, {0xdd,(06),0xdd,(06)} },
+ { AFSTCW, ystcw, Px, {0xd9,(07),0xd9,(07)} },
+ { AFSTENV, ystcw, Px, {0xd9,(06),0xd9,(06)} },
+ { AFSTSW, ystsw, Px, {0xdd,(07),0xdf,0xe0} },
+ { AF2XM1, ynone, Px, {0xd9, 0xf0} },
+ { AFABS, ynone, Px, {0xd9, 0xe1} },
+ { AFCHS, ynone, Px, {0xd9, 0xe0} },
+ { AFCLEX, ynone, Px, {0xdb, 0xe2} },
+ { AFCOS, ynone, Px, {0xd9, 0xff} },
+ { AFDECSTP, ynone, Px, {0xd9, 0xf6} },
+ { AFINCSTP, ynone, Px, {0xd9, 0xf7} },
+ { AFINIT, ynone, Px, {0xdb, 0xe3} },
+ { AFLD1, ynone, Px, {0xd9, 0xe8} },
+ { AFLDL2E, ynone, Px, {0xd9, 0xea} },
+ { AFLDL2T, ynone, Px, {0xd9, 0xe9} },
+ { AFLDLG2, ynone, Px, {0xd9, 0xec} },
+ { AFLDLN2, ynone, Px, {0xd9, 0xed} },
+ { AFLDPI, ynone, Px, {0xd9, 0xeb} },
+ { AFLDZ, ynone, Px, {0xd9, 0xee} },
+ { AFNOP, ynone, Px, {0xd9, 0xd0} },
+ { AFPATAN, ynone, Px, {0xd9, 0xf3} },
+ { AFPREM, ynone, Px, {0xd9, 0xf8} },
+ { AFPREM1, ynone, Px, {0xd9, 0xf5} },
+ { AFPTAN, ynone, Px, {0xd9, 0xf2} },
+ { AFRNDINT, ynone, Px, {0xd9, 0xfc} },
+ { AFSCALE, ynone, Px, {0xd9, 0xfd} },
+ { AFSIN, ynone, Px, {0xd9, 0xfe} },
+ { AFSINCOS, ynone, Px, {0xd9, 0xfb} },
+ { AFSQRT, ynone, Px, {0xd9, 0xfa} },
+ { AFTST, ynone, Px, {0xd9, 0xe4} },
+ { AFXAM, ynone, Px, {0xd9, 0xe5} },
+ { AFXTRACT, ynone, Px, {0xd9, 0xf4} },
+ { AFYL2X, ynone, Px, {0xd9, 0xf1} },
+ { AFYL2XP1, ynone, Px, {0xd9, 0xf9} },
+
+ { ACMPXCHGB, yrb_mb, Pb, {0x0f,0xb0} },
+ { ACMPXCHGL, yrl_ml, Px, {0x0f,0xb1} },
+ { ACMPXCHGW, yrl_ml, Pe, {0x0f,0xb1} },
+ { ACMPXCHGQ, yrl_ml, Pw, {0x0f,0xb1} },
+ { ACMPXCHG8B, yscond, Pm, {0xc7,(01)} },
+ { AINVD, ynone, Pm, {0x08} },
+ { AINVLPG, ymbs, Pm, {0x01,(07)} },
+ { ALFENCE, ynone, Pm, {0xae,0xe8} },
+ { AMFENCE, ynone, Pm, {0xae,0xf0} },
+ { AMOVNTIL, yrl_ml, Pm, {0xc3} },
+ { AMOVNTIQ, yrl_ml, Pw, {0x0f,0xc3} },
+ { ARDMSR, ynone, Pm, {0x32} },
+ { ARDPMC, ynone, Pm, {0x33} },
+ { ARDTSC, ynone, Pm, {0x31} },
+ { ARSM, ynone, Pm, {0xaa} },
+ { ASFENCE, ynone, Pm, {0xae,0xf8} },
+ { ASYSRET, ynone, Pm, {0x07} },
+ { AWBINVD, ynone, Pm, {0x09} },
+ { AWRMSR, ynone, Pm, {0x30} },
+
+ { AXADDB, yrb_mb, Pb, {0x0f,0xc0} },
+ { AXADDL, yrl_ml, Px, {0x0f,0xc1} },
+ { AXADDQ, yrl_ml, Pw, {0x0f,0xc1} },
+ { AXADDW, yrl_ml, Pe, {0x0f,0xc1} },
+
+ { ACRC32B, ycrc32l,Px, {0xf2,0x0f,0x38,0xf0,0} },
+ { ACRC32Q, ycrc32l,Pw, {0xf2,0x0f,0x38,0xf1,0} },
- { APREFETCHT0, yprefetch, Pm, 0x18,(01) },
- { APREFETCHT1, yprefetch, Pm, 0x18,(02) },
- { APREFETCHT2, yprefetch, Pm, 0x18,(03) },
- { APREFETCHNTA, yprefetch, Pm, 0x18,(00) },
+ { APREFETCHT0, yprefetch, Pm, {0x18,(01)} },
+ { APREFETCHT1, yprefetch, Pm, {0x18,(02)} },
+ { APREFETCHT2, yprefetch, Pm, {0x18,(03)} },
+ { APREFETCHNTA, yprefetch, Pm, {0x18,(00)} },
- { AMOVQL, yrl_ml, Px, 0x89 },
+ { AMOVQL, yrl_ml, Px, {0x89} },
- { AUNDEF, ynone, Px, 0x0f, 0x0b },
+ { AUNDEF, ynone, Px, {0x0f, 0x0b} },
- { AAESENC, yaes, Pq, 0x38,0xdc,(0) },
- { AAESENCLAST, yaes, Pq, 0x38,0xdd,(0) },
- { AAESDEC, yaes, Pq, 0x38,0xde,(0) },
- { AAESDECLAST, yaes, Pq, 0x38,0xdf,(0) },
- { AAESIMC, yaes, Pq, 0x38,0xdb,(0) },
- { AAESKEYGENASSIST, yaes2, Pq, 0x3a,0xdf,(0) },
+ { AAESENC, yaes, Pq, {0x38,0xdc,(0)} },
+ { AAESENCLAST, yaes, Pq, {0x38,0xdd,(0)} },
+ { AAESDEC, yaes, Pq, {0x38,0xde,(0)} },
+ { AAESDECLAST, yaes, Pq, {0x38,0xdf,(0)} },
+ { AAESIMC, yaes, Pq, {0x38,0xdb,(0)} },
+ { AAESKEYGENASSIST, yaes2, Pq, {0x3a,0xdf,(0)} },
- { APSHUFD, yaes2, Pq, 0x70,(0) },
- { APCLMULQDQ, yxshuf, Pq, 0x3a,0x44,0 },
+ { APSHUFD, yaes2, Pq, {0x70,(0)} },
+ { APCLMULQDQ, yxshuf, Pq, {0x3a,0x44,0} },
- { AUSEFIELD, ynop, Px, 0,0 },
+ { AUSEFIELD, ynop, Px, {0,0} },
{ ATYPE },
- { AFUNCDATA, yfuncdata, Px, 0,0 },
- { APCDATA, ypcdata, Px, 0,0 },
+ { AFUNCDATA, yfuncdata, Px, {0,0} },
+ { APCDATA, ypcdata, Px, {0,0} },
{ ACHECKNIL },
{ AVARDEF },
{ AVARKILL },
- { ADUFFCOPY, yduff, Px, 0xe8 },
- { ADUFFZERO, yduff, Px, 0xe8 },
+ { ADUFFCOPY, yduff, Px, {0xe8} },
+ { ADUFFZERO, yduff, Px, {0xe8} },
{ AEND },
- 0
+ {0}
};
static Optab* opindex[ALAST+1];
static vlong vaddr(Link*, Addr*, Reloc*);
+// isextern reports whether s describes an external symbol that must avoid pc-relative addressing.
+// This happens on systems like Solaris that call .so functions instead of system calls.
+// It does not seem to be necessary for any other systems. This is probably working
+// around a Solaris-specific bug that should be fixed differently, but we don't know
+// what that bug is. And this does fix it.
+static int
+isextern(LSym *s)
+{
+ // All the Solaris dynamic imports from libc.so begin with "libc·", which
+ // the compiler rewrites to "libc." by the time liblink gets it.
+ return strncmp(s->name, "libc.", 5) == 0;
+}
+
// single-instruction no-ops of various lengths.
// constructed by hand and disassembled with gdb to verify.
// see http://www.agner.org/optimize/optimizing_assembly.pdf for discussion.
@@ -1901,7 +1912,6 @@ prefixof(Link *ctxt, Addr *a)
case Hlinux:
case Hnetbsd:
case Hopenbsd:
- case Hplan9:
case Hsolaris:
return 0x64; // FS
case Hdarwin:
@@ -1935,10 +1945,9 @@ oclass(Link *ctxt, Addr *a)
switch(a->index) {
case D_EXTERN:
case D_STATIC:
- if(ctxt->flag_shared || ctxt->headtype == Hnacl)
- return Yiauto;
- else
- return Yi32; /* TO DO: Yi64 */
+ if(a->sym != nil && isextern(a->sym))
+ return Yi32;
+ return Yiauto; // use pc-relative addressing
case D_AUTO:
case D_PARAM:
return Yiauto;
@@ -2115,7 +2124,7 @@ oclass(Link *ctxt, Addr *a)
return Yi32; /* unsigned */
return Yi64;
}
- return Yi32; /* TO DO: D_ADDR as Yi64 */
+ return Yi32;
case D_BRANCH:
return Ybr;
@@ -2288,20 +2297,22 @@ vaddr(Link *ctxt, Addr *a, Reloc *r)
ctxt->diag("need reloc for %D", a);
sysfatal("reloc");
}
- r->siz = 4; // TODO: 8 for external symbols
+ if(isextern(s)) {
+ r->siz = 4;
+ r->type = R_ADDR;
+ } else {
+ r->siz = 4;
+ r->type = R_PCREL;
+ }
r->off = -1; // caller must fill in
r->sym = s;
r->add = v;
v = 0;
- if(ctxt->flag_shared || ctxt->headtype == Hnacl) {
- if(s->type == STLSBSS) {
- r->xadd = r->add - r->siz;
- r->type = R_TLS;
- r->xsym = s;
- } else
- r->type = R_PCREL;
- } else
- r->type = R_ADDR;
+ if(s->type == STLSBSS) {
+ r->xadd = r->add - r->siz;
+ r->type = R_TLS;
+ r->xsym = s;
+ }
break;
case D_INDIR+D_TLS:
@@ -2336,9 +2347,9 @@ asmandsz(Link *ctxt, Addr *a, int r, int rex, int m64)
switch(t) {
default:
goto bad;
- case D_STATIC:
case D_EXTERN:
- if(ctxt->flag_shared || ctxt->headtype == Hnacl)
+ case D_STATIC:
+ if(!isextern(a->sym))
goto bad;
t = D_NONE;
v = vaddr(ctxt, a, &rel);
@@ -2402,7 +2413,7 @@ asmandsz(Link *ctxt, Addr *a, int r, int rex, int m64)
ctxt->rexflag |= (regrex[t] & Rxb) | rex;
if(t == D_NONE || (D_CS <= t && t <= D_GS) || t == D_TLS) {
- if((ctxt->flag_shared || ctxt->headtype == Hnacl) && t == D_NONE && (a->type == D_STATIC || a->type == D_EXTERN) || ctxt->asmode != 64) {
+ if((a->sym == nil || !isextern(a->sym)) && t == D_NONE && (a->type == D_STATIC || a->type == D_EXTERN) || ctxt->asmode != 64) {
*ctxt->andptr++ = (0 << 6) | (5 << 0) | (r << 3);
goto putrelv;
}
@@ -2485,7 +2496,7 @@ asmando(Link *ctxt, Addr *a, int o)
}
static void
-bytereg(Addr *a, char *t)
+bytereg(Addr *a, uint8 *t)
{
if(a->index == D_NONE && (a->type >= D_AX && a->type <= D_R15)) {
a->type = D_AL + (a->type-D_AX);
@@ -2493,139 +2504,141 @@ bytereg(Addr *a, char *t)
}
}
-#define E 0xff
+enum {
+ E = 0xff,
+};
static Movtab ymovtab[] =
{
/* push */
- {APUSHL, Ycs, Ynone, 0, 0x0e,E,0,0},
- {APUSHL, Yss, Ynone, 0, 0x16,E,0,0},
- {APUSHL, Yds, Ynone, 0, 0x1e,E,0,0},
- {APUSHL, Yes, Ynone, 0, 0x06,E,0,0},
- {APUSHL, Yfs, Ynone, 0, 0x0f,0xa0,E,0},
- {APUSHL, Ygs, Ynone, 0, 0x0f,0xa8,E,0},
- {APUSHQ, Yfs, Ynone, 0, 0x0f,0xa0,E,0},
- {APUSHQ, Ygs, Ynone, 0, 0x0f,0xa8,E,0},
-
- {APUSHW, Ycs, Ynone, 0, Pe,0x0e,E,0},
- {APUSHW, Yss, Ynone, 0, Pe,0x16,E,0},
- {APUSHW, Yds, Ynone, 0, Pe,0x1e,E,0},
- {APUSHW, Yes, Ynone, 0, Pe,0x06,E,0},
- {APUSHW, Yfs, Ynone, 0, Pe,0x0f,0xa0,E},
- {APUSHW, Ygs, Ynone, 0, Pe,0x0f,0xa8,E},
+ {APUSHL, Ycs, Ynone, 0, {0x0e,E,0,0}},
+ {APUSHL, Yss, Ynone, 0, {0x16,E,0,0}},
+ {APUSHL, Yds, Ynone, 0, {0x1e,E,0,0}},
+ {APUSHL, Yes, Ynone, 0, {0x06,E,0,0}},
+ {APUSHL, Yfs, Ynone, 0, {0x0f,0xa0,E,0}},
+ {APUSHL, Ygs, Ynone, 0, {0x0f,0xa8,E,0}},
+ {APUSHQ, Yfs, Ynone, 0, {0x0f,0xa0,E,0}},
+ {APUSHQ, Ygs, Ynone, 0, {0x0f,0xa8,E,0}},
+
+ {APUSHW, Ycs, Ynone, 0, {Pe,0x0e,E,0}},
+ {APUSHW, Yss, Ynone, 0, {Pe,0x16,E,0}},
+ {APUSHW, Yds, Ynone, 0, {Pe,0x1e,E,0}},
+ {APUSHW, Yes, Ynone, 0, {Pe,0x06,E,0}},
+ {APUSHW, Yfs, Ynone, 0, {Pe,0x0f,0xa0,E}},
+ {APUSHW, Ygs, Ynone, 0, {Pe,0x0f,0xa8,E}},
/* pop */
- {APOPL, Ynone, Yds, 0, 0x1f,E,0,0},
- {APOPL, Ynone, Yes, 0, 0x07,E,0,0},
- {APOPL, Ynone, Yss, 0, 0x17,E,0,0},
- {APOPL, Ynone, Yfs, 0, 0x0f,0xa1,E,0},
- {APOPL, Ynone, Ygs, 0, 0x0f,0xa9,E,0},
- {APOPQ, Ynone, Yfs, 0, 0x0f,0xa1,E,0},
- {APOPQ, Ynone, Ygs, 0, 0x0f,0xa9,E,0},
-
- {APOPW, Ynone, Yds, 0, Pe,0x1f,E,0},
- {APOPW, Ynone, Yes, 0, Pe,0x07,E,0},
- {APOPW, Ynone, Yss, 0, Pe,0x17,E,0},
- {APOPW, Ynone, Yfs, 0, Pe,0x0f,0xa1,E},
- {APOPW, Ynone, Ygs, 0, Pe,0x0f,0xa9,E},
+ {APOPL, Ynone, Yds, 0, {0x1f,E,0,0}},
+ {APOPL, Ynone, Yes, 0, {0x07,E,0,0}},
+ {APOPL, Ynone, Yss, 0, {0x17,E,0,0}},
+ {APOPL, Ynone, Yfs, 0, {0x0f,0xa1,E,0}},
+ {APOPL, Ynone, Ygs, 0, {0x0f,0xa9,E,0}},
+ {APOPQ, Ynone, Yfs, 0, {0x0f,0xa1,E,0}},
+ {APOPQ, Ynone, Ygs, 0, {0x0f,0xa9,E,0}},
+
+ {APOPW, Ynone, Yds, 0, {Pe,0x1f,E,0}},
+ {APOPW, Ynone, Yes, 0, {Pe,0x07,E,0}},
+ {APOPW, Ynone, Yss, 0, {Pe,0x17,E,0}},
+ {APOPW, Ynone, Yfs, 0, {Pe,0x0f,0xa1,E}},
+ {APOPW, Ynone, Ygs, 0, {Pe,0x0f,0xa9,E}},
/* mov seg */
- {AMOVW, Yes, Yml, 1, 0x8c,0,0,0},
- {AMOVW, Ycs, Yml, 1, 0x8c,1,0,0},
- {AMOVW, Yss, Yml, 1, 0x8c,2,0,0},
- {AMOVW, Yds, Yml, 1, 0x8c,3,0,0},
- {AMOVW, Yfs, Yml, 1, 0x8c,4,0,0},
- {AMOVW, Ygs, Yml, 1, 0x8c,5,0,0},
-
- {AMOVW, Yml, Yes, 2, 0x8e,0,0,0},
- {AMOVW, Yml, Ycs, 2, 0x8e,1,0,0},
- {AMOVW, Yml, Yss, 2, 0x8e,2,0,0},
- {AMOVW, Yml, Yds, 2, 0x8e,3,0,0},
- {AMOVW, Yml, Yfs, 2, 0x8e,4,0,0},
- {AMOVW, Yml, Ygs, 2, 0x8e,5,0,0},
+ {AMOVW, Yes, Yml, 1, {0x8c,0,0,0}},
+ {AMOVW, Ycs, Yml, 1, {0x8c,1,0,0}},
+ {AMOVW, Yss, Yml, 1, {0x8c,2,0,0}},
+ {AMOVW, Yds, Yml, 1, {0x8c,3,0,0}},
+ {AMOVW, Yfs, Yml, 1, {0x8c,4,0,0}},
+ {AMOVW, Ygs, Yml, 1, {0x8c,5,0,0}},
+
+ {AMOVW, Yml, Yes, 2, {0x8e,0,0,0}},
+ {AMOVW, Yml, Ycs, 2, {0x8e,1,0,0}},
+ {AMOVW, Yml, Yss, 2, {0x8e,2,0,0}},
+ {AMOVW, Yml, Yds, 2, {0x8e,3,0,0}},
+ {AMOVW, Yml, Yfs, 2, {0x8e,4,0,0}},
+ {AMOVW, Yml, Ygs, 2, {0x8e,5,0,0}},
/* mov cr */
- {AMOVL, Ycr0, Yml, 3, 0x0f,0x20,0,0},
- {AMOVL, Ycr2, Yml, 3, 0x0f,0x20,2,0},
- {AMOVL, Ycr3, Yml, 3, 0x0f,0x20,3,0},
- {AMOVL, Ycr4, Yml, 3, 0x0f,0x20,4,0},
- {AMOVL, Ycr8, Yml, 3, 0x0f,0x20,8,0},
- {AMOVQ, Ycr0, Yml, 3, 0x0f,0x20,0,0},
- {AMOVQ, Ycr2, Yml, 3, 0x0f,0x20,2,0},
- {AMOVQ, Ycr3, Yml, 3, 0x0f,0x20,3,0},
- {AMOVQ, Ycr4, Yml, 3, 0x0f,0x20,4,0},
- {AMOVQ, Ycr8, Yml, 3, 0x0f,0x20,8,0},
-
- {AMOVL, Yml, Ycr0, 4, 0x0f,0x22,0,0},
- {AMOVL, Yml, Ycr2, 4, 0x0f,0x22,2,0},
- {AMOVL, Yml, Ycr3, 4, 0x0f,0x22,3,0},
- {AMOVL, Yml, Ycr4, 4, 0x0f,0x22,4,0},
- {AMOVL, Yml, Ycr8, 4, 0x0f,0x22,8,0},
- {AMOVQ, Yml, Ycr0, 4, 0x0f,0x22,0,0},
- {AMOVQ, Yml, Ycr2, 4, 0x0f,0x22,2,0},
- {AMOVQ, Yml, Ycr3, 4, 0x0f,0x22,3,0},
- {AMOVQ, Yml, Ycr4, 4, 0x0f,0x22,4,0},
- {AMOVQ, Yml, Ycr8, 4, 0x0f,0x22,8,0},
+ {AMOVL, Ycr0, Yml, 3, {0x0f,0x20,0,0}},
+ {AMOVL, Ycr2, Yml, 3, {0x0f,0x20,2,0}},
+ {AMOVL, Ycr3, Yml, 3, {0x0f,0x20,3,0}},
+ {AMOVL, Ycr4, Yml, 3, {0x0f,0x20,4,0}},
+ {AMOVL, Ycr8, Yml, 3, {0x0f,0x20,8,0}},
+ {AMOVQ, Ycr0, Yml, 3, {0x0f,0x20,0,0}},
+ {AMOVQ, Ycr2, Yml, 3, {0x0f,0x20,2,0}},
+ {AMOVQ, Ycr3, Yml, 3, {0x0f,0x20,3,0}},
+ {AMOVQ, Ycr4, Yml, 3, {0x0f,0x20,4,0}},
+ {AMOVQ, Ycr8, Yml, 3, {0x0f,0x20,8,0}},
+
+ {AMOVL, Yml, Ycr0, 4, {0x0f,0x22,0,0}},
+ {AMOVL, Yml, Ycr2, 4, {0x0f,0x22,2,0}},
+ {AMOVL, Yml, Ycr3, 4, {0x0f,0x22,3,0}},
+ {AMOVL, Yml, Ycr4, 4, {0x0f,0x22,4,0}},
+ {AMOVL, Yml, Ycr8, 4, {0x0f,0x22,8,0}},
+ {AMOVQ, Yml, Ycr0, 4, {0x0f,0x22,0,0}},
+ {AMOVQ, Yml, Ycr2, 4, {0x0f,0x22,2,0}},
+ {AMOVQ, Yml, Ycr3, 4, {0x0f,0x22,3,0}},
+ {AMOVQ, Yml, Ycr4, 4, {0x0f,0x22,4,0}},
+ {AMOVQ, Yml, Ycr8, 4, {0x0f,0x22,8,0}},
/* mov dr */
- {AMOVL, Ydr0, Yml, 3, 0x0f,0x21,0,0},
- {AMOVL, Ydr6, Yml, 3, 0x0f,0x21,6,0},
- {AMOVL, Ydr7, Yml, 3, 0x0f,0x21,7,0},
- {AMOVQ, Ydr0, Yml, 3, 0x0f,0x21,0,0},
- {AMOVQ, Ydr6, Yml, 3, 0x0f,0x21,6,0},
- {AMOVQ, Ydr7, Yml, 3, 0x0f,0x21,7,0},
-
- {AMOVL, Yml, Ydr0, 4, 0x0f,0x23,0,0},
- {AMOVL, Yml, Ydr6, 4, 0x0f,0x23,6,0},
- {AMOVL, Yml, Ydr7, 4, 0x0f,0x23,7,0},
- {AMOVQ, Yml, Ydr0, 4, 0x0f,0x23,0,0},
- {AMOVQ, Yml, Ydr6, 4, 0x0f,0x23,6,0},
- {AMOVQ, Yml, Ydr7, 4, 0x0f,0x23,7,0},
+ {AMOVL, Ydr0, Yml, 3, {0x0f,0x21,0,0}},
+ {AMOVL, Ydr6, Yml, 3, {0x0f,0x21,6,0}},
+ {AMOVL, Ydr7, Yml, 3, {0x0f,0x21,7,0}},
+ {AMOVQ, Ydr0, Yml, 3, {0x0f,0x21,0,0}},
+ {AMOVQ, Ydr6, Yml, 3, {0x0f,0x21,6,0}},
+ {AMOVQ, Ydr7, Yml, 3, {0x0f,0x21,7,0}},
+
+ {AMOVL, Yml, Ydr0, 4, {0x0f,0x23,0,0}},
+ {AMOVL, Yml, Ydr6, 4, {0x0f,0x23,6,0}},
+ {AMOVL, Yml, Ydr7, 4, {0x0f,0x23,7,0}},
+ {AMOVQ, Yml, Ydr0, 4, {0x0f,0x23,0,0}},
+ {AMOVQ, Yml, Ydr6, 4, {0x0f,0x23,6,0}},
+ {AMOVQ, Yml, Ydr7, 4, {0x0f,0x23,7,0}},
/* mov tr */
- {AMOVL, Ytr6, Yml, 3, 0x0f,0x24,6,0},
- {AMOVL, Ytr7, Yml, 3, 0x0f,0x24,7,0},
+ {AMOVL, Ytr6, Yml, 3, {0x0f,0x24,6,0}},
+ {AMOVL, Ytr7, Yml, 3, {0x0f,0x24,7,0}},
- {AMOVL, Yml, Ytr6, 4, 0x0f,0x26,6,E},
- {AMOVL, Yml, Ytr7, 4, 0x0f,0x26,7,E},
+ {AMOVL, Yml, Ytr6, 4, {0x0f,0x26,6,E}},
+ {AMOVL, Yml, Ytr7, 4, {0x0f,0x26,7,E}},
/* lgdt, sgdt, lidt, sidt */
- {AMOVL, Ym, Ygdtr, 4, 0x0f,0x01,2,0},
- {AMOVL, Ygdtr, Ym, 3, 0x0f,0x01,0,0},
- {AMOVL, Ym, Yidtr, 4, 0x0f,0x01,3,0},
- {AMOVL, Yidtr, Ym, 3, 0x0f,0x01,1,0},
- {AMOVQ, Ym, Ygdtr, 4, 0x0f,0x01,2,0},
- {AMOVQ, Ygdtr, Ym, 3, 0x0f,0x01,0,0},
- {AMOVQ, Ym, Yidtr, 4, 0x0f,0x01,3,0},
- {AMOVQ, Yidtr, Ym, 3, 0x0f,0x01,1,0},
+ {AMOVL, Ym, Ygdtr, 4, {0x0f,0x01,2,0}},
+ {AMOVL, Ygdtr, Ym, 3, {0x0f,0x01,0,0}},
+ {AMOVL, Ym, Yidtr, 4, {0x0f,0x01,3,0}},
+ {AMOVL, Yidtr, Ym, 3, {0x0f,0x01,1,0}},
+ {AMOVQ, Ym, Ygdtr, 4, {0x0f,0x01,2,0}},
+ {AMOVQ, Ygdtr, Ym, 3, {0x0f,0x01,0,0}},
+ {AMOVQ, Ym, Yidtr, 4, {0x0f,0x01,3,0}},
+ {AMOVQ, Yidtr, Ym, 3, {0x0f,0x01,1,0}},
/* lldt, sldt */
- {AMOVW, Yml, Yldtr, 4, 0x0f,0x00,2,0},
- {AMOVW, Yldtr, Yml, 3, 0x0f,0x00,0,0},
+ {AMOVW, Yml, Yldtr, 4, {0x0f,0x00,2,0}},
+ {AMOVW, Yldtr, Yml, 3, {0x0f,0x00,0,0}},
/* lmsw, smsw */
- {AMOVW, Yml, Ymsw, 4, 0x0f,0x01,6,0},
- {AMOVW, Ymsw, Yml, 3, 0x0f,0x01,4,0},
+ {AMOVW, Yml, Ymsw, 4, {0x0f,0x01,6,0}},
+ {AMOVW, Ymsw, Yml, 3, {0x0f,0x01,4,0}},
/* ltr, str */
- {AMOVW, Yml, Ytask, 4, 0x0f,0x00,3,0},
- {AMOVW, Ytask, Yml, 3, 0x0f,0x00,1,0},
+ {AMOVW, Yml, Ytask, 4, {0x0f,0x00,3,0}},
+ {AMOVW, Ytask, Yml, 3, {0x0f,0x00,1,0}},
/* load full pointer */
- {AMOVL, Yml, Ycol, 5, 0,0,0,0},
- {AMOVW, Yml, Ycol, 5, Pe,0,0,0},
+ {AMOVL, Yml, Ycol, 5, {0,0,0,0}},
+ {AMOVW, Yml, Ycol, 5, {Pe,0,0,0}},
/* double shift */
- {ASHLL, Ycol, Yml, 6, 0xa4,0xa5,0,0},
- {ASHRL, Ycol, Yml, 6, 0xac,0xad,0,0},
- {ASHLQ, Ycol, Yml, 6, Pw,0xa4,0xa5,0},
- {ASHRQ, Ycol, Yml, 6, Pw,0xac,0xad,0},
- {ASHLW, Ycol, Yml, 6, Pe,0xa4,0xa5,0},
- {ASHRW, Ycol, Yml, 6, Pe,0xac,0xad,0},
+ {ASHLL, Ycol, Yml, 6, {0xa4,0xa5,0,0}},
+ {ASHRL, Ycol, Yml, 6, {0xac,0xad,0,0}},
+ {ASHLQ, Ycol, Yml, 6, {Pw,0xa4,0xa5,0}},
+ {ASHRQ, Ycol, Yml, 6, {Pw,0xac,0xad,0}},
+ {ASHLW, Ycol, Yml, 6, {Pe,0xa4,0xa5,0}},
+ {ASHRW, Ycol, Yml, 6, {Pe,0xac,0xad,0}},
/* load TLS base */
- {AMOVQ, Ytls, Yrl, 7, 0,0,0,0},
+ {AMOVQ, Ytls, Yrl, 7, {0,0,0,0}},
- 0
+ {0}
};
static int
@@ -2687,7 +2700,7 @@ mediaop(Link *ctxt, Optab *o, int op, int osize, int z)
break;
}
default:
- if(ctxt->andptr == ctxt->and || ctxt->andptr[-1] != Pm)
+ if(ctxt->andptr == ctxt->and || ctxt->and[ctxt->andptr - ctxt->and - 1] != Pm)
*ctxt->andptr++ = Pm;
break;
}
@@ -2903,8 +2916,13 @@ found:
asmando(ctxt, &p->to, o->op[z+1]);
break;
+ case Zcallindreg:
+ r = addrel(ctxt->cursym);
+ r->off = p->pc;
+ r->type = R_CALLIND;
+ r->siz = 0;
+ // fallthrough
case Zo_m64:
- case_Zo_m64:
*ctxt->andptr++ = op;
asmandsz(ctxt, &p->to, o->op[z+1], 0, 1);
break;
@@ -3062,6 +3080,7 @@ found:
break;
case Zclr:
+ ctxt->rexflag &= ~Pw;
*ctxt->andptr++ = op;
asmand(ctxt, &p->to, &p->to);
break;
@@ -3081,13 +3100,6 @@ found:
put4(ctxt, 0);
break;
- case Zcallindreg:
- r = addrel(ctxt->cursym);
- r->off = p->pc;
- r->type = R_CALLIND;
- r->siz = 0;
- goto case_Zo_m64;
-
case Zbr:
case Zjmp:
case Zloop:
@@ -3365,6 +3377,19 @@ mfound:
default:
sysfatal("unknown TLS base location for %s", headstr(ctxt->headtype));
+ case Hplan9:
+ if(ctxt->plan9privates == nil)
+ ctxt->plan9privates = linklookup(ctxt, "_privates", 0);
+ memset(&pp.from, 0, sizeof pp.from);
+ pp.from.type = D_EXTERN;
+ pp.from.sym = ctxt->plan9privates;
+ pp.from.offset = 0;
+ pp.from.index = D_NONE;
+ ctxt->rexflag |= Pw;
+ *ctxt->andptr++ = 0x8B;
+ asmand(ctxt, &pp.from, &p->to);
+ break;
+
case Hsolaris: // TODO(rsc): Delete Hsolaris from list. Should not use this code. See progedit in obj6.c.
// TLS base is 0(FS).
pp.from = p->from;
@@ -3436,7 +3461,7 @@ nacltrunc(Link *ctxt, int reg)
static void
asmins(Link *ctxt, Prog *p)
{
- int n, np, c;
+ int i, n, np, c;
uchar *and0;
Reloc *r;
@@ -3561,7 +3586,8 @@ asmins(Link *ctxt, Prog *p)
ctxt->andptr++;
}
n = ctxt->andptr - ctxt->and;
- for(r=ctxt->cursym->r+ctxt->cursym->nr; r-- > ctxt->cursym->r; ) {
+ for(i=ctxt->cursym->nr-1; i>=0; i--) {
+ r = ctxt->cursym->r+i;
if(r->off < p->pc)
break;
if(ctxt->rexflag)