diff options
author | jpathy <jpathy@mail.nanosouffle.net> | 2013-05-21 23:15:13 +0530 |
---|---|---|
committer | jpathy <jpathy@mail.nanosouffle.net> | 2013-05-21 23:15:13 +0530 |
commit | 213bf5089365d00d9d40635bcfe62e197d548c1b (patch) | |
tree | f50a0a7847731cf19718ba2104e73c3fea0f0920 /sys/src/cmd/8a | |
parent | e3883b050e1784f97bd6474c6af73023fe3bbe44 (diff) |
add 6(a|l) sse support to 8(a|l)
Diffstat (limited to 'sys/src/cmd/8a')
-rw-r--r-- | sys/src/cmd/8a/a.y | 35 | ||||
-rw-r--r-- | sys/src/cmd/8a/lex.c | 201 |
2 files changed, 233 insertions, 3 deletions
diff --git a/sys/src/cmd/8a/a.y b/sys/src/cmd/8a/a.y index 7c9487f64..0ec5dd263 100644 --- a/sys/src/cmd/8a/a.y +++ b/sys/src/cmd/8a/a.y @@ -20,9 +20,9 @@ %left '+' '-' %left '*' '/' '%' %token <lval> LTYPE0 LTYPE1 LTYPE2 LTYPE3 LTYPE4 -%token <lval> LTYPEC LTYPED LTYPEN LTYPER LTYPET LTYPES LTYPEM LTYPEI LTYPEG +%token <lval> LTYPEC LTYPED LTYPEN LTYPER LTYPET LTYPES LTYPEM LTYPEI LTYPEG LTYPEXC LTYPEX %token <lval> LCONST LFP LPC LSB -%token <lval> LBREG LLREG LSREG LFREG +%token <lval> LBREG LLREG LSREG LFREG LMREG LXREG %token <dval> LFCONST %token <sval> LSCONST LSP %token <sym> LNAME LLAB LVAR @@ -30,7 +30,7 @@ %type <con2> con2 %type <gen> mem imm imm2 reg nam rel rem rim rom omem nmem %type <gen2> nonnon nonrel nonrem rimnon rimrem remrim -%type <gen2> spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8 +%type <gen2> spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8 spec9 spec10 %% prog: | prog line @@ -79,6 +79,8 @@ inst: | LTYPEM spec6 { outcode($1, &$2); } | LTYPEI spec7 { outcode($1, &$2); } | LTYPEG spec8 { outcode($1, &$2); } +| LTYPEXC spec9 { outcode($1, &$2); } +| LTYPEX spec10 { outcode($1, &$2); } nonnon: { @@ -237,6 +239,23 @@ spec8: /* GLOBL */ $$.from.scale = $3; $$.to = $5; } +spec9: /* CMPPS/CMPPD */ + reg ',' rem ',' con + { + $$.from = $1; + $$.to = $3; + $$.from.offset = $5; + } + +spec10: /* shufl */ + imm ',' rem ',' reg + { + $$.from = $3; + $$.to = $5; + if($1.type != D_CONST) + yyerror("illegal constant"); + $$.to.offset = $1.offset; + } rem: reg @@ -301,6 +320,11 @@ reg: $$ = nullgen; $$.type = $1; } +| LMREG + { + $$ = nullgen; + $$.type = $1; + } | LSP { $$ = nullgen; @@ -311,6 +335,11 @@ reg: $$ = nullgen; $$.type = $1; } +| LXREG + { + $$ = nullgen; + $$.type = $1; + } imm: '$' con diff --git a/sys/src/cmd/8a/lex.c b/sys/src/cmd/8a/lex.c index 7aaf25737..b5c736c1d 100644 --- a/sys/src/cmd/8a/lex.c +++ b/sys/src/cmd/8a/lex.c @@ -192,6 +192,24 @@ struct "F6", LFREG, D_F0+6, "F7", LFREG, D_F0+7, + "M0", LMREG, D_M0+0, + "M1", LMREG, D_M0+1, + "M2", LMREG, D_M0+2, + "M3", LMREG, D_M0+3, + "M4", LMREG, D_M0+4, + "M5", LMREG, D_M0+5, + "M6", LMREG, D_M0+6, + "M7", LMREG, D_M0+7, + + "X0", LXREG, D_X0+0, + "X1", LXREG, D_X0+1, + "X2", LXREG, D_X0+2, + "X3", LXREG, D_X0+3, + "X4", LXREG, D_X0+4, + "X5", LXREG, D_X0+5, + "X6", LXREG, D_X0+6, + "X7", LXREG, D_X0+7, + "CS", LSREG, D_CS, "SS", LSREG, D_SS, "DS", LSREG, D_DS, @@ -277,6 +295,7 @@ struct "CMPXCHGB", LTYPE3, ACMPXCHGB, "CMPXCHGL", LTYPE3, ACMPXCHGL, "CMPXCHGW", LTYPE3, ACMPXCHGW, + "CPUID", LTYPE0, ACPUID, "DAA", LTYPE0, ADAA, "DAS", LTYPE0, ADAS, "DATA", LTYPED, ADATA, @@ -639,6 +658,188 @@ struct "FYL2X", LTYPE0, AFYL2X, "FYL2XP1", LTYPE0, AFYL2XP1, + "ADDPD", LTYPE3, AADDPD, + "ADDPS", LTYPE3, AADDPS, + "ADDSD", LTYPE3, AADDSD, + "ADDSS", LTYPE3, AADDSS, + "ANDNPD", LTYPE3, AANDNPD, + "ANDNPS", LTYPE3, AANDNPS, + "ANDPD", LTYPE3, AANDPD, + "ANDPS", LTYPE3, AANDPS, + "CMPPD", LTYPEXC,ACMPPD, + "CMPPS", LTYPEXC,ACMPPS, + "CMPSD", LTYPEXC,ACMPSD, + "CMPSS", LTYPEXC,ACMPSS, + "COMISD", LTYPE3, ACOMISD, + "COMISS", LTYPE3, ACOMISS, + "CVTPL2PD", LTYPE3, ACVTPL2PD, + "CVTPL2PS", LTYPE3, ACVTPL2PS, + "CVTPD2PL", LTYPE3, ACVTPD2PL, + "CVTPD2PS", LTYPE3, ACVTPD2PS, + "CVTPS2PL", LTYPE3, ACVTPS2PL, + "PF2IW", LTYPE3, APF2IW, + "PF2IL", LTYPE3, APF2IL, + "PF2ID", LTYPE3, APF2IL, /* syn */ + "PI2FL", LTYPE3, API2FL, + "PI2FD", LTYPE3, API2FL, /* syn */ + "PI2FW", LTYPE3, API2FW, + "CVTPS2PD", LTYPE3, ACVTPS2PD, + "CVTSD2SL", LTYPE3, ACVTSD2SL, + "CVTSD2SS", LTYPE3, ACVTSD2SS, + "CVTSL2SD", LTYPE3, ACVTSL2SD, + "CVTSL2SS", LTYPE3, ACVTSL2SS, + "CVTSS2SD", LTYPE3, ACVTSS2SD, + "CVTSS2SL", LTYPE3, ACVTSS2SL, + "CVTTPD2PL", LTYPE3, ACVTTPD2PL, + "CVTTPS2PL", LTYPE3, ACVTTPS2PL, + "CVTTSD2SL", LTYPE3, ACVTTSD2SL, + "CVTTSS2SL", LTYPE3, ACVTTSS2SL, + "DIVPD", LTYPE3, ADIVPD, + "DIVPS", LTYPE3, ADIVPS, + "DIVSD", LTYPE3, ADIVSD, + "DIVSS", LTYPE3, ADIVSS, + "FXRSTOR", LTYPE2, AFXRSTOR, + "FXSAVE", LTYPE1, AFXSAVE, + "LDMXCSR", LTYPE2, ALDMXCSR, + "MASKMOVOU", LTYPE3, AMASKMOVOU, + "MASKMOVDQU", LTYPE3, AMASKMOVOU, /* syn */ + "MAXPD", LTYPE3, AMAXPD, + "MAXPS", LTYPE3, AMAXPS, + "MAXSD", LTYPE3, AMAXSD, + "MAXSS", LTYPE3, AMAXSS, + "MINPD", LTYPE3, AMINPD, + "MINPS", LTYPE3, AMINPS, + "MINSD", LTYPE3, AMINSD, + "MINSS", LTYPE3, AMINSS, + "MOVAPD", LTYPE3, AMOVAPD, + "MOVAPS", LTYPE3, AMOVAPS, + "MOVO", LTYPE3, AMOVO, + "MOVOA", LTYPE3, AMOVO, /* syn */ + "MOVOU", LTYPE3, AMOVOU, + "MOVHLPS", LTYPE3, AMOVHLPS, + "MOVHPD", LTYPE3, AMOVHPD, + "MOVHPS", LTYPE3, AMOVHPS, + "MOVLHPS", LTYPE3, AMOVLHPS, + "MOVLPD", LTYPE3, AMOVLPD, + "MOVLPS", LTYPE3, AMOVLPS, + "MOVMSKPD", LTYPE3, AMOVMSKPD, + "MOVMSKPS", LTYPE3, AMOVMSKPS, + "MOVNTO", LTYPE3, AMOVNTO, + "MOVNTDQ", LTYPE3, AMOVNTO, /* syn */ + "MOVNTPD", LTYPE3, AMOVNTPD, + "MOVNTPS", LTYPE3, AMOVNTPS, + "MOVNTQ", LTYPE3, AMOVNTQ, + "MOVQOZX", LTYPE3, AMOVQOZX, + "MOVSD", LTYPE3, AMOVSD, + "MOVSS", LTYPE3, AMOVSS, + "MOVUPD", LTYPE3, AMOVUPD, + "MOVUPS", LTYPE3, AMOVUPS, + "MULPD", LTYPE3, AMULPD, + "MULPS", LTYPE3, AMULPS, + "MULSD", LTYPE3, AMULSD, + "MULSS", LTYPE3, AMULSS, + "ORPD", LTYPE3, AORPD, + "ORPS", LTYPE3, AORPS, + "PACKSSLW", LTYPE3, APACKSSLW, + "PACKSSWB", LTYPE3, APACKSSWB, + "PACKUSWB", LTYPE3, APACKUSWB, + "PADDB", LTYPE3, APADDB, + "PADDL", LTYPE3, APADDL, + "PADDQ", LTYPE3, APADDQ, + "PADDSB", LTYPE3, APADDSB, + "PADDSW", LTYPE3, APADDSW, + "PADDUSB", LTYPE3, APADDUSB, + "PADDUSW", LTYPE3, APADDUSW, + "PADDW", LTYPE3, APADDW, + "PAND", LTYPE3, APAND, + "PANDB", LTYPE3, APANDB, + "PANDL", LTYPE3, APANDL, + "PANDSB", LTYPE3, APANDSB, + "PANDSW", LTYPE3, APANDSW, + "PANDUSB", LTYPE3, APANDUSB, + "PANDUSW", LTYPE3, APANDUSW, + "PANDW", LTYPE3, APANDW, + "PANDN", LTYPE3, APANDN, + "PAVGB", LTYPE3, APAVGB, + "PAVGW", LTYPE3, APAVGW, + "PCMPEQB", LTYPE3, APCMPEQB, + "PCMPEQL", LTYPE3, APCMPEQL, + "PCMPEQW", LTYPE3, APCMPEQW, + "PCMPGTB", LTYPE3, APCMPGTB, + "PCMPGTL", LTYPE3, APCMPGTL, + "PCMPGTW", LTYPE3, APCMPGTW, + "PEXTRW", LTYPEX, APEXTRW, + "PINSRW", LTYPEX, APINSRW, + "PMADDWL", LTYPE3, APMADDWL, + "PMAXSW", LTYPE3, APMAXSW, + "PMAXUB", LTYPE3, APMAXUB, + "PMINSW", LTYPE3, APMINSW, + "PMINUB", LTYPE3, APMINUB, + "PMOVMSKB", LTYPE3, APMOVMSKB, + "PMULHRW", LTYPE3, APMULHRW, + "PMULHUW", LTYPE3, APMULHUW, + "PMULHW", LTYPE3, APMULHW, + "PMULLW", LTYPE3, APMULLW, + "PMULULQ", LTYPE3, APMULULQ, + "POR", LTYPE3, APOR, + "PSADBW", LTYPE3, APSADBW, + "PSHUFHW", LTYPEX, APSHUFHW, + "PSHUFL", LTYPEX, APSHUFL, + "PSHUFLW", LTYPEX, APSHUFLW, + "PSHUFW", LTYPEX, APSHUFW, + "PSLLO", LTYPE3, APSLLO, + "PSLLDQ", LTYPE3, APSLLO, /* syn */ + "PSLLL", LTYPE3, APSLLL, + "PSLLQ", LTYPE3, APSLLQ, + "PSLLW", LTYPE3, APSLLW, + "PSRAL", LTYPE3, APSRAL, + "PSRAW", LTYPE3, APSRAW, + "PSRLO", LTYPE3, APSRLO, + "PSRLDQ", LTYPE3, APSRLO, /* syn */ + "PSRLL", LTYPE3, APSRLL, + "PSRLQ", LTYPE3, APSRLQ, + "PSRLW", LTYPE3, APSRLW, + "PSUBB", LTYPE3, APSUBB, + "PSUBL", LTYPE3, APSUBL, + "PSUBQ", LTYPE3, APSUBQ, + "PSUBSB", LTYPE3, APSUBSB, + "PSUBSW", LTYPE3, APSUBSW, + "PSUBUSB", LTYPE3, APSUBUSB, + "PSUBUSW", LTYPE3, APSUBUSW, + "PSUBW", LTYPE3, APSUBW, + "PUNPCKHBW", LTYPE3, APUNPCKHBW, + "PUNPCKHLQ", LTYPE3, APUNPCKHLQ, + "PUNPCKHQDQ", LTYPE3, APUNPCKHQDQ, + "PUNPCKHWL", LTYPE3, APUNPCKHWL, + "PUNPCKLBW", LTYPE3, APUNPCKLBW, + "PUNPCKLLQ", LTYPE3, APUNPCKLLQ, + "PUNPCKLQDQ", LTYPE3, APUNPCKLQDQ, + "PUNPCKLWL", LTYPE3, APUNPCKLWL, + "PXOR", LTYPE3, APXOR, + "RCPPS", LTYPE3, ARCPPS, + "RCPSS", LTYPE3, ARCPSS, + "RSQRTPS", LTYPE3, ARSQRTPS, + "RSQRTSS", LTYPE3, ARSQRTSS, + "SHUFPD", LTYPEX, ASHUFPD, + "SHUFPS", LTYPEX, ASHUFPS, + "SQRTPD", LTYPE3, ASQRTPD, + "SQRTPS", LTYPE3, ASQRTPS, + "SQRTSD", LTYPE3, ASQRTSD, + "SQRTSS", LTYPE3, ASQRTSS, + "STMXCSR", LTYPE1, ASTMXCSR, + "SUBPD", LTYPE3, ASUBPD, + "SUBPS", LTYPE3, ASUBPS, + "SUBSD", LTYPE3, ASUBSD, + "SUBSS", LTYPE3, ASUBSS, + "UCOMISD", LTYPE3, AUCOMISD, + "UCOMISS", LTYPE3, AUCOMISS, + "UNPCKHPD", LTYPE3, AUNPCKHPD, + "UNPCKHPS", LTYPE3, AUNPCKHPS, + "UNPCKLPD", LTYPE3, AUNPCKLPD, + "UNPCKLPS", LTYPE3, AUNPCKLPS, + "XORPD", LTYPE3, AXORPD, + "XORPS", LTYPE3, AXORPS, + 0 }; |