From: Jacob Moody Date: Tue, 14 May 2024 01:25:08 +0000 Subject: [PATCH] 9[acl], libmach: LWSYNC/CMPW/CMPWU --- diff 2734fa85452cd5886212183adbb727038a263a98 5e5fb90ac6803c3026df8cb7c3be03e82ef41f55 --- a/sys/src/cmd/9a/lex.c +++ b/sys/src/cmd/9a/lex.c @@ -353,7 +353,9 @@ "BVS", LBRA, ABVS, "CMP", LCMP, ACMP, + "CMPW", LCMP, ACMPW, "CMPU", LCMP, ACMPU, + "CMPWU", LCMP, ACMPWU, "DIVW", LLOGW, ADIVW, "DIVWV", LLOGW, ADIVWV, @@ -553,6 +555,7 @@ "SYNC", LRETRN, ASYNC, "TLBSYNC", LRETRN, ATLBSYNC, "PTESYNC", LRETRN, APTESYNC, + "LWSYNC", LRETRN, ALWSYNC, /* "TW", LADDW, ATW,*/ "WORD", LWORD, AWORD, --- a/sys/src/cmd/9c/9.out.h +++ b/sys/src/cmd/9c/9.out.h @@ -361,6 +361,9 @@ /* more 64-bit operations */ AHRFID, + /* additions */ + ALWSYNC, + ALAST }; --- a/sys/src/cmd/9c/enam.c +++ /dev/null @@ -1,309 +1,0 @@ -char *anames[] = -{ - "XXX", - "ADD", - "ADDCC", - "ADDV", - "ADDVCC", - "ADDC", - "ADDCCC", - "ADDCV", - "ADDCVCC", - "ADDME", - "ADDMECC", - "ADDMEVCC", - "ADDMEV", - "ADDE", - "ADDECC", - "ADDEVCC", - "ADDEV", - "ADDZE", - "ADDZECC", - "ADDZEVCC", - "ADDZEV", - "AND", - "ANDCC", - "ANDN", - "ANDNCC", - "BC", - "BCL", - "BEQ", - "BGE", - "BGT", - "BL", - "BLE", - "BLT", - "BNE", - "BR", - "BVC", - "BVS", - "CMP", - "CMPU", - "CNTLZW", - "CNTLZWCC", - "CRAND", - "CRANDN", - "CREQV", - "CRNAND", - "CRNOR", - "CROR", - "CRORN", - "CRXOR", - "DIVW", - "DIVWCC", - "DIVWVCC", - "DIVWV", - "DIVWU", - "DIVWUCC", - "DIVWUVCC", - "DIVWUV", - "EQV", - "EQVCC", - "EXTSB", - "EXTSBCC", - "EXTSH", - "EXTSHCC", - "FABS", - "FABSCC", - "FADD", - "FADDCC", - "FADDS", - "FADDSCC", - "FCMPO", - "FCMPU", - "FCTIW", - "FCTIWCC", - "FCTIWZ", - "FCTIWZCC", - "FDIV", - "FDIVCC", - "FDIVS", - "FDIVSCC", - "FMADD", - "FMADDCC", - "FMADDS", - "FMADDSCC", - "FMOVD", - "FMOVDCC", - "FMOVDU", - "FMOVS", - "FMOVSU", - "FMSUB", - "FMSUBCC", - "FMSUBS", - "FMSUBSCC", - "FMUL", - "FMULCC", - "FMULS", - "FMULSCC", - "FNABS", - "FNABSCC", - "FNEG", - "FNEGCC", - "FNMADD", - "FNMADDCC", - "FNMADDS", - "FNMADDSCC", - "FNMSUB", - "FNMSUBCC", - "FNMSUBS", - "FNMSUBSCC", - "FRSP", - "FRSPCC", - "FSUB", - "FSUBCC", - "FSUBS", - "FSUBSCC", - "MOVMW", - "LSW", - "LWAR", - "MOVWBR", - "MOVB", - "MOVBU", - "MOVBZ", - "MOVBZU", - "MOVH", - "MOVHBR", - "MOVHU", - "MOVHZ", - "MOVHZU", - "MOVW", - "MOVWU", - "MOVFL", - "MOVCRFS", - "MTFSB0", - "MTFSB0CC", - "MTFSB1", - "MTFSB1CC", - "MULHW", - "MULHWCC", - "MULHWU", - "MULHWUCC", - "MULLW", - "MULLWCC", - "MULLWVCC", - "MULLWV", - "NAND", - "NANDCC", - "NEG", - "NEGCC", - "NEGVCC", - "NEGV", - "NOR", - "NORCC", - "OR", - "ORCC", - "ORN", - "ORNCC", - "REM", - "REMCC", - "REMV", - "REMVCC", - "REMU", - "REMUCC", - "REMUV", - "REMUVCC", - "RFI", - "RLWMI", - "RLWMICC", - "RLWNM", - "RLWNMCC", - "SLW", - "SLWCC", - "SRW", - "SRAW", - "SRAWCC", - "SRWCC", - "STSW", - "STWCCC", - "SUB", - "SUBCC", - "SUBVCC", - "SUBC", - "SUBCCC", - "SUBCV", - "SUBCVCC", - "SUBME", - "SUBMECC", - "SUBMEVCC", - "SUBMEV", - "SUBV", - "SUBE", - "SUBECC", - "SUBEV", - "SUBEVCC", - "SUBZE", - "SUBZECC", - "SUBZEVCC", - "SUBZEV", - "SYNC", - "XOR", - "XORCC", - "DCBF", - "DCBI", - "DCBST", - "DCBT", - "DCBTST", - "DCBZ", - "ECIWX", - "ECOWX", - "EIEIO", - "ICBI", - "ISYNC", - "PTESYNC", - "TLBIE", - "TLBIEL", - "TLBSYNC", - "TW", - "SYSCALL", - "DATA", - "GLOBL", - "GOK", - "HISTORY", - "NAME", - "NOP", - "RETURN", - "TEXT", - "WORD", - "END", - "DYNT", - "INIT", - "SIGNAME", - "RFCI", - "FRES", - "FRESCC", - "FRSQRTE", - "FRSQRTECC", - "FSEL", - "FSELCC", - "FSQRT", - "FSQRTCC", - "FSQRTS", - "FSQRTSCC", - "CNTLZD", - "CNTLZDCC", - "CMPW", - "CMPWU", - "DIVD", - "DIVDCC", - "DIVDVCC", - "DIVDV", - "DIVDU", - "DIVDUCC", - "DIVDUVCC", - "DIVDUV", - "EXTSW", - "EXTSWCC", - "FCFID", - "FCFIDCC", - "FCTID", - "FCTIDCC", - "FCTIDZ", - "FCTIDZCC", - "LDAR", - "MOVD", - "MOVDU", - "MOVWZ", - "MOVWZU", - "MULHD", - "MULHDCC", - "MULHDU", - "MULHDUCC", - "MULLD", - "MULLDCC", - "MULLDVCC", - "MULLDV", - "RFID", - "RLDMI", - "RLDMICC", - "RLDC", - "RLDCCC", - "RLDCR", - "RLDCRCC", - "RLDCL", - "RLDCLCC", - "SLBIA", - "SLBIE", - "SLBMFEE", - "SLBMFEV", - "SLBMTE", - "SLD", - "SLDCC", - "SRD", - "SRAD", - "SRADCC", - "SRDCC", - "STDCCC", - "TD", - "DWORD", - "REMD", - "REMDCC", - "REMDV", - "REMDVCC", - "REMDU", - "REMDUCC", - "REMDUV", - "REMDUVCC", - "HRFID", - "LAST", -}; --- a/sys/src/cmd/9l/asmout.c +++ b/sys/src/cmd/9l/asmout.c @@ -1302,6 +1302,7 @@ case ASUBZEVCC: return OPVCC(31,200,1,1); case ASYNC: return OPVCC(31,598,0,0); + case ALWSYNC: return OPVCC(31,598,0,0) | (1<<21); case APTESYNC: return OPVCC(31,598,0,0) | (2<<21); case ATLBIE: return OPVCC(31,306,0,0); --- a/sys/src/cmd/9l/span.c +++ b/sys/src/cmd/9l/span.c @@ -784,6 +784,7 @@ oprange[AISYNC] = oprange[r]; oprange[APTESYNC] = oprange[r]; oprange[ATLBSYNC] = oprange[r]; + oprange[ALWSYNC] = oprange[r]; break; case ARLWMI: oprange[ARLWMICC] = oprange[r]; --- a/sys/src/libmach/qdb.c +++ b/sys/src/libmach/qdb.c @@ -914,6 +914,24 @@ } } +static void +sync(Opcode *o, Instr *i) +{ + switch(IBF(i->w[0], 9, 10)){ + case 0: + format(o->mnemonic, i, o->ken); + break; + case 1: + format("LWSYNC", i, o->ken); + break; + case 2: + format("PTESYNC", i, o->ken); + break; + default: + format("reserved instruction", i, 0); + } +} + static char ir2[] = "R%a,R%d"; /* reverse of IBM order */ static char ir3[] = "R%b,R%a,R%d"; static char ir3r[] = "R%a,R%b,R%d"; @@ -1098,10 +1116,10 @@ {19, 528, ALL, "BC%L", branch, "%d,%a,(CTR)"}, {19, 16, ALL, "BC%L", branch, "%d,%a,(LR)"}, - {31, 0, ALL, "CMP", 0, icmp3}, - {11, 0, 0, "CMP", 0, "R%a,%i,%D"}, - {31, 32, ALL, "CMPU", 0, icmp3}, - {10, 0, 0, "CMPU", 0, "R%a,%I,%D"}, + {31, 0, ALL, "CMP%W", 0, icmp3}, + {11, 0, 0, "CMP%W", 0, "R%a,%i,%D"}, + {31, 32, ALL, "CMP%WU", 0, icmp3}, + {10, 0, 0, "CMP%WU", 0, "R%a,%I,%D"}, {31, 58, ALL, "CNTLZD%C", gencc, ir2}, /* 64 */ {31, 26, ALL, "CNTLZ%W%C", gencc, ir2}, @@ -1390,7 +1408,7 @@ {31, 232, OEM, "SUBME%V%C", sub, ir2}, {31, 200, OEM, "SUBZE%V%C", sub, ir2}, - {31, 598, ALL, "SYNC", gen, 0}, /* TO DO: there's a parameter buried in there */ + {31, 598, ALL, "SYNC", sync, 0}, {2, 0, 0, "TD", gen, "%d,R%a,%i"}, /* 64 */ {31, 370, ALL, "TLBIA", gen, 0}, /* optional */ {31, 306, ALL, "TLBIE", gen, "R%b"}, /* optional */ @@ -2494,7 +2512,10 @@ break; case 'W': - if(i->m64) + if(!i->m64) + break; + /* sloppy */ + if(i->xo == 26 || IB(i->w[0], 10) == 0) bprint(i, "W"); break;