Commit c21438ab authored by Liu Yu's avatar Liu Yu Committed by V8 LUCI CQ

[loong64] Adjust the disassembler instruction format

Change-Id: I1148508825b7bdff3dae0634aed5318a605ba4da
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3153355Reviewed-by: 's avatarZhao Jiazhong <zhaojiazhong-hf@loongson.cn>
Commit-Queue: Zhao Jiazhong <zhaojiazhong-hf@loongson.cn>
Auto-Submit: Liu yu <liuyu@loongson.cn>
Cr-Commit-Position: refs/heads/main@{#76762}
parent b728cd9c
......@@ -62,7 +62,6 @@ class Decoder {
void PrintUi5(Instruction* instr);
void PrintUi6(Instruction* instr);
void PrintUi12(Instruction* instr);
void PrintXi12(Instruction* instr);
void PrintMsbw(Instruction* instr);
void PrintLsbw(Instruction* instr);
void PrintMsbd(Instruction* instr);
......@@ -72,6 +71,8 @@ class Decoder {
void PrintSi14(Instruction* instr);
void PrintSi16(Instruction* instr);
void PrintSi20(Instruction* instr);
void PrintXi12(Instruction* instr);
void PrintXi20(Instruction* instr);
void PrintCj(Instruction* instr);
void PrintCd(Instruction* instr);
void PrintCa(Instruction* instr);
......@@ -206,6 +207,11 @@ void Decoder::PrintXi12(Instruction* instr) {
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "0x%x", xi);
}
void Decoder::PrintXi20(Instruction* instr) {
int xi = instr->Si20Value();
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "0x%x", xi);
}
void Decoder::PrintMsbd(Instruction* instr) {
int msbd = instr->MsbdValue();
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "%u", msbd);
......@@ -228,23 +234,27 @@ void Decoder::PrintLsbw(Instruction* instr) {
void Decoder::PrintSi12(Instruction* instr) {
int si = ((instr->Si12Value()) << (32 - kSi12Bits)) >> (32 - kSi12Bits);
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "%d", si);
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "%d(0x%x)",
si, instr->Si12Value());
}
void Decoder::PrintSi14(Instruction* instr) {
int si = ((instr->Si14Value()) << (32 - kSi14Bits)) >> (32 - kSi14Bits);
si <<= 2;
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "%d", si);
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "%d(0x%x)",
si, instr->Si14Value() << 2);
}
void Decoder::PrintSi16(Instruction* instr) {
int si = ((instr->Si16Value()) << (32 - kSi16Bits)) >> (32 - kSi16Bits);
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "%d", si);
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "%d(0x%x)",
si, instr->Si16Value());
}
void Decoder::PrintSi20(Instruction* instr) {
int si = ((instr->Si20Value()) << (32 - kSi20Bits)) >> (32 - kSi20Bits);
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "%d", si);
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "%d(0x%x)",
si, instr->Si20Value());
}
void Decoder::PrintCj(Instruction* instr) {
......@@ -314,23 +324,20 @@ void Decoder::PrintPCOffs26(Instruction* instr) {
void Decoder::PrintOffs16(Instruction* instr) {
int offs = instr->Offs16Value();
offs <<= (32 - kOffsLowBits);
offs >>= (32 - kOffsLowBits);
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "%d", offs);
out_buffer_pos_ +=
base::SNPrintF(out_buffer_ + out_buffer_pos_, "0x%x", offs << 2);
}
void Decoder::PrintOffs21(Instruction* instr) {
int offs = instr->Offs21Value();
offs <<= (32 - kOffsLowBits - kOffs21HighBits);
offs >>= (32 - kOffsLowBits - kOffs21HighBits);
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "%d", offs);
out_buffer_pos_ +=
base::SNPrintF(out_buffer_ + out_buffer_pos_, "0x%x", offs << 2);
}
void Decoder::PrintOffs26(Instruction* instr) {
int offs = instr->Offs26Value();
offs <<= (32 - kOffsLowBits - kOffs26HighBits);
offs >>= (32 - kOffsLowBits - kOffs26HighBits);
out_buffer_pos_ += base::SNPrintF(out_buffer_ + out_buffer_pos_, "%d", offs);
out_buffer_pos_ +=
base::SNPrintF(out_buffer_ + out_buffer_pos_, "0x%x", offs << 2);
}
// Handle all register based formatting in this function to reduce the
......@@ -541,9 +548,16 @@ int Decoder::FormatOption(Instruction* instr, const char* format) {
break;
}
case 'x': {
DCHECK(STRING_STARTS_WITH(format, "xi12"));
PrintXi12(instr);
return 4;
if (format[2] == '2') {
DCHECK(STRING_STARTS_WITH(format, "xi20"));
PrintXi20(instr);
return 4;
} else if (format[3] == '2') {
DCHECK(STRING_STARTS_WITH(format, "xi12"));
PrintXi12(instr);
return 4;
}
break;
}
default:
UNREACHABLE();
......@@ -587,53 +601,53 @@ int Decoder::DecodeBreakInstr(Instruction* instr) {
Format(instr, "break, code: 'code");
return kInstrSize;
}*/
Format(instr, "break code: 'code");
Format(instr, "break code: 'code");
return kInstrSize;
} //===================================================
void Decoder::DecodeTypekOp6(Instruction* instr) {
switch (instr->Bits(31, 26) << 26) {
case ADDU16I_D:
Format(instr, "addu16i.d 'rd, 'rj, 'si16");
Format(instr, "addu16i.d 'rd, 'rj, 'si16");
break;
case BEQZ:
Format(instr, "beqz 'rj, 'offs21 -> 'pcoffs21");
Format(instr, "beqz 'rj, 'offs21 -> 'pcoffs21");
break;
case BNEZ:
Format(instr, "bnez 'rj, 'offs21 -> 'pcoffs21");
Format(instr, "bnez 'rj, 'offs21 -> 'pcoffs21");
break;
case BCZ:
if (instr->Bit(8))
Format(instr, "bcnez fcc'cj, 'offs21 -> 'pcoffs21");
Format(instr, "bcnez fcc'cj, 'offs21 -> 'pcoffs21");
else
Format(instr, "bceqz fcc'cj, 'offs21 -> 'pcoffs21");
Format(instr, "bceqz fcc'cj, 'offs21 -> 'pcoffs21");
break;
case JIRL:
Format(instr, "jirl 'rd, 'rj, 'offs16");
Format(instr, "jirl 'rd, 'rj, 'offs16");
break;
case B:
Format(instr, "b 'offs26 -> 'pcoffs26");
Format(instr, "b 'offs26 -> 'pcoffs26");
break;
case BL:
Format(instr, "bl 'offs26 -> 'pcoffs26");
Format(instr, "bl 'offs26 -> 'pcoffs26");
break;
case BEQ:
Format(instr, "beq 'rj, 'rd, 'offs16 -> 'pcoffs16");
Format(instr, "beq 'rj, 'rd, 'offs16 -> 'pcoffs16");
break;
case BNE:
Format(instr, "bne 'rj, 'rd, 'offs16 -> 'pcoffs16");
Format(instr, "bne 'rj, 'rd, 'offs16 -> 'pcoffs16");
break;
case BLT:
Format(instr, "blt 'rj, 'rd, 'offs16 -> 'pcoffs16");
Format(instr, "blt 'rj, 'rd, 'offs16 -> 'pcoffs16");
break;
case BGE:
Format(instr, "bge 'rj, 'rd, 'offs16 -> 'pcoffs16");
Format(instr, "bge 'rj, 'rd, 'offs16 -> 'pcoffs16");
break;
case BLTU:
Format(instr, "bltu 'rj, 'rd, 'offs16 -> 'pcoffs16");
Format(instr, "bltu 'rj, 'rd, 'offs16 -> 'pcoffs16");
break;
case BGEU:
Format(instr, "bgeu 'rj, 'rd, 'offs16 -> 'pcoffs16");
Format(instr, "bgeu 'rj, 'rd, 'offs16 -> 'pcoffs16");
break;
default:
UNREACHABLE();
......@@ -643,22 +657,22 @@ void Decoder::DecodeTypekOp6(Instruction* instr) {
void Decoder::DecodeTypekOp7(Instruction* instr) {
switch (instr->Bits(31, 25) << 25) {
case LU12I_W:
Format(instr, "lu12i.w 'rd, 'si20");
Format(instr, "lu12i.w 'rd, 'xi20");
break;
case LU32I_D:
Format(instr, "lu32i.d 'rd, 'si20");
Format(instr, "lu32i.d 'rd, 'xi20");
break;
case PCADDI:
Format(instr, "pcaddi 'rd, 'si20");
Format(instr, "pcaddi 'rd, 'xi20");
break;
case PCALAU12I:
Format(instr, "pcalau12i 'rd, 'si20");
Format(instr, "pcalau12i 'rd, 'xi20");
break;
case PCADDU12I:
Format(instr, "pcaddu12i 'rd, 'si20");
Format(instr, "pcaddu12i 'rd, 'xi20");
break;
case PCADDU18I:
Format(instr, "pcaddu18i 'rd, 'si20");
Format(instr, "pcaddu18i 'rd, 'xi20");
break;
default:
UNREACHABLE();
......@@ -668,28 +682,28 @@ void Decoder::DecodeTypekOp7(Instruction* instr) {
void Decoder::DecodeTypekOp8(Instruction* instr) {
switch (instr->Bits(31, 24) << 24) {
case LDPTR_W:
Format(instr, "ldptr.w 'rd, 'rj, 'si14");
Format(instr, "ldptr.w 'rd, 'rj, 'si14");
break;
case STPTR_W:
Format(instr, "stptr.w 'rd, 'rj, 'si14");
Format(instr, "stptr.w 'rd, 'rj, 'si14");
break;
case LDPTR_D:
Format(instr, "ldptr.d 'rd, 'rj, 'si14");
Format(instr, "ldptr.d 'rd, 'rj, 'si14");
break;
case STPTR_D:
Format(instr, "stptr.d 'rd, 'rj, 'si14");
Format(instr, "stptr.d 'rd, 'rj, 'si14");
break;
case LL_W:
Format(instr, "ll.w 'rd, 'rj, 'si14");
Format(instr, "ll.w 'rd, 'rj, 'si14");
break;
case SC_W:
Format(instr, "sc.w 'rd, 'rj, 'si14");
Format(instr, "sc.w 'rd, 'rj, 'si14");
break;
case LL_D:
Format(instr, "ll.d 'rd, 'rj, 'si14");
Format(instr, "ll.d 'rd, 'rj, 'si14");
break;
case SC_D:
Format(instr, "sc.d 'rd, 'rj, 'si14");
Format(instr, "sc.d 'rd, 'rj, 'si14");
break;
default:
UNREACHABLE();
......@@ -701,87 +715,87 @@ void Decoder::DecodeTypekOp10(Instruction* instr) {
case BSTR_W: {
if (instr->Bit(21) != 0) {
if (instr->Bit(15) == 0) {
Format(instr, "bstrins.w 'rd, 'rj, 'msbw, 'lsbw");
Format(instr, "bstrins.w 'rd, 'rj, 'msbw, 'lsbw");
} else {
Format(instr, "bstrpick.w 'rd, 'rj, 'msbw, 'lsbw");
Format(instr, "bstrpick.w 'rd, 'rj, 'msbw, 'lsbw");
}
}
break;
}
case BSTRINS_D:
Format(instr, "bstrins.d 'rd, 'rj, 'msbd, 'lsbd");
Format(instr, "bstrins.d 'rd, 'rj, 'msbd, 'lsbd");
break;
case BSTRPICK_D:
Format(instr, "bstrpick.d 'rd, 'rj, 'msbd, 'lsbd");
Format(instr, "bstrpick.d 'rd, 'rj, 'msbd, 'lsbd");
break;
case SLTI:
Format(instr, "slti 'rd, 'rj, 'si12");
Format(instr, "slti 'rd, 'rj, 'si12");
break;
case SLTUI:
Format(instr, "sltui 'rd, 'rj, 'si12");
Format(instr, "sltui 'rd, 'rj, 'si12");
break;
case ADDI_W:
Format(instr, "addi.w 'rd, 'rj, 'si12");
Format(instr, "addi.w 'rd, 'rj, 'si12");
break;
case ADDI_D:
Format(instr, "addi.d 'rd, 'rj, 'si12");
Format(instr, "addi.d 'rd, 'rj, 'si12");
break;
case LU52I_D:
Format(instr, "lu52i.d 'rd, 'rj, 'si12");
Format(instr, "lu52i.d 'rd, 'rj, 'xi12");
break;
case ANDI:
Format(instr, "andi 'rd, 'rj, 'xi12");
Format(instr, "andi 'rd, 'rj, 'xi12");
break;
case ORI:
Format(instr, "ori 'rd, 'rj, 'xi12");
Format(instr, "ori 'rd, 'rj, 'xi12");
break;
case XORI:
Format(instr, "xori 'rd, 'rj, 'xi12");
Format(instr, "xori 'rd, 'rj, 'xi12");
break;
case LD_B:
Format(instr, "ld.b 'rd, 'rj, 'si12");
Format(instr, "ld.b 'rd, 'rj, 'si12");
break;
case LD_H:
Format(instr, "ld.h 'rd, 'rj, 'si12");
Format(instr, "ld.h 'rd, 'rj, 'si12");
break;
case LD_W:
Format(instr, "ld.w 'rd, 'rj, 'si12");
Format(instr, "ld.w 'rd, 'rj, 'si12");
break;
case LD_D:
Format(instr, "ld.d 'rd, 'rj, 'si12");
Format(instr, "ld.d 'rd, 'rj, 'si12");
break;
case ST_B:
Format(instr, "st.b 'rd, 'rj, 'si12");
Format(instr, "st.b 'rd, 'rj, 'si12");
break;
case ST_H:
Format(instr, "st.h 'rd, 'rj, 'si12");
Format(instr, "st.h 'rd, 'rj, 'si12");
break;
case ST_W:
Format(instr, "st.w 'rd, 'rj, 'si12");
Format(instr, "st.w 'rd, 'rj, 'si12");
break;
case ST_D:
Format(instr, "st.d 'rd, 'rj, 'si12");
Format(instr, "st.d 'rd, 'rj, 'si12");
break;
case LD_BU:
Format(instr, "ld.bu 'rd, 'rj, 'si12");
Format(instr, "ld.bu 'rd, 'rj, 'si12");
break;
case LD_HU:
Format(instr, "ld.hu 'rd, 'rj, 'si12");
Format(instr, "ld.hu 'rd, 'rj, 'si12");
break;
case LD_WU:
Format(instr, "ld.wu 'rd, 'rj, 'si12");
Format(instr, "ld.wu 'rd, 'rj, 'si12");
break;
case FLD_S:
Format(instr, "fld.s 'fd, 'rj, 'si12");
Format(instr, "fld.s 'fd, 'rj, 'si12");
break;
case FST_S:
Format(instr, "fst.s 'fd, 'rj, 'si12");
Format(instr, "fst.s 'fd, 'rj, 'si12");
break;
case FLD_D:
Format(instr, "fld.d 'fd, 'rj, 'si12");
Format(instr, "fld.d 'fd, 'rj, 'si12");
break;
case FST_D:
Format(instr, "fst.d 'fd, 'rj, 'si12");
Format(instr, "fst.d 'fd, 'rj, 'si12");
break;
default:
UNREACHABLE();
......@@ -791,16 +805,16 @@ void Decoder::DecodeTypekOp10(Instruction* instr) {
void Decoder::DecodeTypekOp12(Instruction* instr) {
switch (instr->Bits(31, 20) << 20) {
case FMADD_S:
Format(instr, "fmadd.s 'fd, 'fj, 'fk, 'fa");
Format(instr, "fmadd.s 'fd, 'fj, 'fk, 'fa");
break;
case FMADD_D:
Format(instr, "fmadd.d 'fd, 'fj, 'fk, 'fa");
Format(instr, "fmadd.d 'fd, 'fj, 'fk, 'fa");
break;
case FMSUB_S:
Format(instr, "fmsub.s 'fd, 'fj, 'fk, 'fa");
Format(instr, "fmsub.s 'fd, 'fj, 'fk, 'fa");
break;
case FMSUB_D:
Format(instr, "fmsub.d 'fd, 'fj, 'fk, 'fa");
Format(instr, "fmsub.d 'fd, 'fj, 'fk, 'fa");
break;
case FNMADD_S:
Format(instr, "fnmadd.s 'fd, 'fj, 'fk, 'fa");
......@@ -817,67 +831,67 @@ void Decoder::DecodeTypekOp12(Instruction* instr) {
case FCMP_COND_S:
switch (instr->Bits(19, 15)) {
case CAF:
Format(instr, "fcmp.caf.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.caf.s fcc'cd, 'fj, 'fk");
break;
case SAF:
Format(instr, "fcmp.saf.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.saf.s fcc'cd, 'fj, 'fk");
break;
case CLT:
Format(instr, "fcmp.clt.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.clt.s fcc'cd, 'fj, 'fk");
break;
case CEQ:
Format(instr, "fcmp.ceq.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.ceq.s fcc'cd, 'fj, 'fk");
break;
case SEQ:
Format(instr, "fcmp.seq.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.seq.s fcc'cd, 'fj, 'fk");
break;
case CLE:
Format(instr, "fcmp.cle.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cle.s fcc'cd, 'fj, 'fk");
break;
case SLE:
Format(instr, "fcmp.sle.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sle.s fcc'cd, 'fj, 'fk");
break;
case CUN:
Format(instr, "fcmp.cun.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cun.s fcc'cd, 'fj, 'fk");
break;
case SUN:
Format(instr, "fcmp.sun.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sun.s fcc'cd, 'fj, 'fk");
break;
case CULT:
Format(instr, "fcmp.cult.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cult.s fcc'cd, 'fj, 'fk");
break;
case SULT:
Format(instr, "fcmp.sult.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sult.s fcc'cd, 'fj, 'fk");
break;
case CUEQ:
Format(instr, "fcmp.cueq.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cueq.s fcc'cd, 'fj, 'fk");
break;
case SUEQ:
Format(instr, "fcmp.sueq.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sueq.s fcc'cd, 'fj, 'fk");
break;
case CULE:
Format(instr, "fcmp.cule.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cule.s fcc'cd, 'fj, 'fk");
break;
case SULE:
Format(instr, "fcmp.sule.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sule.s fcc'cd, 'fj, 'fk");
break;
case CNE:
Format(instr, "fcmp.cne.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cne.s fcc'cd, 'fj, 'fk");
break;
case SNE:
Format(instr, "fcmp.sne.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sne.s fcc'cd, 'fj, 'fk");
break;
case COR:
Format(instr, "fcmp.cor.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cor.s fcc'cd, 'fj, 'fk");
break;
case SOR:
Format(instr, "fcmp.sor.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sor.s fcc'cd, 'fj, 'fk");
break;
case CUNE:
Format(instr, "fcmp.cune.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cune.s fcc'cd, 'fj, 'fk");
break;
case SUNE:
Format(instr, "fcmp.sune.s fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sune.s fcc'cd, 'fj, 'fk");
break;
default:
UNREACHABLE();
......@@ -886,74 +900,74 @@ void Decoder::DecodeTypekOp12(Instruction* instr) {
case FCMP_COND_D:
switch (instr->Bits(19, 15)) {
case CAF:
Format(instr, "fcmp.caf.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.caf.d fcc'cd, 'fj, 'fk");
break;
case SAF:
Format(instr, "fcmp.saf.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.saf.d fcc'cd, 'fj, 'fk");
break;
case CLT:
Format(instr, "fcmp.clt.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.clt.d fcc'cd, 'fj, 'fk");
break;
case CEQ:
Format(instr, "fcmp.ceq.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.ceq.d fcc'cd, 'fj, 'fk");
break;
case SEQ:
Format(instr, "fcmp.seq.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.seq.d fcc'cd, 'fj, 'fk");
break;
case CLE:
Format(instr, "fcmp.cle.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cle.d fcc'cd, 'fj, 'fk");
break;
case SLE:
Format(instr, "fcmp.sle.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sle.d fcc'cd, 'fj, 'fk");
break;
case CUN:
Format(instr, "fcmp.cun.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cun.d fcc'cd, 'fj, 'fk");
break;
case SUN:
Format(instr, "fcmp.sun.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sun.d fcc'cd, 'fj, 'fk");
break;
case CULT:
Format(instr, "fcmp.cult.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cult.d fcc'cd, 'fj, 'fk");
break;
case SULT:
Format(instr, "fcmp.sult.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sult.d fcc'cd, 'fj, 'fk");
break;
case CUEQ:
Format(instr, "fcmp.cueq.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cueq.d fcc'cd, 'fj, 'fk");
break;
case SUEQ:
Format(instr, "fcmp.sueq.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sueq.d fcc'cd, 'fj, 'fk");
break;
case CULE:
Format(instr, "fcmp.cule.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cule.d fcc'cd, 'fj, 'fk");
break;
case SULE:
Format(instr, "fcmp.sule.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sule.d fcc'cd, 'fj, 'fk");
break;
case CNE:
Format(instr, "fcmp.cne.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cne.d fcc'cd, 'fj, 'fk");
break;
case SNE:
Format(instr, "fcmp.sne.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sne.d fcc'cd, 'fj, 'fk");
break;
case COR:
Format(instr, "fcmp.cor.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cor.d fcc'cd, 'fj, 'fk");
break;
case SOR:
Format(instr, "fcmp.sor.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sor.d fcc'cd, 'fj, 'fk");
break;
case CUNE:
Format(instr, "fcmp.cune.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.cune.d fcc'cd, 'fj, 'fk");
break;
case SUNE:
Format(instr, "fcmp.sune.d fcc'cd, 'fj, 'fk");
Format(instr, "fcmp.sune.d fcc'cd, 'fj, 'fk");
break;
default:
UNREACHABLE();
}
break;
case FSEL:
Format(instr, "fsel 'fd, 'fj, 'fk, fcc'ca");
Format(instr, "fsel 'fd, 'fj, 'fk, fcc'ca");
break;
default:
UNREACHABLE();
......@@ -964,42 +978,42 @@ void Decoder::DecodeTypekOp14(Instruction* instr) {
switch (instr->Bits(31, 18) << 18) {
case ALSL:
if (instr->Bit(17))
Format(instr, "alsl.wu 'rd, 'rj, 'rk, 'sa2");
Format(instr, "alsl.wu 'rd, 'rj, 'rk, 'sa2");
else
Format(instr, "alsl.w 'rd, 'rj, 'rk, 'sa2");
Format(instr, "alsl.w 'rd, 'rj, 'rk, 'sa2");
break;
case BYTEPICK_W:
Format(instr, "bytepick.w 'rd, 'rj, 'rk, 'sa2");
Format(instr, "bytepick.w 'rd, 'rj, 'rk, 'sa2");
break;
case BYTEPICK_D:
Format(instr, "bytepick.d 'rd, 'rj, 'rk, 'sa3");
Format(instr, "bytepick.d 'rd, 'rj, 'rk, 'sa3");
break;
case ALSL_D:
Format(instr, "alsl.d 'rd, 'rj, 'rk, 'sa2");
Format(instr, "alsl.d 'rd, 'rj, 'rk, 'sa2");
break;
case SLLI:
if (instr->Bit(16))
Format(instr, "slli.d 'rd, 'rj, 'ui6");
Format(instr, "slli.d 'rd, 'rj, 'ui6");
else
Format(instr, "slli.w 'rd, 'rj, 'ui5");
Format(instr, "slli.w 'rd, 'rj, 'ui5");
break;
case SRLI:
if (instr->Bit(16))
Format(instr, "srli.d 'rd, 'rj, 'ui6");
Format(instr, "srli.d 'rd, 'rj, 'ui6");
else
Format(instr, "srli.w 'rd, 'rj, 'ui5");
Format(instr, "srli.w 'rd, 'rj, 'ui5");
break;
case SRAI:
if (instr->Bit(16))
Format(instr, "srai.d 'rd, 'rj, 'ui6");
Format(instr, "srai.d 'rd, 'rj, 'ui6");
else
Format(instr, "srai.w 'rd, 'rj, 'ui5");
Format(instr, "srai.w 'rd, 'rj, 'ui5");
break;
case ROTRI:
if (instr->Bit(16))
Format(instr, "rotri.d 'rd, 'rj, 'ui6");
Format(instr, "rotri.d 'rd, 'rj, 'ui6");
else
Format(instr, "rotri.w 'rd, 'rj, 'ui5");
Format(instr, "rotri.w 'rd, 'rj, 'ui5");
break;
default:
UNREACHABLE();
......@@ -1009,213 +1023,213 @@ void Decoder::DecodeTypekOp14(Instruction* instr) {
int Decoder::DecodeTypekOp17(Instruction* instr) {
switch (instr->Bits(31, 15) << 15) {
case ADD_W:
Format(instr, "add.w 'rd, 'rj, 'rk");
Format(instr, "add.w 'rd, 'rj, 'rk");
break;
case ADD_D:
Format(instr, "add.d 'rd, 'rj, 'rk");
Format(instr, "add.d 'rd, 'rj, 'rk");
break;
case SUB_W:
Format(instr, "sub.w 'rd, 'rj, 'rk");
Format(instr, "sub.w 'rd, 'rj, 'rk");
break;
case SUB_D:
Format(instr, "sub.d 'rd, 'rj, 'rk");
Format(instr, "sub.d 'rd, 'rj, 'rk");
break;
case SLT:
Format(instr, "slt 'rd, 'rj, 'rk");
Format(instr, "slt 'rd, 'rj, 'rk");
break;
case SLTU:
Format(instr, "sltu 'rd, 'rj, 'rk");
Format(instr, "sltu 'rd, 'rj, 'rk");
break;
case MASKEQZ:
Format(instr, "maskeqz 'rd, 'rj, 'rk");
Format(instr, "maskeqz 'rd, 'rj, 'rk");
break;
case MASKNEZ:
Format(instr, "masknez 'rd, 'rj, 'rk");
Format(instr, "masknez 'rd, 'rj, 'rk");
break;
case NOR:
Format(instr, "nor 'rd, 'rj, 'rk");
Format(instr, "nor 'rd, 'rj, 'rk");
break;
case AND:
Format(instr, "and 'rd, 'rj, 'rk");
Format(instr, "and 'rd, 'rj, 'rk");
break;
case OR:
Format(instr, "or 'rd, 'rj, 'rk");
Format(instr, "or 'rd, 'rj, 'rk");
break;
case XOR:
Format(instr, "xor 'rd, 'rj, 'rk");
Format(instr, "xor 'rd, 'rj, 'rk");
break;
case ORN:
Format(instr, "orn 'rd, 'rj, 'rk");
Format(instr, "orn 'rd, 'rj, 'rk");
break;
case ANDN:
Format(instr, "andn 'rd, 'rj, 'rk");
Format(instr, "andn 'rd, 'rj, 'rk");
break;
case SLL_W:
Format(instr, "sll.w 'rd, 'rj, 'rk");
Format(instr, "sll.w 'rd, 'rj, 'rk");
break;
case SRL_W:
Format(instr, "srl.w 'rd, 'rj, 'rk");
Format(instr, "srl.w 'rd, 'rj, 'rk");
break;
case SRA_W:
Format(instr, "sra.w 'rd, 'rj, 'rk");
Format(instr, "sra.w 'rd, 'rj, 'rk");
break;
case SLL_D:
Format(instr, "sll.d 'rd, 'rj, 'rk");
Format(instr, "sll.d 'rd, 'rj, 'rk");
break;
case SRL_D:
Format(instr, "srl.d 'rd, 'rj, 'rk");
Format(instr, "srl.d 'rd, 'rj, 'rk");
break;
case SRA_D:
Format(instr, "sra.d 'rd, 'rj, 'rk");
Format(instr, "sra.d 'rd, 'rj, 'rk");
break;
case ROTR_D:
Format(instr, "rotr.d 'rd, 'rj, 'rk");
Format(instr, "rotr.d 'rd, 'rj, 'rk");
break;
case ROTR_W:
Format(instr, "rotr.w 'rd, 'rj, 'rk");
Format(instr, "rotr.w 'rd, 'rj, 'rk");
break;
case MUL_W:
Format(instr, "mul.w 'rd, 'rj, 'rk");
Format(instr, "mul.w 'rd, 'rj, 'rk");
break;
case MULH_W:
Format(instr, "mulh.w 'rd, 'rj, 'rk");
Format(instr, "mulh.w 'rd, 'rj, 'rk");
break;
case MULH_WU:
Format(instr, "mulh.wu 'rd, 'rj, 'rk");
Format(instr, "mulh.wu 'rd, 'rj, 'rk");
break;
case MUL_D:
Format(instr, "mul.d 'rd, 'rj, 'rk");
Format(instr, "mul.d 'rd, 'rj, 'rk");
break;
case MULH_D:
Format(instr, "mulh.d 'rd, 'rj, 'rk");
Format(instr, "mulh.d 'rd, 'rj, 'rk");
break;
case MULH_DU:
Format(instr, "mulh.du 'rd, 'rj, 'rk");
Format(instr, "mulh.du 'rd, 'rj, 'rk");
break;
case MULW_D_W:
Format(instr, "mulw.d.w 'rd, 'rj, 'rk");
break;
case MULW_D_WU:
Format(instr, "mulw.d.wu 'rd, 'rj, 'rk");
Format(instr, "mulw.d.wu 'rd, 'rj, 'rk");
break;
case DIV_W:
Format(instr, "div.w 'rd, 'rj, 'rk");
Format(instr, "div.w 'rd, 'rj, 'rk");
break;
case MOD_W:
Format(instr, "mod.w 'rd, 'rj, 'rk");
Format(instr, "mod.w 'rd, 'rj, 'rk");
break;
case DIV_WU:
Format(instr, "div.wu 'rd, 'rj, 'rk");
Format(instr, "div.wu 'rd, 'rj, 'rk");
break;
case MOD_WU:
Format(instr, "mod.wu 'rd, 'rj, 'rk");
Format(instr, "mod.wu 'rd, 'rj, 'rk");
break;
case DIV_D:
Format(instr, "div.d 'rd, 'rj, 'rk");
Format(instr, "div.d 'rd, 'rj, 'rk");
break;
case MOD_D:
Format(instr, "mod.d 'rd, 'rj, 'rk");
Format(instr, "mod.d 'rd, 'rj, 'rk");
break;
case DIV_DU:
Format(instr, "div.du 'rd, 'rj, 'rk");
Format(instr, "div.du 'rd, 'rj, 'rk");
break;
case MOD_DU:
Format(instr, "mod.du 'rd, 'rj, 'rk");
Format(instr, "mod.du 'rd, 'rj, 'rk");
break;
case BREAK:
return DecodeBreakInstr(instr);
case FADD_S:
Format(instr, "fadd.s 'fd, 'fj, 'fk");
Format(instr, "fadd.s 'fd, 'fj, 'fk");
break;
case FADD_D:
Format(instr, "fadd.d 'fd, 'fj, 'fk");
Format(instr, "fadd.d 'fd, 'fj, 'fk");
break;
case FSUB_S:
Format(instr, "fsub.s 'fd, 'fj, 'fk");
Format(instr, "fsub.s 'fd, 'fj, 'fk");
break;
case FSUB_D:
Format(instr, "fsub.d 'fd, 'fj, 'fk");
Format(instr, "fsub.d 'fd, 'fj, 'fk");
break;
case FMUL_S:
Format(instr, "fmul.s 'fd, 'fj, 'fk");
Format(instr, "fmul.s 'fd, 'fj, 'fk");
break;
case FMUL_D:
Format(instr, "fmul.d 'fd, 'fj, 'fk");
Format(instr, "fmul.d 'fd, 'fj, 'fk");
break;
case FDIV_S:
Format(instr, "fdiv.s 'fd, 'fj, 'fk");
Format(instr, "fdiv.s 'fd, 'fj, 'fk");
break;
case FDIV_D:
Format(instr, "fdiv.d 'fd, 'fj, 'fk");
Format(instr, "fdiv.d 'fd, 'fj, 'fk");
break;
case FMAX_S:
Format(instr, "fmax.s 'fd, 'fj, 'fk");
Format(instr, "fmax.s 'fd, 'fj, 'fk");
break;
case FMAX_D:
Format(instr, "fmax.d 'fd, 'fj, 'fk");
Format(instr, "fmax.d 'fd, 'fj, 'fk");
break;
case FMIN_S:
Format(instr, "fmin.s 'fd, 'fj, 'fk");
Format(instr, "fmin.s 'fd, 'fj, 'fk");
break;
case FMIN_D:
Format(instr, "fmin.d 'fd, 'fj, 'fk");
Format(instr, "fmin.d 'fd, 'fj, 'fk");
break;
case FMAXA_S:
Format(instr, "fmaxa.s 'fd, 'fj, 'fk");
Format(instr, "fmaxa.s 'fd, 'fj, 'fk");
break;
case FMAXA_D:
Format(instr, "fmaxa.d 'fd, 'fj, 'fk");
Format(instr, "fmaxa.d 'fd, 'fj, 'fk");
break;
case FMINA_S:
Format(instr, "fmina.s 'fd, 'fj, 'fk");
Format(instr, "fmina.s 'fd, 'fj, 'fk");
break;
case FMINA_D:
Format(instr, "fmina.d 'fd, 'fj, 'fk");
Format(instr, "fmina.d 'fd, 'fj, 'fk");
break;
case LDX_B:
Format(instr, "ldx.b 'rd, 'rj, 'rk");
Format(instr, "ldx.b 'rd, 'rj, 'rk");
break;
case LDX_H:
Format(instr, "ldx.h 'rd, 'rj, 'rk");
Format(instr, "ldx.h 'rd, 'rj, 'rk");
break;
case LDX_W:
Format(instr, "ldx.w 'rd, 'rj, 'rk");
Format(instr, "ldx.w 'rd, 'rj, 'rk");
break;
case LDX_D:
Format(instr, "ldx.d 'rd, 'rj, 'rk");
Format(instr, "ldx.d 'rd, 'rj, 'rk");
break;
case STX_B:
Format(instr, "stx.b 'rd, 'rj, 'rk");
Format(instr, "stx.b 'rd, 'rj, 'rk");
break;
case STX_H:
Format(instr, "stx.h 'rd, 'rj, 'rk");
Format(instr, "stx.h 'rd, 'rj, 'rk");
break;
case STX_W:
Format(instr, "stx.w 'rd, 'rj, 'rk");
Format(instr, "stx.w 'rd, 'rj, 'rk");
break;
case STX_D:
Format(instr, "stx.d 'rd, 'rj, 'rk");
Format(instr, "stx.d 'rd, 'rj, 'rk");
break;
case LDX_BU:
Format(instr, "ldx.bu 'rd, 'rj, 'rk");
Format(instr, "ldx.bu 'rd, 'rj, 'rk");
break;
case LDX_HU:
Format(instr, "ldx.hu 'rd, 'rj, 'rk");
Format(instr, "ldx.hu 'rd, 'rj, 'rk");
break;
case LDX_WU:
Format(instr, "ldx.wu 'rd, 'rj, 'rk");
Format(instr, "ldx.wu 'rd, 'rj, 'rk");
break;
case FLDX_S:
Format(instr, "fldx.s 'fd, 'rj, 'rk");
Format(instr, "fldx.s 'fd, 'rj, 'rk");
break;
case FLDX_D:
Format(instr, "fldx.d 'fd, 'rj, 'rk");
Format(instr, "fldx.d 'fd, 'rj, 'rk");
break;
case FSTX_S:
Format(instr, "fstx.s 'fd, 'rj, 'rk");
Format(instr, "fstx.s 'fd, 'rj, 'rk");
break;
case FSTX_D:
Format(instr, "fstx.d 'fd, 'rj, 'rk");
Format(instr, "fstx.d 'fd, 'rj, 'rk");
break;
case AMSWAP_W:
Format(instr, "amswap.w 'rd, 'rk, 'rj");
......@@ -1224,40 +1238,40 @@ int Decoder::DecodeTypekOp17(Instruction* instr) {
Format(instr, "amswap.d 'rd, 'rk, 'rj");
break;
case AMADD_W:
Format(instr, "amadd.w 'rd, 'rk, 'rj");
Format(instr, "amadd.w 'rd, 'rk, 'rj");
break;
case AMADD_D:
Format(instr, "amadd.d 'rd, 'rk, 'rj");
Format(instr, "amadd.d 'rd, 'rk, 'rj");
break;
case AMAND_W:
Format(instr, "amand.w 'rd, 'rk, 'rj");
Format(instr, "amand.w 'rd, 'rk, 'rj");
break;
case AMAND_D:
Format(instr, "amand.d 'rd, 'rk, 'rj");
Format(instr, "amand.d 'rd, 'rk, 'rj");
break;
case AMOR_W:
Format(instr, "amor.w 'rd, 'rk, 'rj");
Format(instr, "amor.w 'rd, 'rk, 'rj");
break;
case AMOR_D:
Format(instr, "amor.d 'rd, 'rk, 'rj");
Format(instr, "amor.d 'rd, 'rk, 'rj");
break;
case AMXOR_W:
Format(instr, "amxor.w 'rd, 'rk, 'rj");
Format(instr, "amxor.w 'rd, 'rk, 'rj");
break;
case AMXOR_D:
Format(instr, "amxor.d 'rd, 'rk, 'rj");
Format(instr, "amxor.d 'rd, 'rk, 'rj");
break;
case AMMAX_W:
Format(instr, "ammax.w 'rd, 'rk, 'rj");
Format(instr, "ammax.w 'rd, 'rk, 'rj");
break;
case AMMAX_D:
Format(instr, "ammax.d 'rd, 'rk, 'rj");
Format(instr, "ammax.d 'rd, 'rk, 'rj");
break;
case AMMIN_W:
Format(instr, "ammin.w 'rd, 'rk, 'rj");
Format(instr, "ammin.w 'rd, 'rk, 'rj");
break;
case AMMIN_D:
Format(instr, "ammin.d 'rd, 'rk, 'rj");
Format(instr, "ammin.d 'rd, 'rk, 'rj");
break;
case AMMAX_WU:
Format(instr, "ammax.wu 'rd, 'rk, 'rj");
......@@ -1272,76 +1286,76 @@ int Decoder::DecodeTypekOp17(Instruction* instr) {
Format(instr, "ammin.du 'rd, 'rk, 'rj");
break;
case AMSWAP_DB_W:
Format(instr, "amswap_db.w 'rd, 'rk, 'rj");
Format(instr, "amswap_db.w 'rd, 'rk, 'rj");
break;
case AMSWAP_DB_D:
Format(instr, "amswap_db.d 'rd, 'rk, 'rj");
Format(instr, "amswap_db.d 'rd, 'rk, 'rj");
break;
case AMADD_DB_W:
Format(instr, "amadd_db.w 'rd, 'rk, 'rj");
Format(instr, "amadd_db.w 'rd, 'rk, 'rj");
break;
case AMADD_DB_D:
Format(instr, "amadd_db.d 'rd, 'rk, 'rj");
Format(instr, "amadd_db.d 'rd, 'rk, 'rj");
break;
case AMAND_DB_W:
Format(instr, "amand_db.w 'rd, 'rk, 'rj");
Format(instr, "amand_db.w 'rd, 'rk, 'rj");
break;
case AMAND_DB_D:
Format(instr, "amand_db.d 'rd, 'rk, 'rj");
Format(instr, "amand_db.d 'rd, 'rk, 'rj");
break;
case AMOR_DB_W:
Format(instr, "amor_db.w 'rd, 'rk, 'rj");
Format(instr, "amor_db.w 'rd, 'rk, 'rj");
break;
case AMOR_DB_D:
Format(instr, "amor_db.d 'rd, 'rk, 'rj");
Format(instr, "amor_db.d 'rd, 'rk, 'rj");
break;
case AMXOR_DB_W:
Format(instr, "amxor_db.w 'rd, 'rk, 'rj");
Format(instr, "amxor_db.w 'rd, 'rk, 'rj");
break;
case AMXOR_DB_D:
Format(instr, "amxor_db.d 'rd, 'rk, 'rj");
Format(instr, "amxor_db.d 'rd, 'rk, 'rj");
break;
case AMMAX_DB_W:
Format(instr, "ammax_db.w 'rd, 'rk, 'rj");
Format(instr, "ammax_db.w 'rd, 'rk, 'rj");
break;
case AMMAX_DB_D:
Format(instr, "ammax_db.d 'rd, 'rk, 'rj");
Format(instr, "ammax_db.d 'rd, 'rk, 'rj");
break;
case AMMIN_DB_W:
Format(instr, "ammin_db.w 'rd, 'rk, 'rj");
Format(instr, "ammin_db.w 'rd, 'rk, 'rj");
break;
case AMMIN_DB_D:
Format(instr, "ammin_db.d 'rd, 'rk, 'rj");
Format(instr, "ammin_db.d 'rd, 'rk, 'rj");
break;
case AMMAX_DB_WU:
Format(instr, "ammax_db.wu 'rd, 'rk, 'rj");
Format(instr, "ammax_db.wu 'rd, 'rk, 'rj");
break;
case AMMAX_DB_DU:
Format(instr, "ammax_db.du 'rd, 'rk, 'rj");
Format(instr, "ammax_db.du 'rd, 'rk, 'rj");
break;
case AMMIN_DB_WU:
Format(instr, "ammin_db.wu 'rd, 'rk, 'rj");
Format(instr, "ammin_db.wu 'rd, 'rk, 'rj");
break;
case AMMIN_DB_DU:
Format(instr, "ammin_db.du 'rd, 'rk, 'rj");
Format(instr, "ammin_db.du 'rd, 'rk, 'rj");
break;
case DBAR:
Format(instr, "dbar 'hint15");
Format(instr, "dbar 'hint15");
break;
case IBAR:
Format(instr, "ibar 'hint15");
Format(instr, "ibar 'hint15");
break;
case FSCALEB_S:
Format(instr, "fscaleb.s 'fd, 'fj, 'fk");
Format(instr, "fscaleb.s 'fd, 'fj, 'fk");
break;
case FSCALEB_D:
Format(instr, "fscaleb.d 'fd, 'fj, 'fk");
Format(instr, "fscaleb.d 'fd, 'fj, 'fk");
break;
case FCOPYSIGN_S:
Format(instr, "fcopysign.s 'fd, 'fj, 'fk");
Format(instr, "fcopysign.s 'fd, 'fj, 'fk");
break;
case FCOPYSIGN_D:
Format(instr, "fcopysign.d 'fd, 'fj, 'fk");
Format(instr, "fcopysign.d 'fd, 'fj, 'fk");
break;
default:
UNREACHABLE();
......@@ -1352,40 +1366,40 @@ int Decoder::DecodeTypekOp17(Instruction* instr) {
void Decoder::DecodeTypekOp22(Instruction* instr) {
switch (instr->Bits(31, 10) << 10) {
case CLZ_W:
Format(instr, "clz.w 'rd, 'rj");
Format(instr, "clz.w 'rd, 'rj");
break;
case CTZ_W:
Format(instr, "ctz.w 'rd, 'rj");
Format(instr, "ctz.w 'rd, 'rj");
break;
case CLZ_D:
Format(instr, "clz.d 'rd, 'rj");
Format(instr, "clz.d 'rd, 'rj");
break;
case CTZ_D:
Format(instr, "ctz.d 'rd, 'rj");
Format(instr, "ctz.d 'rd, 'rj");
break;
case REVB_2H:
Format(instr, "revb.2h 'rd, 'rj");
Format(instr, "revb.2h 'rd, 'rj");
break;
case REVB_4H:
Format(instr, "revb.4h 'rd, 'rj");
Format(instr, "revb.4h 'rd, 'rj");
break;
case REVB_2W:
Format(instr, "revb.2w 'rd, 'rj");
Format(instr, "revb.2w 'rd, 'rj");
break;
case REVB_D:
Format(instr, "revb.d 'rd, 'rj");
Format(instr, "revb.d 'rd, 'rj");
break;
case REVH_2W:
Format(instr, "revh.2w 'rd, 'rj");
Format(instr, "revh.2w 'rd, 'rj");
break;
case REVH_D:
Format(instr, "revh.d 'rd, 'rj");
Format(instr, "revh.d 'rd, 'rj");
break;
case BITREV_4B:
Format(instr, "bitrev.4b 'rd, 'rj");
Format(instr, "bitrev.4b 'rd, 'rj");
break;
case BITREV_8B:
Format(instr, "bitrev.8b 'rd, 'rj");
Format(instr, "bitrev.8b 'rd, 'rj");
break;
case BITREV_W:
Format(instr, "bitrev.w 'rd, 'rj");
......@@ -1394,58 +1408,58 @@ void Decoder::DecodeTypekOp22(Instruction* instr) {
Format(instr, "bitrev.d 'rd, 'rj");
break;
case EXT_W_B:
Format(instr, "ext.w.b 'rd, 'rj");
Format(instr, "ext.w.b 'rd, 'rj");
break;
case EXT_W_H:
Format(instr, "ext.w.h 'rd, 'rj");
Format(instr, "ext.w.h 'rd, 'rj");
break;
case FABS_S:
Format(instr, "fabs.s 'fd, 'fj");
Format(instr, "fabs.s 'fd, 'fj");
break;
case FABS_D:
Format(instr, "fabs.d 'fd, 'fj");
Format(instr, "fabs.d 'fd, 'fj");
break;
case FNEG_S:
Format(instr, "fneg.s 'fd, 'fj");
Format(instr, "fneg.s 'fd, 'fj");
break;
case FNEG_D:
Format(instr, "fneg.d 'fd, 'fj");
Format(instr, "fneg.d 'fd, 'fj");
break;
case FSQRT_S:
Format(instr, "fsqrt.s 'fd, 'fj");
Format(instr, "fsqrt.s 'fd, 'fj");
break;
case FSQRT_D:
Format(instr, "fsqrt.d 'fd, 'fj");
Format(instr, "fsqrt.d 'fd, 'fj");
break;
case FMOV_S:
Format(instr, "fmov.s 'fd, 'fj");
Format(instr, "fmov.s 'fd, 'fj");
break;
case FMOV_D:
Format(instr, "fmov.d 'fd, 'fj");
Format(instr, "fmov.d 'fd, 'fj");
break;
case MOVGR2FR_W:
Format(instr, "movgr2fr.w 'fd, 'rj");
Format(instr, "movgr2fr.w 'fd, 'rj");
break;
case MOVGR2FR_D:
Format(instr, "movgr2fr.d 'fd, 'rj");
Format(instr, "movgr2fr.d 'fd, 'rj");
break;
case MOVGR2FRH_W:
Format(instr, "movgr2frh.w 'fd, 'rj");
Format(instr, "movgr2frh.w 'fd, 'rj");
break;
case MOVFR2GR_S:
Format(instr, "movfr2gr.s 'rd, 'fj");
Format(instr, "movfr2gr.s 'rd, 'fj");
break;
case MOVFR2GR_D:
Format(instr, "movfr2gr.d 'rd, 'fj");
Format(instr, "movfr2gr.d 'rd, 'fj");
break;
case MOVFRH2GR_S:
Format(instr, "movfrh2gr.s 'rd, 'fj");
Format(instr, "movfrh2gr.s 'rd, 'fj");
break;
case MOVGR2FCSR:
Format(instr, "movgr2fcsr fcsr, 'rj");
Format(instr, "movgr2fcsr fcsr, 'rj");
break;
case MOVFCSR2GR:
Format(instr, "movfcsr2gr 'rd, fcsr");
Format(instr, "movfcsr2gr 'rd, fcsr");
break;
case FCVT_S_D:
Format(instr, "fcvt.s.d 'fd, 'fj");
......@@ -1454,82 +1468,82 @@ void Decoder::DecodeTypekOp22(Instruction* instr) {
Format(instr, "fcvt.d.s 'fd, 'fj");
break;
case FTINTRM_W_S:
Format(instr, "ftintrm.w.s 'fd, 'fj");
Format(instr, "ftintrm.w.s 'fd, 'fj");
break;
case FTINTRM_W_D:
Format(instr, "ftintrm.w.d 'fd, 'fj");
Format(instr, "ftintrm.w.d 'fd, 'fj");
break;
case FTINTRM_L_S:
Format(instr, "ftintrm.l.s 'fd, 'fj");
Format(instr, "ftintrm.l.s 'fd, 'fj");
break;
case FTINTRM_L_D:
Format(instr, "ftintrm.l.d 'fd, 'fj");
Format(instr, "ftintrm.l.d 'fd, 'fj");
break;
case FTINTRP_W_S:
Format(instr, "ftintrp.w.s 'fd, 'fj");
Format(instr, "ftintrp.w.s 'fd, 'fj");
break;
case FTINTRP_W_D:
Format(instr, "ftintrp.w.d 'fd, 'fj");
Format(instr, "ftintrp.w.d 'fd, 'fj");
break;
case FTINTRP_L_S:
Format(instr, "ftintrp.l.s 'fd, 'fj");
Format(instr, "ftintrp.l.s 'fd, 'fj");
break;
case FTINTRP_L_D:
Format(instr, "ftintrp.l.d 'fd, 'fj");
Format(instr, "ftintrp.l.d 'fd, 'fj");
break;
case FTINTRZ_W_S:
Format(instr, "ftintrz.w.s 'fd, 'fj");
Format(instr, "ftintrz.w.s 'fd, 'fj");
break;
case FTINTRZ_W_D:
Format(instr, "ftintrz.w.d 'fd, 'fj");
Format(instr, "ftintrz.w.d 'fd, 'fj");
break;
case FTINTRZ_L_S:
Format(instr, "ftintrz.l.s 'fd, 'fj");
Format(instr, "ftintrz.l.s 'fd, 'fj");
break;
case FTINTRZ_L_D:
Format(instr, "ftintrz.l.d 'fd, 'fj");
Format(instr, "ftintrz.l.d 'fd, 'fj");
break;
case FTINTRNE_W_S:
Format(instr, "ftintrne.w.s 'fd, 'fj");
Format(instr, "ftintrne.w.s 'fd, 'fj");
break;
case FTINTRNE_W_D:
Format(instr, "ftintrne.w.d 'fd, 'fj");
Format(instr, "ftintrne.w.d 'fd, 'fj");
break;
case FTINTRNE_L_S:
Format(instr, "ftintrne.l.s 'fd, 'fj");
Format(instr, "ftintrne.l.s 'fd, 'fj");
break;
case FTINTRNE_L_D:
Format(instr, "ftintrne.l.d 'fd, 'fj");
Format(instr, "ftintrne.l.d 'fd, 'fj");
break;
case FTINT_W_S:
Format(instr, "ftint.w.s 'fd, 'fj");
Format(instr, "ftint.w.s 'fd, 'fj");
break;
case FTINT_W_D:
Format(instr, "ftint.w.d 'fd, 'fj");
Format(instr, "ftint.w.d 'fd, 'fj");
break;
case FTINT_L_S:
Format(instr, "ftint.l.s 'fd, 'fj");
Format(instr, "ftint.l.s 'fd, 'fj");
break;
case FTINT_L_D:
Format(instr, "ftint.l.d 'fd, 'fj");
Format(instr, "ftint.l.d 'fd, 'fj");
break;
case FFINT_S_W:
Format(instr, "ffint.s.w 'fd, 'fj");
Format(instr, "ffint.s.w 'fd, 'fj");
break;
case FFINT_S_L:
Format(instr, "ffint.s.l 'fd, 'fj");
Format(instr, "ffint.s.l 'fd, 'fj");
break;
case FFINT_D_W:
Format(instr, "ffint.d.w 'fd, 'fj");
Format(instr, "ffint.d.w 'fd, 'fj");
break;
case FFINT_D_L:
Format(instr, "ffint.d.l 'fd, 'fj");
Format(instr, "ffint.d.l 'fd, 'fj");
break;
case FRINT_S:
Format(instr, "frint.s 'fd, 'fj");
Format(instr, "frint.s 'fd, 'fj");
break;
case FRINT_D:
Format(instr, "frint.d 'fd, 'fj");
Format(instr, "frint.d 'fd, 'fj");
break;
case MOVFR2CF:
Format(instr, "movfr2cf fcc'cd, 'fj");
......@@ -1562,22 +1576,22 @@ void Decoder::DecodeTypekOp22(Instruction* instr) {
Format(instr, "fclass.d 'fd, 'fj");
break;
case FLOGB_S:
Format(instr, "flogb.s 'fd, 'fj");
Format(instr, "flogb.s 'fd, 'fj");
break;
case FLOGB_D:
Format(instr, "flogb.d 'fd, 'fj");
Format(instr, "flogb.d 'fd, 'fj");
break;
case CLO_W:
Format(instr, "clo.w 'rd, 'rj");
Format(instr, "clo.w 'rd, 'rj");
break;
case CTO_W:
Format(instr, "cto.w 'rd, 'rj");
Format(instr, "cto.w 'rd, 'rj");
break;
case CLO_D:
Format(instr, "clo.d 'rd, 'rj");
Format(instr, "clo.d 'rd, 'rj");
break;
case CTO_D:
Format(instr, "cto.d 'rd, 'rj");
Format(instr, "cto.d 'rd, 'rj");
break;
default:
UNREACHABLE();
......
......@@ -110,9 +110,9 @@ bool DisassembleAndCompare(byte* pc, const char* compare_string) {
TEST(TypeOp6) {
SET_UP();
COMPARE(jirl(ra, t7, 0), "4c000261 jirl ra, t7, 0");
COMPARE(jirl(ra, t7, 32767), "4dfffe61 jirl ra, t7, 32767");
COMPARE(jirl(ra, t7, -32768), "4e000261 jirl ra, t7, -32768");
COMPARE(jirl(ra, t7, 0), "4c000261 jirl ra, t7, 0x0");
COMPARE(jirl(ra, t7, 32767), "4dfffe61 jirl ra, t7, 0x1fffc");
COMPARE(jirl(ra, t7, -32768), "4e000261 jirl ra, t7, 0x20000");
VERIFY_RUN();
}
......@@ -120,69 +120,71 @@ TEST(TypeOp6) {
TEST(TypeOp6PC) {
SET_UP();
COMPARE_PC_REL(beqz(t7, 1048575), "43fffe6f beqz t7, 1048575",
COMPARE_PC_REL(beqz(t7, 1048575), "43fffe6f beqz t7, 0x3ffffc",
1048575);
COMPARE_PC_REL(beqz(t0, -1048576), "40000190 beqz t0, -1048576",
COMPARE_PC_REL(beqz(t0, -1048576), "40000190 beqz t0, 0x400000",
-1048576);
COMPARE_PC_REL(beqz(t1, 0), "400001a0 beqz t1, 0", 0);
COMPARE_PC_REL(beqz(t1, 0), "400001a0 beqz t1, 0x0", 0);
COMPARE_PC_REL(bnez(a2, 1048575), "47fffccf bnez a2, 1048575",
COMPARE_PC_REL(bnez(a2, 1048575), "47fffccf bnez a2, 0x3ffffc",
1048575);
COMPARE_PC_REL(bnez(s3, -1048576), "44000350 bnez s3, -1048576",
COMPARE_PC_REL(bnez(s3, -1048576), "44000350 bnez s3, 0x400000",
-1048576);
COMPARE_PC_REL(bnez(t8, 0), "44000280 bnez t8, 0", 0);
COMPARE_PC_REL(bnez(t8, 0), "44000280 bnez t8, 0x0", 0);
COMPARE_PC_REL(bceqz(FCC0, 1048575), "4bfffc0f bceqz fcc0, 1048575",
1048575);
COMPARE_PC_REL(bceqz(FCC0, 1048575),
"4bfffc0f bceqz fcc0, 0x3ffffc", 1048575);
COMPARE_PC_REL(bceqz(FCC0, -1048576),
"48000010 bceqz fcc0, -1048576", -1048576);
COMPARE_PC_REL(bceqz(FCC0, 0), "48000000 bceqz fcc0, 0", 0);
"48000010 bceqz fcc0, 0x400000", -1048576);
COMPARE_PC_REL(bceqz(FCC0, 0), "48000000 bceqz fcc0, 0x0", 0);
COMPARE_PC_REL(bcnez(FCC0, 1048575), "4bfffd0f bcnez fcc0, 1048575",
1048575);
COMPARE_PC_REL(bcnez(FCC0, 1048575),
"4bfffd0f bcnez fcc0, 0x3ffffc", 1048575);
COMPARE_PC_REL(bcnez(FCC0, -1048576),
"48000110 bcnez fcc0, -1048576", -1048576);
COMPARE_PC_REL(bcnez(FCC0, 0), "48000100 bcnez fcc0, 0", 0);
COMPARE_PC_REL(b(33554431), "53fffdff b 33554431", 33554431);
COMPARE_PC_REL(b(-33554432), "50000200 b -33554432", -33554432);
COMPARE_PC_REL(b(0), "50000000 b 0", 0);
COMPARE_PC_REL(beq(t0, a6, 32767), "59fffd8a beq t0, a6, 32767",
32767);
COMPARE_PC_REL(beq(t1, a0, -32768), "5a0001a4 beq t1, a0, -32768",
-32768);
COMPARE_PC_REL(beq(a4, t1, 0), "5800010d beq a4, t1, 0", 0);
COMPARE_PC_REL(bne(a3, a4, 32767), "5dfffce8 bne a3, a4, 32767",
32767);
COMPARE_PC_REL(bne(a6, a5, -32768), "5e000149 bne a6, a5, -32768",
-32768);
COMPARE_PC_REL(bne(a4, a5, 0), "5c000109 bne a4, a5, 0", 0);
COMPARE_PC_REL(blt(a4, a6, 32767), "61fffd0a blt a4, a6, 32767",
32767);
COMPARE_PC_REL(blt(a4, a5, -32768), "62000109 blt a4, a5, -32768",
-32768);
COMPARE_PC_REL(blt(a4, a6, 0), "6000010a blt a4, a6, 0", 0);
COMPARE_PC_REL(bge(s7, a5, 32767), "65ffffc9 bge s7, a5, 32767",
32767);
COMPARE_PC_REL(bge(a1, a3, -32768), "660000a7 bge a1, a3, -32768",
-32768);
COMPARE_PC_REL(bge(a5, s3, 0), "6400013a bge a5, s3, 0", 0);
COMPARE_PC_REL(bltu(a5, s7, 32767), "69fffd3e bltu a5, s7, 32767",
32767);
COMPARE_PC_REL(bltu(a4, a5, -32768), "6a000109 bltu a4, a5, -32768",
-32768);
COMPARE_PC_REL(bltu(a4, t6, 0), "68000112 bltu a4, t6, 0", 0);
COMPARE_PC_REL(bgeu(a7, a6, 32767), "6dfffd6a bgeu a7, a6, 32767",
32767);
COMPARE_PC_REL(bgeu(a5, a3, -32768), "6e000127 bgeu a5, a3, -32768",
-32768);
COMPARE_PC_REL(bgeu(t2, t1, 0), "6c0001cd bgeu t2, t1, 0", 0);
"48000110 bcnez fcc0, 0x400000", -1048576);
COMPARE_PC_REL(bcnez(FCC0, 0), "48000100 bcnez fcc0, 0x0", 0);
COMPARE_PC_REL(b(33554431), "53fffdff b 0x7fffffc",
33554431);
COMPARE_PC_REL(b(-33554432), "50000200 b 0x8000000",
-33554432);
COMPARE_PC_REL(b(0), "50000000 b 0x0", 0);
COMPARE_PC_REL(beq(t0, a6, 32767),
"59fffd8a beq t0, a6, 0x1fffc", 32767);
COMPARE_PC_REL(beq(t1, a0, -32768),
"5a0001a4 beq t1, a0, 0x20000", -32768);
COMPARE_PC_REL(beq(a4, t1, 0), "5800010d beq a4, t1, 0x0", 0);
COMPARE_PC_REL(bne(a3, a4, 32767),
"5dfffce8 bne a3, a4, 0x1fffc", 32767);
COMPARE_PC_REL(bne(a6, a5, -32768),
"5e000149 bne a6, a5, 0x20000", -32768);
COMPARE_PC_REL(bne(a4, a5, 0), "5c000109 bne a4, a5, 0x0", 0);
COMPARE_PC_REL(blt(a4, a6, 32767),
"61fffd0a blt a4, a6, 0x1fffc", 32767);
COMPARE_PC_REL(blt(a4, a5, -32768),
"62000109 blt a4, a5, 0x20000", -32768);
COMPARE_PC_REL(blt(a4, a6, 0), "6000010a blt a4, a6, 0x0", 0);
COMPARE_PC_REL(bge(s7, a5, 32767),
"65ffffc9 bge s7, a5, 0x1fffc", 32767);
COMPARE_PC_REL(bge(a1, a3, -32768),
"660000a7 bge a1, a3, 0x20000", -32768);
COMPARE_PC_REL(bge(a5, s3, 0), "6400013a bge a5, s3, 0x0", 0);
COMPARE_PC_REL(bltu(a5, s7, 32767),
"69fffd3e bltu a5, s7, 0x1fffc", 32767);
COMPARE_PC_REL(bltu(a4, a5, -32768),
"6a000109 bltu a4, a5, 0x20000", -32768);
COMPARE_PC_REL(bltu(a4, t6, 0), "68000112 bltu a4, t6, 0x0", 0);
COMPARE_PC_REL(bgeu(a7, a6, 32767),
"6dfffd6a bgeu a7, a6, 0x1fffc", 32767);
COMPARE_PC_REL(bgeu(a5, a3, -32768),
"6e000127 bgeu a5, a3, 0x20000", -32768);
COMPARE_PC_REL(bgeu(t2, t1, 0), "6c0001cd bgeu t2, t1, 0x0", 0);
VERIFY_RUN();
}
......@@ -190,30 +192,30 @@ TEST(TypeOp6PC) {
TEST(TypeOp7) {
SET_UP();
COMPARE(lu12i_w(a4, 524287), "14ffffe8 lu12i.w a4, 524287");
COMPARE(lu12i_w(a5, -524288), "15000009 lu12i.w a5, -524288");
COMPARE(lu12i_w(a6, 0), "1400000a lu12i.w a6, 0");
COMPARE(lu12i_w(a4, 524287), "14ffffe8 lu12i.w a4, 0x7ffff");
COMPARE(lu12i_w(a5, -524288), "15000009 lu12i.w a5, 0x80000");
COMPARE(lu12i_w(a6, 0), "1400000a lu12i.w a6, 0x0");
COMPARE(lu32i_d(a7, 524287), "16ffffeb lu32i.d a7, 524287");
COMPARE(lu32i_d(t0, 524288), "1700000c lu32i.d t0, -524288");
COMPARE(lu32i_d(t1, 0), "1600000d lu32i.d t1, 0");
COMPARE(lu32i_d(a7, 524287), "16ffffeb lu32i.d a7, 0x7ffff");
COMPARE(lu32i_d(t0, -524288), "1700000c lu32i.d t0, 0x80000");
COMPARE(lu32i_d(t1, 0), "1600000d lu32i.d t1, 0x0");
COMPARE(pcaddi(t1, 1), "1800002d pcaddi t1, 1");
COMPARE(pcaddi(t2, 524287), "18ffffee pcaddi t2, 524287");
COMPARE(pcaddi(t3, -524288), "1900000f pcaddi t3, -524288");
COMPARE(pcaddi(t4, 0), "18000010 pcaddi t4, 0");
COMPARE(pcaddi(t1, 1), "1800002d pcaddi t1, 0x1");
COMPARE(pcaddi(t2, 524287), "18ffffee pcaddi t2, 0x7ffff");
COMPARE(pcaddi(t3, -524288), "1900000f pcaddi t3, 0x80000");
COMPARE(pcaddi(t4, 0), "18000010 pcaddi t4, 0x0");
COMPARE(pcalau12i(t5, 524287), "1afffff1 pcalau12i t5, 524287");
COMPARE(pcalau12i(t6, -524288), "1b000012 pcalau12i t6, -524288");
COMPARE(pcalau12i(a4, 0), "1a000008 pcalau12i a4, 0");
COMPARE(pcalau12i(t5, 524287), "1afffff1 pcalau12i t5, 0x7ffff");
COMPARE(pcalau12i(t6, -524288), "1b000012 pcalau12i t6, 0x80000");
COMPARE(pcalau12i(a4, 0), "1a000008 pcalau12i a4, 0x0");
COMPARE(pcaddu12i(a5, 524287), "1cffffe9 pcaddu12i a5, 524287");
COMPARE(pcaddu12i(a6, -524288), "1d00000a pcaddu12i a6, -524288");
COMPARE(pcaddu12i(a7, 0), "1c00000b pcaddu12i a7, 0");
COMPARE(pcaddu12i(a5, 524287), "1cffffe9 pcaddu12i a5, 0x7ffff");
COMPARE(pcaddu12i(a6, -524288), "1d00000a pcaddu12i a6, 0x80000");
COMPARE(pcaddu12i(a7, 0), "1c00000b pcaddu12i a7, 0x0");
COMPARE(pcaddu18i(t0, 524287), "1effffec pcaddu18i t0, 524287");
COMPARE(pcaddu18i(t1, -524288), "1f00000d pcaddu18i t1, -524288");
COMPARE(pcaddu18i(t2, 0), "1e00000e pcaddu18i t2, 0");
COMPARE(pcaddu18i(t0, 524287), "1effffec pcaddu18i t0, 0x7ffff");
COMPARE(pcaddu18i(t1, -524288), "1f00000d pcaddu18i t1, 0x80000");
COMPARE(pcaddu18i(t2, 0), "1e00000e pcaddu18i t2, 0x0");
VERIFY_RUN();
}
......@@ -221,37 +223,53 @@ TEST(TypeOp7) {
TEST(TypeOp8) {
SET_UP();
COMPARE(ll_w(t2, t3, 32764), "207ffdee ll.w t2, t3, 32764");
COMPARE(ll_w(t3, t4, -32768), "2080020f ll.w t3, t4, -32768");
COMPARE(ll_w(t5, t6, 0), "20000251 ll.w t5, t6, 0");
COMPARE(sc_w(a6, a7, 32764), "217ffd6a sc.w a6, a7, 32764");
COMPARE(sc_w(t0, t1, -32768), "218001ac sc.w t0, t1, -32768");
COMPARE(sc_w(t2, t3, 0), "210001ee sc.w t2, t3, 0");
COMPARE(ll_d(a0, a1, 32764), "227ffca4 ll.d a0, a1, 32764");
COMPARE(ll_d(a2, a3, -32768), "228000e6 ll.d a2, a3, -32768");
COMPARE(ll_d(a4, a5, 0), "22000128 ll.d a4, a5, 0");
COMPARE(sc_d(t4, t5, 32764), "237ffe30 sc.d t4, t5, 32764");
COMPARE(sc_d(t6, a0, -32768), "23800092 sc.d t6, a0, -32768");
COMPARE(sc_d(a1, a2, 0), "230000c5 sc.d a1, a2, 0");
COMPARE(ldptr_w(a4, a5, 32764), "247ffd28 ldptr.w a4, a5, 32764");
COMPARE(ldptr_w(a6, a7, -32768), "2480016a ldptr.w a6, a7, -32768");
COMPARE(ldptr_w(t0, t1, 0), "240001ac ldptr.w t0, t1, 0");
COMPARE(stptr_w(a4, a5, 32764), "257ffd28 stptr.w a4, a5, 32764");
COMPARE(stptr_w(a6, a7, -32768), "2580016a stptr.w a6, a7, -32768");
COMPARE(stptr_w(t0, t1, 0), "250001ac stptr.w t0, t1, 0");
COMPARE(ldptr_d(t2, t3, 32764), "267ffdee ldptr.d t2, t3, 32764");
COMPARE(ldptr_d(t4, t5, -32768), "26800230 ldptr.d t4, t5, -32768");
COMPARE(ldptr_d(t6, a4, 0), "26000112 ldptr.d t6, a4, 0");
COMPARE(stptr_d(a5, a6, 32764), "277ffd49 stptr.d a5, a6, 32764");
COMPARE(stptr_d(a7, t0, -32768), "2780018b stptr.d a7, t0, -32768");
COMPARE(stptr_d(t1, t2, 0), "270001cd stptr.d t1, t2, 0");
COMPARE(ll_w(t2, t3, 32764),
"207ffdee ll.w t2, t3, 32764(0x7ffc)");
COMPARE(ll_w(t3, t4, -32768),
"2080020f ll.w t3, t4, -32768(0x8000)");
COMPARE(ll_w(t5, t6, 0), "20000251 ll.w t5, t6, 0(0x0)");
COMPARE(sc_w(a6, a7, 32764),
"217ffd6a sc.w a6, a7, 32764(0x7ffc)");
COMPARE(sc_w(t0, t1, -32768),
"218001ac sc.w t0, t1, -32768(0x8000)");
COMPARE(sc_w(t2, t3, 0), "210001ee sc.w t2, t3, 0(0x0)");
COMPARE(ll_d(a0, a1, 32764),
"227ffca4 ll.d a0, a1, 32764(0x7ffc)");
COMPARE(ll_d(a2, a3, -32768),
"228000e6 ll.d a2, a3, -32768(0x8000)");
COMPARE(ll_d(a4, a5, 0), "22000128 ll.d a4, a5, 0(0x0)");
COMPARE(sc_d(t4, t5, 32764),
"237ffe30 sc.d t4, t5, 32764(0x7ffc)");
COMPARE(sc_d(t6, a0, -32768),
"23800092 sc.d t6, a0, -32768(0x8000)");
COMPARE(sc_d(a1, a2, 0), "230000c5 sc.d a1, a2, 0(0x0)");
COMPARE(ldptr_w(a4, a5, 32764),
"247ffd28 ldptr.w a4, a5, 32764(0x7ffc)");
COMPARE(ldptr_w(a6, a7, -32768),
"2480016a ldptr.w a6, a7, -32768(0x8000)");
COMPARE(ldptr_w(t0, t1, 0), "240001ac ldptr.w t0, t1, 0(0x0)");
COMPARE(stptr_w(a4, a5, 32764),
"257ffd28 stptr.w a4, a5, 32764(0x7ffc)");
COMPARE(stptr_w(a6, a7, -32768),
"2580016a stptr.w a6, a7, -32768(0x8000)");
COMPARE(stptr_w(t0, t1, 0), "250001ac stptr.w t0, t1, 0(0x0)");
COMPARE(ldptr_d(t2, t3, 32764),
"267ffdee ldptr.d t2, t3, 32764(0x7ffc)");
COMPARE(ldptr_d(t4, t5, -32768),
"26800230 ldptr.d t4, t5, -32768(0x8000)");
COMPARE(ldptr_d(t6, a4, 0), "26000112 ldptr.d t6, a4, 0(0x0)");
COMPARE(stptr_d(a5, a6, 32764),
"277ffd49 stptr.d a5, a6, 32764(0x7ffc)");
COMPARE(stptr_d(a7, t0, -32768),
"2780018b stptr.d a7, t0, -32768(0x8000)");
COMPARE(stptr_d(t1, t2, 0), "270001cd stptr.d t1, t2, 0(0x0)");
VERIFY_RUN();
}
......@@ -260,94 +278,131 @@ TEST(TypeOp10) {
SET_UP();
COMPARE(bstrins_w(a4, a5, 31, 16),
"007f4128 bstrins.w a4, a5, 31, 16");
COMPARE(bstrins_w(a6, a7, 5, 0), "0065016a bstrins.w a6, a7, 5, 0");
"007f4128 bstrins.w a4, a5, 31, 16");
COMPARE(bstrins_w(a6, a7, 5, 0), "0065016a bstrins.w a6, a7, 5, 0");
COMPARE(bstrins_d(a3, zero_reg, 17, 0),
"00910007 bstrins.d a3, zero_reg, 17, 0");
"00910007 bstrins.d a3, zero_reg, 17, 0");
COMPARE(bstrins_d(t1, zero_reg, 17, 0),
"0091000d bstrins.d t1, zero_reg, 17, 0");
"0091000d bstrins.d t1, zero_reg, 17, 0");
COMPARE(bstrpick_w(t0, t1, 31, 29),
"007ff5ac bstrpick.w t0, t1, 31, 29");
"007ff5ac bstrpick.w t0, t1, 31, 29");
COMPARE(bstrpick_w(a4, a5, 16, 0),
"00708128 bstrpick.w a4, a5, 16, 0");
"00708128 bstrpick.w a4, a5, 16, 0");
COMPARE(bstrpick_d(a5, a5, 31, 0),
"00df0129 bstrpick.d a5, a5, 31, 0");
"00df0129 bstrpick.d a5, a5, 31, 0");
COMPARE(bstrpick_d(a4, a4, 25, 2),
"00d90908 bstrpick.d a4, a4, 25, 2");
"00d90908 bstrpick.d a4, a4, 25, 2");
COMPARE(slti(t2, a5, 2047), "021ffd2e slti t2, a5, 2047");
COMPARE(slti(a7, a1, -2048), "022000ab slti a7, a1, -2048");
COMPARE(slti(t2, a5, 2047),
"021ffd2e slti t2, a5, 2047(0x7ff)");
COMPARE(slti(a7, a1, -2048),
"022000ab slti a7, a1, -2048(0x800)");
COMPARE(sltui(a7, a7, 2047), "025ffd6b sltui a7, a7, 2047");
COMPARE(sltui(t1, t1, -2048), "026001ad sltui t1, t1, -2048");
COMPARE(sltui(a7, a7, 2047),
"025ffd6b sltui a7, a7, 2047(0x7ff)");
COMPARE(sltui(t1, t1, -2048),
"026001ad sltui t1, t1, -2048(0x800)");
COMPARE(addi_w(t0, t2, 2047), "029ffdcc addi.w t0, t2, 2047");
COMPARE(addi_w(a0, a0, -2048), "02a00084 addi.w a0, a0, -2048");
COMPARE(addi_w(t0, t2, 2047),
"029ffdcc addi.w t0, t2, 2047(0x7ff)");
COMPARE(addi_w(a0, a0, -2048),
"02a00084 addi.w a0, a0, -2048(0x800)");
COMPARE(addi_d(a0, zero_reg, 2047),
"02dffc04 addi.d a0, zero_reg, 2047");
COMPARE(addi_d(t7, t7, -2048), "02e00273 addi.d t7, t7, -2048");
COMPARE(lu52i_d(a0, a0, 2047), "031ffc84 lu52i.d a0, a0, 2047");
COMPARE(lu52i_d(a1, a1, -2048), "032000a5 lu52i.d a1, a1, -2048");
COMPARE(andi(s3, a3, 0xfff), "037ffcfa andi s3, a3, 0xfff");
COMPARE(andi(a4, a4, 0), "03400108 andi a4, a4, 0x0");
COMPARE(ori(t6, t6, 0xfff), "03bffe52 ori t6, t6, 0xfff");
COMPARE(ori(t6, t6, 0), "03800252 ori t6, t6, 0x0");
COMPARE(xori(t1, t1, 0xfff), "03fffdad xori t1, t1, 0xfff");
COMPARE(xori(a3, a3, 0x0), "03c000e7 xori a3, a3, 0x0");
COMPARE(ld_b(a1, a1, 2047), "281ffca5 ld.b a1, a1, 2047");
COMPARE(ld_b(a4, a4, -2048), "28200108 ld.b a4, a4, -2048");
COMPARE(ld_h(a4, a0, 2047), "285ffc88 ld.h a4, a0, 2047");
COMPARE(ld_h(a4, a3, -2048), "286000e8 ld.h a4, a3, -2048");
COMPARE(ld_w(a6, a6, 2047), "289ffd4a ld.w a6, a6, 2047");
COMPARE(ld_w(a5, a4, -2048), "28a00109 ld.w a5, a4, -2048");
COMPARE(ld_d(a0, a3, 2047), "28dffce4 ld.d a0, a3, 2047");
COMPARE(ld_d(a6, fp, -2048), "28e002ca ld.d a6, fp, -2048");
COMPARE(ld_d(a0, a6, 0), "28c00144 ld.d a0, a6, 0");
COMPARE(st_b(a4, a0, 2047), "291ffc88 st.b a4, a0, 2047");
COMPARE(st_b(a6, a5, -2048), "2920012a st.b a6, a5, -2048");
COMPARE(st_h(a4, a0, 2047), "295ffc88 st.h a4, a0, 2047");
COMPARE(st_h(t1, t2, -2048), "296001cd st.h t1, t2, -2048");
COMPARE(st_w(t3, a4, 2047), "299ffd0f st.w t3, a4, 2047");
COMPARE(st_w(a3, t2, -2048), "29a001c7 st.w a3, t2, -2048");
COMPARE(st_d(s3, sp, 2047), "29dffc7a st.d s3, sp, 2047");
COMPARE(st_d(fp, s6, -2048), "29e003b6 st.d fp, s6, -2048");
COMPARE(ld_bu(a6, a0, 2047), "2a1ffc8a ld.bu a6, a0, 2047");
COMPARE(ld_bu(a7, a7, -2048), "2a20016b ld.bu a7, a7, -2048");
COMPARE(ld_hu(a7, a7, 2047), "2a5ffd6b ld.hu a7, a7, 2047");
COMPARE(ld_hu(a3, a3, -2048), "2a6000e7 ld.hu a3, a3, -2048");
COMPARE(ld_wu(a3, a0, 2047), "2a9ffc87 ld.wu a3, a0, 2047");
COMPARE(ld_wu(a3, a5, -2048), "2aa00127 ld.wu a3, a5, -2048");
COMPARE(fld_s(f0, a3, 2047), "2b1ffce0 fld.s f0, a3, 2047");
COMPARE(fld_s(f0, a1, -2048), "2b2000a0 fld.s f0, a1, -2048");
COMPARE(fld_d(f0, a0, 2047), "2b9ffc80 fld.d f0, a0, 2047");
COMPARE(fld_d(f0, fp, -2048), "2ba002c0 fld.d f0, fp, -2048");
COMPARE(fst_d(f0, fp, 2047), "2bdffec0 fst.d f0, fp, 2047");
COMPARE(fst_d(f0, a0, -2048), "2be00080 fst.d f0, a0, -2048");
COMPARE(fst_s(f0, a5, 2047), "2b5ffd20 fst.s f0, a5, 2047");
COMPARE(fst_s(f0, a3, -2048), "2b6000e0 fst.s f0, a3, -2048");
"02dffc04 addi.d a0, zero_reg, 2047(0x7ff)");
COMPARE(addi_d(t7, t7, -2048),
"02e00273 addi.d t7, t7, -2048(0x800)");
COMPARE(lu52i_d(a0, a0, 2047), "031ffc84 lu52i.d a0, a0, 0x7ff");
COMPARE(lu52i_d(a1, a1, -2048), "032000a5 lu52i.d a1, a1, 0x800");
COMPARE(andi(s3, a3, 0xfff), "037ffcfa andi s3, a3, 0xfff");
COMPARE(andi(a4, a4, 0), "03400108 andi a4, a4, 0x0");
COMPARE(ori(t6, t6, 0xfff), "03bffe52 ori t6, t6, 0xfff");
COMPARE(ori(t6, t6, 0), "03800252 ori t6, t6, 0x0");
COMPARE(xori(t1, t1, 0xfff), "03fffdad xori t1, t1, 0xfff");
COMPARE(xori(a3, a3, 0x0), "03c000e7 xori a3, a3, 0x0");
COMPARE(ld_b(a1, a1, 2047),
"281ffca5 ld.b a1, a1, 2047(0x7ff)");
COMPARE(ld_b(a4, a4, -2048),
"28200108 ld.b a4, a4, -2048(0x800)");
COMPARE(ld_h(a4, a0, 2047),
"285ffc88 ld.h a4, a0, 2047(0x7ff)");
COMPARE(ld_h(a4, a3, -2048),
"286000e8 ld.h a4, a3, -2048(0x800)");
COMPARE(ld_w(a6, a6, 2047),
"289ffd4a ld.w a6, a6, 2047(0x7ff)");
COMPARE(ld_w(a5, a4, -2048),
"28a00109 ld.w a5, a4, -2048(0x800)");
COMPARE(ld_d(a0, a3, 2047),
"28dffce4 ld.d a0, a3, 2047(0x7ff)");
COMPARE(ld_d(a6, fp, -2048),
"28e002ca ld.d a6, fp, -2048(0x800)");
COMPARE(ld_d(a0, a6, 0), "28c00144 ld.d a0, a6, 0(0x0)");
COMPARE(st_b(a4, a0, 2047),
"291ffc88 st.b a4, a0, 2047(0x7ff)");
COMPARE(st_b(a6, a5, -2048),
"2920012a st.b a6, a5, -2048(0x800)");
COMPARE(st_h(a4, a0, 2047),
"295ffc88 st.h a4, a0, 2047(0x7ff)");
COMPARE(st_h(t1, t2, -2048),
"296001cd st.h t1, t2, -2048(0x800)");
COMPARE(st_w(t3, a4, 2047),
"299ffd0f st.w t3, a4, 2047(0x7ff)");
COMPARE(st_w(a3, t2, -2048),
"29a001c7 st.w a3, t2, -2048(0x800)");
COMPARE(st_d(s3, sp, 2047),
"29dffc7a st.d s3, sp, 2047(0x7ff)");
COMPARE(st_d(fp, s6, -2048),
"29e003b6 st.d fp, s6, -2048(0x800)");
COMPARE(ld_bu(a6, a0, 2047),
"2a1ffc8a ld.bu a6, a0, 2047(0x7ff)");
COMPARE(ld_bu(a7, a7, -2048),
"2a20016b ld.bu a7, a7, -2048(0x800)");
COMPARE(ld_hu(a7, a7, 2047),
"2a5ffd6b ld.hu a7, a7, 2047(0x7ff)");
COMPARE(ld_hu(a3, a3, -2048),
"2a6000e7 ld.hu a3, a3, -2048(0x800)");
COMPARE(ld_wu(a3, a0, 2047),
"2a9ffc87 ld.wu a3, a0, 2047(0x7ff)");
COMPARE(ld_wu(a3, a5, -2048),
"2aa00127 ld.wu a3, a5, -2048(0x800)");
COMPARE(fld_s(f0, a3, 2047),
"2b1ffce0 fld.s f0, a3, 2047(0x7ff)");
COMPARE(fld_s(f0, a1, -2048),
"2b2000a0 fld.s f0, a1, -2048(0x800)");
COMPARE(fld_d(f0, a0, 2047),
"2b9ffc80 fld.d f0, a0, 2047(0x7ff)");
COMPARE(fld_d(f0, fp, -2048),
"2ba002c0 fld.d f0, fp, -2048(0x800)");
COMPARE(fst_d(f0, fp, 2047),
"2bdffec0 fst.d f0, fp, 2047(0x7ff)");
COMPARE(fst_d(f0, a0, -2048),
"2be00080 fst.d f0, a0, -2048(0x800)");
COMPARE(fst_s(f0, a5, 2047),
"2b5ffd20 fst.s f0, a5, 2047(0x7ff)");
COMPARE(fst_s(f0, a3, -2048),
"2b6000e0 fst.s f0, a3, -2048(0x800)");
VERIFY_RUN();
}
......@@ -355,21 +410,25 @@ TEST(TypeOp10) {
TEST(TypeOp12) {
SET_UP();
COMPARE(fmadd_s(f0, f1, f2, f3), "08118820 fmadd.s f0, f1, f2, f3");
COMPARE(fmadd_s(f4, f5, f6, f7), "081398a4 fmadd.s f4, f5, f6, f7");
COMPARE(fmadd_s(f0, f1, f2, f3),
"08118820 fmadd.s f0, f1, f2, f3");
COMPARE(fmadd_s(f4, f5, f6, f7),
"081398a4 fmadd.s f4, f5, f6, f7");
COMPARE(fmadd_d(f8, f9, f10, f11),
"0825a928 fmadd.d f8, f9, f10, f11");
"0825a928 fmadd.d f8, f9, f10, f11");
COMPARE(fmadd_d(f12, f13, f14, f15),
"0827b9ac fmadd.d f12, f13, f14, f15");
"0827b9ac fmadd.d f12, f13, f14, f15");
COMPARE(fmsub_s(f0, f1, f2, f3), "08518820 fmsub.s f0, f1, f2, f3");
COMPARE(fmsub_s(f4, f5, f6, f7), "085398a4 fmsub.s f4, f5, f6, f7");
COMPARE(fmsub_s(f0, f1, f2, f3),
"08518820 fmsub.s f0, f1, f2, f3");
COMPARE(fmsub_s(f4, f5, f6, f7),
"085398a4 fmsub.s f4, f5, f6, f7");
COMPARE(fmsub_d(f8, f9, f10, f11),
"0865a928 fmsub.d f8, f9, f10, f11");
"0865a928 fmsub.d f8, f9, f10, f11");
COMPARE(fmsub_d(f12, f13, f14, f15),
"0867b9ac fmsub.d f12, f13, f14, f15");
"0867b9ac fmsub.d f12, f13, f14, f15");
COMPARE(fnmadd_s(f0, f1, f2, f3),
"08918820 fnmadd.s f0, f1, f2, f3");
......@@ -392,102 +451,102 @@ TEST(TypeOp12) {
"08e7b9ac fnmsub.d f12, f13, f14, f15");
COMPARE(fcmp_cond_s(CAF, f1, f2, FCC0),
"0c100820 fcmp.caf.s fcc0, f1, f2");
"0c100820 fcmp.caf.s fcc0, f1, f2");
COMPARE(fcmp_cond_s(CUN, f5, f6, FCC0),
"0c1418a0 fcmp.cun.s fcc0, f5, f6");
"0c1418a0 fcmp.cun.s fcc0, f5, f6");
COMPARE(fcmp_cond_s(CEQ, f9, f10, FCC0),
"0c122920 fcmp.ceq.s fcc0, f9, f10");
"0c122920 fcmp.ceq.s fcc0, f9, f10");
COMPARE(fcmp_cond_s(CUEQ, f13, f14, FCC0),
"0c1639a0 fcmp.cueq.s fcc0, f13, f14");
"0c1639a0 fcmp.cueq.s fcc0, f13, f14");
COMPARE(fcmp_cond_s(CLT, f1, f2, FCC0),
"0c110820 fcmp.clt.s fcc0, f1, f2");
"0c110820 fcmp.clt.s fcc0, f1, f2");
COMPARE(fcmp_cond_s(CULT, f5, f6, FCC0),
"0c1518a0 fcmp.cult.s fcc0, f5, f6");
"0c1518a0 fcmp.cult.s fcc0, f5, f6");
COMPARE(fcmp_cond_s(CLE, f9, f10, FCC0),
"0c132920 fcmp.cle.s fcc0, f9, f10");
"0c132920 fcmp.cle.s fcc0, f9, f10");
COMPARE(fcmp_cond_s(CULE, f13, f14, FCC0),
"0c1739a0 fcmp.cule.s fcc0, f13, f14");
"0c1739a0 fcmp.cule.s fcc0, f13, f14");
COMPARE(fcmp_cond_s(CNE, f1, f2, FCC0),
"0c180820 fcmp.cne.s fcc0, f1, f2");
"0c180820 fcmp.cne.s fcc0, f1, f2");
COMPARE(fcmp_cond_s(COR, f5, f6, FCC0),
"0c1a18a0 fcmp.cor.s fcc0, f5, f6");
"0c1a18a0 fcmp.cor.s fcc0, f5, f6");
COMPARE(fcmp_cond_s(CUNE, f9, f10, FCC0),
"0c1c2920 fcmp.cune.s fcc0, f9, f10");
"0c1c2920 fcmp.cune.s fcc0, f9, f10");
COMPARE(fcmp_cond_s(SAF, f13, f14, FCC0),
"0c10b9a0 fcmp.saf.s fcc0, f13, f14");
"0c10b9a0 fcmp.saf.s fcc0, f13, f14");
COMPARE(fcmp_cond_s(SUN, f1, f2, FCC0),
"0c148820 fcmp.sun.s fcc0, f1, f2");
"0c148820 fcmp.sun.s fcc0, f1, f2");
COMPARE(fcmp_cond_s(SEQ, f5, f6, FCC0),
"0c1298a0 fcmp.seq.s fcc0, f5, f6");
"0c1298a0 fcmp.seq.s fcc0, f5, f6");
COMPARE(fcmp_cond_s(SUEQ, f9, f10, FCC0),
"0c16a920 fcmp.sueq.s fcc0, f9, f10");
"0c16a920 fcmp.sueq.s fcc0, f9, f10");
// COMPARE(fcmp_cond_s(SLT, f13, f14, FCC0),
// "0c11b9a0 fcmp.slt.s fcc0, f13, f14");
// "0c11b9a0 fcmp.slt.s fcc0, f13, f14");
COMPARE(fcmp_cond_s(SULT, f1, f2, FCC0),
"0c158820 fcmp.sult.s fcc0, f1, f2");
"0c158820 fcmp.sult.s fcc0, f1, f2");
COMPARE(fcmp_cond_s(SLE, f5, f6, FCC0),
"0c1398a0 fcmp.sle.s fcc0, f5, f6");
"0c1398a0 fcmp.sle.s fcc0, f5, f6");
COMPARE(fcmp_cond_s(SULE, f9, f10, FCC0),
"0c17a920 fcmp.sule.s fcc0, f9, f10");
"0c17a920 fcmp.sule.s fcc0, f9, f10");
COMPARE(fcmp_cond_s(SNE, f13, f14, FCC0),
"0c18b9a0 fcmp.sne.s fcc0, f13, f14");
"0c18b9a0 fcmp.sne.s fcc0, f13, f14");
COMPARE(fcmp_cond_s(SOR, f13, f14, FCC0),
"0c1ab9a0 fcmp.sor.s fcc0, f13, f14");
"0c1ab9a0 fcmp.sor.s fcc0, f13, f14");
COMPARE(fcmp_cond_s(SUNE, f1, f2, FCC0),
"0c1c8820 fcmp.sune.s fcc0, f1, f2");
"0c1c8820 fcmp.sune.s fcc0, f1, f2");
COMPARE(fcmp_cond_d(CAF, f1, f2, FCC0),
"0c200820 fcmp.caf.d fcc0, f1, f2");
"0c200820 fcmp.caf.d fcc0, f1, f2");
COMPARE(fcmp_cond_d(CUN, f5, f6, FCC0),
"0c2418a0 fcmp.cun.d fcc0, f5, f6");
"0c2418a0 fcmp.cun.d fcc0, f5, f6");
COMPARE(fcmp_cond_d(CEQ, f9, f10, FCC0),
"0c222920 fcmp.ceq.d fcc0, f9, f10");
"0c222920 fcmp.ceq.d fcc0, f9, f10");
COMPARE(fcmp_cond_d(CUEQ, f13, f14, FCC0),
"0c2639a0 fcmp.cueq.d fcc0, f13, f14");
"0c2639a0 fcmp.cueq.d fcc0, f13, f14");
COMPARE(fcmp_cond_d(CLT, f1, f2, FCC0),
"0c210820 fcmp.clt.d fcc0, f1, f2");
"0c210820 fcmp.clt.d fcc0, f1, f2");
COMPARE(fcmp_cond_d(CULT, f5, f6, FCC0),
"0c2518a0 fcmp.cult.d fcc0, f5, f6");
"0c2518a0 fcmp.cult.d fcc0, f5, f6");
COMPARE(fcmp_cond_d(CLE, f9, f10, FCC0),
"0c232920 fcmp.cle.d fcc0, f9, f10");
"0c232920 fcmp.cle.d fcc0, f9, f10");
COMPARE(fcmp_cond_d(CULE, f13, f14, FCC0),
"0c2739a0 fcmp.cule.d fcc0, f13, f14");
"0c2739a0 fcmp.cule.d fcc0, f13, f14");
COMPARE(fcmp_cond_d(CNE, f1, f2, FCC0),
"0c280820 fcmp.cne.d fcc0, f1, f2");
"0c280820 fcmp.cne.d fcc0, f1, f2");
COMPARE(fcmp_cond_d(COR, f5, f6, FCC0),
"0c2a18a0 fcmp.cor.d fcc0, f5, f6");
"0c2a18a0 fcmp.cor.d fcc0, f5, f6");
COMPARE(fcmp_cond_d(CUNE, f9, f10, FCC0),
"0c2c2920 fcmp.cune.d fcc0, f9, f10");
"0c2c2920 fcmp.cune.d fcc0, f9, f10");
COMPARE(fcmp_cond_d(SAF, f13, f14, FCC0),
"0c20b9a0 fcmp.saf.d fcc0, f13, f14");
"0c20b9a0 fcmp.saf.d fcc0, f13, f14");
COMPARE(fcmp_cond_d(SUN, f1, f2, FCC0),
"0c248820 fcmp.sun.d fcc0, f1, f2");
"0c248820 fcmp.sun.d fcc0, f1, f2");
COMPARE(fcmp_cond_d(SEQ, f5, f6, FCC0),
"0c2298a0 fcmp.seq.d fcc0, f5, f6");
"0c2298a0 fcmp.seq.d fcc0, f5, f6");
COMPARE(fcmp_cond_d(SUEQ, f9, f10, FCC0),
"0c26a920 fcmp.sueq.d fcc0, f9, f10");
"0c26a920 fcmp.sueq.d fcc0, f9, f10");
// COMPARE(fcmp_cond_d(SLT, f13, f14, FCC0),
// "0c21b9a0 fcmp.slt.d fcc0, f13, f14");
// "0c21b9a0 fcmp.slt.d fcc0, f13, f14");
COMPARE(fcmp_cond_d(SULT, f1, f2, FCC0),
"0c258820 fcmp.sult.d fcc0, f1, f2");
"0c258820 fcmp.sult.d fcc0, f1, f2");
COMPARE(fcmp_cond_d(SLE, f5, f6, FCC0),
"0c2398a0 fcmp.sle.d fcc0, f5, f6");
"0c2398a0 fcmp.sle.d fcc0, f5, f6");
COMPARE(fcmp_cond_d(SULE, f9, f10, FCC0),
"0c27a920 fcmp.sule.d fcc0, f9, f10");
"0c27a920 fcmp.sule.d fcc0, f9, f10");
COMPARE(fcmp_cond_d(SNE, f13, f14, FCC0),
"0c28b9a0 fcmp.sne.d fcc0, f13, f14");
"0c28b9a0 fcmp.sne.d fcc0, f13, f14");
COMPARE(fcmp_cond_d(SOR, f13, f14, FCC0),
"0c2ab9a0 fcmp.sor.d fcc0, f13, f14");
"0c2ab9a0 fcmp.sor.d fcc0, f13, f14");
COMPARE(fcmp_cond_d(SUNE, f1, f2, FCC0),
"0c2c8820 fcmp.sune.d fcc0, f1, f2");
"0c2c8820 fcmp.sune.d fcc0, f1, f2");
VERIFY_RUN();
}
......@@ -495,47 +554,47 @@ TEST(TypeOp12) {
TEST(TypeOp14) {
SET_UP();
COMPARE(alsl_w(a0, a1, a2, 1), "000418a4 alsl.w a0, a1, a2, 1");
COMPARE(alsl_w(a3, a4, a5, 3), "00052507 alsl.w a3, a4, a5, 3");
COMPARE(alsl_w(a6, a7, t0, 4), "0005b16a alsl.w a6, a7, t0, 4");
COMPARE(alsl_w(a0, a1, a2, 1), "000418a4 alsl.w a0, a1, a2, 1");
COMPARE(alsl_w(a3, a4, a5, 3), "00052507 alsl.w a3, a4, a5, 3");
COMPARE(alsl_w(a6, a7, t0, 4), "0005b16a alsl.w a6, a7, t0, 4");
COMPARE(alsl_wu(t1, t2, t3, 1), "00063dcd alsl.wu t1, t2, t3, 1");
COMPARE(alsl_wu(t4, t5, t6, 3), "00074a30 alsl.wu t4, t5, t6, 3");
COMPARE(alsl_wu(a0, a1, a2, 4), "000798a4 alsl.wu a0, a1, a2, 4");
COMPARE(alsl_wu(t1, t2, t3, 1), "00063dcd alsl.wu t1, t2, t3, 1");
COMPARE(alsl_wu(t4, t5, t6, 3), "00074a30 alsl.wu t4, t5, t6, 3");
COMPARE(alsl_wu(a0, a1, a2, 4), "000798a4 alsl.wu a0, a1, a2, 4");
COMPARE(alsl_d(a3, a4, a5, 1), "002c2507 alsl.d a3, a4, a5, 1");
COMPARE(alsl_d(a6, a7, t0, 3), "002d316a alsl.d a6, a7, t0, 3");
COMPARE(alsl_d(t1, t2, t3, 4), "002dbdcd alsl.d t1, t2, t3, 4");
COMPARE(alsl_d(a3, a4, a5, 1), "002c2507 alsl.d a3, a4, a5, 1");
COMPARE(alsl_d(a6, a7, t0, 3), "002d316a alsl.d a6, a7, t0, 3");
COMPARE(alsl_d(t1, t2, t3, 4), "002dbdcd alsl.d t1, t2, t3, 4");
COMPARE(bytepick_w(t4, t5, t6, 0),
"00084a30 bytepick.w t4, t5, t6, 0");
"00084a30 bytepick.w t4, t5, t6, 0");
COMPARE(bytepick_w(a0, a1, a2, 3),
"000998a4 bytepick.w a0, a1, a2, 3");
"000998a4 bytepick.w a0, a1, a2, 3");
COMPARE(bytepick_d(a6, a7, t0, 0),
"000c316a bytepick.d a6, a7, t0, 0");
"000c316a bytepick.d a6, a7, t0, 0");
COMPARE(bytepick_d(t4, t5, t6, 7),
"000fca30 bytepick.d t4, t5, t6, 7");
"000fca30 bytepick.d t4, t5, t6, 7");
COMPARE(slli_w(a3, a3, 31), "0040fce7 slli.w a3, a3, 31");
COMPARE(slli_w(a6, a6, 1), "0040854a slli.w a6, a6, 1");
COMPARE(slli_w(a3, a3, 31), "0040fce7 slli.w a3, a3, 31");
COMPARE(slli_w(a6, a6, 1), "0040854a slli.w a6, a6, 1");
COMPARE(slli_d(t3, t2, 63), "0041fdcf slli.d t3, t2, 63");
COMPARE(slli_d(t4, a6, 1), "00410550 slli.d t4, a6, 1");
COMPARE(slli_d(t3, t2, 63), "0041fdcf slli.d t3, t2, 63");
COMPARE(slli_d(t4, a6, 1), "00410550 slli.d t4, a6, 1");
COMPARE(srli_w(a7, a7, 31), "0044fd6b srli.w a7, a7, 31");
COMPARE(srli_w(a4, a4, 1), "00448508 srli.w a4, a4, 1");
COMPARE(srli_w(a7, a7, 31), "0044fd6b srli.w a7, a7, 31");
COMPARE(srli_w(a4, a4, 1), "00448508 srli.w a4, a4, 1");
COMPARE(srli_d(a4, a3, 63), "0045fce8 srli.d a4, a3, 63");
COMPARE(srli_d(a4, a4, 1), "00450508 srli.d a4, a4, 1");
COMPARE(srli_d(a4, a3, 63), "0045fce8 srli.d a4, a3, 63");
COMPARE(srli_d(a4, a4, 1), "00450508 srli.d a4, a4, 1");
COMPARE(srai_d(a0, a0, 63), "0049fc84 srai.d a0, a0, 63");
COMPARE(srai_d(a4, a1, 1), "004904a8 srai.d a4, a1, 1");
COMPARE(srai_d(a0, a0, 63), "0049fc84 srai.d a0, a0, 63");
COMPARE(srai_d(a4, a1, 1), "004904a8 srai.d a4, a1, 1");
COMPARE(srai_w(s4, a3, 31), "0048fcfb srai.w s4, a3, 31");
COMPARE(srai_w(s4, a5, 1), "0048853b srai.w s4, a5, 1");
COMPARE(srai_w(s4, a3, 31), "0048fcfb srai.w s4, a3, 31");
COMPARE(srai_w(s4, a5, 1), "0048853b srai.w s4, a5, 1");
COMPARE(rotri_d(t7, t6, 1), "004d0653 rotri.d t7, t6, 1");
COMPARE(rotri_d(t7, t6, 1), "004d0653 rotri.d t7, t6, 1");
VERIFY_RUN();
}
......@@ -543,206 +602,209 @@ TEST(TypeOp14) {
TEST(TypeOp17) {
SET_UP();
COMPARE(sltu(t5, t4, a4), "0012a211 sltu t5, t4, a4");
COMPARE(sltu(t4, zero_reg, t4), "0012c010 sltu t4, zero_reg, t4");
COMPARE(sltu(t5, t4, a4), "0012a211 sltu t5, t4, a4");
COMPARE(sltu(t4, zero_reg, t4),
"0012c010 sltu t4, zero_reg, t4");
COMPARE(add_w(a4, a4, a6), "00102908 add.w a4, a4, a6");
COMPARE(add_w(a5, a6, t3), "00103d49 add.w a5, a6, t3");
COMPARE(add_w(a4, a4, a6), "00102908 add.w a4, a4, a6");
COMPARE(add_w(a5, a6, t3), "00103d49 add.w a5, a6, t3");
COMPARE(add_d(a4, t0, t1), "0010b588 add.d a4, t0, t1");
COMPARE(add_d(a6, a3, t1), "0010b4ea add.d a6, a3, t1");
COMPARE(add_d(a4, t0, t1), "0010b588 add.d a4, t0, t1");
COMPARE(add_d(a6, a3, t1), "0010b4ea add.d a6, a3, t1");
COMPARE(sub_w(a7, a7, a2), "0011196b sub.w a7, a7, a2");
COMPARE(sub_w(a2, a2, s3), "001168c6 sub.w a2, a2, s3");
COMPARE(sub_w(a7, a7, a2), "0011196b sub.w a7, a7, a2");
COMPARE(sub_w(a2, a2, s3), "001168c6 sub.w a2, a2, s3");
COMPARE(sub_d(s3, ra, s3), "0011e83a sub.d s3, ra, s3");
COMPARE(sub_d(a0, a1, a2), "001198a4 sub.d a0, a1, a2");
COMPARE(sub_d(s3, ra, s3), "0011e83a sub.d s3, ra, s3");
COMPARE(sub_d(a0, a1, a2), "001198a4 sub.d a0, a1, a2");
COMPARE(slt(a5, a5, a6), "00122929 slt a5, a5, a6");
COMPARE(slt(a6, t3, t4), "001241ea slt a6, t3, t4");
COMPARE(slt(a5, a5, a6), "00122929 slt a5, a5, a6");
COMPARE(slt(a6, t3, t4), "001241ea slt a6, t3, t4");
COMPARE(masknez(a5, a5, a3), "00131d29 masknez a5, a5, a3");
COMPARE(masknez(a3, a4, a5), "00132507 masknez a3, a4, a5");
COMPARE(masknez(a5, a5, a3), "00131d29 masknez a5, a5, a3");
COMPARE(masknez(a3, a4, a5), "00132507 masknez a3, a4, a5");
COMPARE(maskeqz(a6, a7, t0), "0013b16a maskeqz a6, a7, t0");
COMPARE(maskeqz(t1, t2, t3), "0013bdcd maskeqz t1, t2, t3");
COMPARE(maskeqz(a6, a7, t0), "0013b16a maskeqz a6, a7, t0");
COMPARE(maskeqz(t1, t2, t3), "0013bdcd maskeqz t1, t2, t3");
COMPARE(or_(s3, sp, zero_reg), "0015007a or s3, sp, zero_reg");
COMPARE(or_(a4, a0, zero_reg), "00150088 or a4, a0, zero_reg");
COMPARE(or_(s3, sp, zero_reg),
"0015007a or s3, sp, zero_reg");
COMPARE(or_(a4, a0, zero_reg),
"00150088 or a4, a0, zero_reg");
COMPARE(and_(sp, sp, t6), "0014c863 and sp, sp, t6");
COMPARE(and_(a3, a3, a7), "0014ace7 and a3, a3, a7");
COMPARE(and_(sp, sp, t6), "0014c863 and sp, sp, t6");
COMPARE(and_(a3, a3, a7), "0014ace7 and a3, a3, a7");
COMPARE(nor(a7, a7, a7), "00142d6b nor a7, a7, a7");
COMPARE(nor(t4, t5, t6), "00144a30 nor t4, t5, t6");
COMPARE(nor(a7, a7, a7), "00142d6b nor a7, a7, a7");
COMPARE(nor(t4, t5, t6), "00144a30 nor t4, t5, t6");
COMPARE(xor_(a0, a1, a2), "001598a4 xor a0, a1, a2");
COMPARE(xor_(a3, a4, a5), "0015a507 xor a3, a4, a5");
COMPARE(xor_(a0, a1, a2), "001598a4 xor a0, a1, a2");
COMPARE(xor_(a3, a4, a5), "0015a507 xor a3, a4, a5");
COMPARE(orn(a6, a7, t0), "0016316a orn a6, a7, t0");
COMPARE(orn(t1, t2, t3), "00163dcd orn t1, t2, t3");
COMPARE(orn(a6, a7, t0), "0016316a orn a6, a7, t0");
COMPARE(orn(t1, t2, t3), "00163dcd orn t1, t2, t3");
COMPARE(andn(t4, t5, t6), "0016ca30 andn t4, t5, t6");
COMPARE(andn(a0, a1, a2), "001698a4 andn a0, a1, a2");
COMPARE(andn(t4, t5, t6), "0016ca30 andn t4, t5, t6");
COMPARE(andn(a0, a1, a2), "001698a4 andn a0, a1, a2");
COMPARE(sll_w(a3, t0, a7), "00172d87 sll.w a3, t0, a7");
COMPARE(sll_w(a3, a4, a3), "00171d07 sll.w a3, a4, a3");
COMPARE(sll_w(a3, t0, a7), "00172d87 sll.w a3, t0, a7");
COMPARE(sll_w(a3, a4, a3), "00171d07 sll.w a3, a4, a3");
COMPARE(srl_w(a3, a4, a3), "00179d07 srl.w a3, a4, a3");
COMPARE(srl_w(a3, t1, t4), "0017c1a7 srl.w a3, t1, t4");
COMPARE(srl_w(a3, a4, a3), "00179d07 srl.w a3, a4, a3");
COMPARE(srl_w(a3, t1, t4), "0017c1a7 srl.w a3, t1, t4");
COMPARE(sra_w(a4, t4, a4), "00182208 sra.w a4, t4, a4");
COMPARE(sra_w(a3, t1, a6), "001829a7 sra.w a3, t1, a6");
COMPARE(sra_w(a4, t4, a4), "00182208 sra.w a4, t4, a4");
COMPARE(sra_w(a3, t1, a6), "001829a7 sra.w a3, t1, a6");
COMPARE(sll_d(a3, a1, a3), "00189ca7 sll.d a3, a1, a3");
COMPARE(sll_d(a7, a4, t0), "0018b10b sll.d a7, a4, t0");
COMPARE(sll_d(a3, a1, a3), "00189ca7 sll.d a3, a1, a3");
COMPARE(sll_d(a7, a4, t0), "0018b10b sll.d a7, a4, t0");
COMPARE(srl_d(a7, a7, t0), "0019316b srl.d a7, a7, t0");
COMPARE(srl_d(t0, a6, t0), "0019314c srl.d t0, a6, t0");
COMPARE(srl_d(a7, a7, t0), "0019316b srl.d a7, a7, t0");
COMPARE(srl_d(t0, a6, t0), "0019314c srl.d t0, a6, t0");
COMPARE(sra_d(a3, a4, a5), "0019a507 sra.d a3, a4, a5");
COMPARE(sra_d(a6, a7, t0), "0019b16a sra.d a6, a7, t0");
COMPARE(sra_d(a3, a4, a5), "0019a507 sra.d a3, a4, a5");
COMPARE(sra_d(a6, a7, t0), "0019b16a sra.d a6, a7, t0");
COMPARE(rotr_d(t1, t2, t3), "001bbdcd rotr.d t1, t2, t3");
COMPARE(rotr_d(t4, t5, t6), "001bca30 rotr.d t4, t5, t6");
COMPARE(rotr_d(t1, t2, t3), "001bbdcd rotr.d t1, t2, t3");
COMPARE(rotr_d(t4, t5, t6), "001bca30 rotr.d t4, t5, t6");
COMPARE(rotr_w(a0, a1, a2), "001b18a4 rotr.w a0, a1, a2");
COMPARE(rotr_w(a3, a4, a5), "001b2507 rotr.w a3, a4, a5");
COMPARE(rotr_w(a0, a1, a2), "001b18a4 rotr.w a0, a1, a2");
COMPARE(rotr_w(a3, a4, a5), "001b2507 rotr.w a3, a4, a5");
COMPARE(mul_w(t8, a5, t7), "001c4d34 mul.w t8, a5, t7");
COMPARE(mul_w(t4, t5, t6), "001c4a30 mul.w t4, t5, t6");
COMPARE(mul_w(t8, a5, t7), "001c4d34 mul.w t8, a5, t7");
COMPARE(mul_w(t4, t5, t6), "001c4a30 mul.w t4, t5, t6");
COMPARE(mulh_w(s3, a3, t7), "001cccfa mulh.w s3, a3, t7");
COMPARE(mulh_w(a0, a1, a2), "001c98a4 mulh.w a0, a1, a2");
COMPARE(mulh_w(s3, a3, t7), "001cccfa mulh.w s3, a3, t7");
COMPARE(mulh_w(a0, a1, a2), "001c98a4 mulh.w a0, a1, a2");
COMPARE(mulh_wu(a6, a7, t0), "001d316a mulh.wu a6, a7, t0");
COMPARE(mulh_wu(t1, t2, t3), "001d3dcd mulh.wu t1, t2, t3");
COMPARE(mulh_wu(a6, a7, t0), "001d316a mulh.wu a6, a7, t0");
COMPARE(mulh_wu(t1, t2, t3), "001d3dcd mulh.wu t1, t2, t3");
COMPARE(mul_d(t2, a5, t1), "001db52e mul.d t2, a5, t1");
COMPARE(mul_d(a4, a4, a5), "001da508 mul.d a4, a4, a5");
COMPARE(mul_d(t2, a5, t1), "001db52e mul.d t2, a5, t1");
COMPARE(mul_d(a4, a4, a5), "001da508 mul.d a4, a4, a5");
COMPARE(mulh_d(a3, a4, a5), "001e2507 mulh.d a3, a4, a5");
COMPARE(mulh_d(a6, a7, t0), "001e316a mulh.d a6, a7, t0");
COMPARE(mulh_d(a3, a4, a5), "001e2507 mulh.d a3, a4, a5");
COMPARE(mulh_d(a6, a7, t0), "001e316a mulh.d a6, a7, t0");
COMPARE(mulh_du(t1, t2, t3), "001ebdcd mulh.du t1, t2, t3");
COMPARE(mulh_du(t4, t5, t6), "001eca30 mulh.du t4, t5, t6");
COMPARE(mulh_du(t1, t2, t3), "001ebdcd mulh.du t1, t2, t3");
COMPARE(mulh_du(t4, t5, t6), "001eca30 mulh.du t4, t5, t6");
COMPARE(mulw_d_w(a0, a1, a2), "001f18a4 mulw.d.w a0, a1, a2");
COMPARE(mulw_d_w(a3, a4, a5), "001f2507 mulw.d.w a3, a4, a5");
COMPARE(mulw_d_wu(a6, a7, t0), "001fb16a mulw.d.wu a6, a7, t0");
COMPARE(mulw_d_wu(t1, t2, t3), "001fbdcd mulw.d.wu t1, t2, t3");
COMPARE(mulw_d_wu(a6, a7, t0), "001fb16a mulw.d.wu a6, a7, t0");
COMPARE(mulw_d_wu(t1, t2, t3), "001fbdcd mulw.d.wu t1, t2, t3");
COMPARE(div_w(a5, a5, a3), "00201d29 div.w a5, a5, a3");
COMPARE(div_w(t4, t5, t6), "00204a30 div.w t4, t5, t6");
COMPARE(div_w(a5, a5, a3), "00201d29 div.w a5, a5, a3");
COMPARE(div_w(t4, t5, t6), "00204a30 div.w t4, t5, t6");
COMPARE(mod_w(a6, t3, a6), "0020a9ea mod.w a6, t3, a6");
COMPARE(mod_w(a3, a4, a3), "00209d07 mod.w a3, a4, a3");
COMPARE(mod_w(a6, t3, a6), "0020a9ea mod.w a6, t3, a6");
COMPARE(mod_w(a3, a4, a3), "00209d07 mod.w a3, a4, a3");
COMPARE(div_wu(t1, t2, t3), "00213dcd div.wu t1, t2, t3");
COMPARE(div_wu(t4, t5, t6), "00214a30 div.wu t4, t5, t6");
COMPARE(div_wu(t1, t2, t3), "00213dcd div.wu t1, t2, t3");
COMPARE(div_wu(t4, t5, t6), "00214a30 div.wu t4, t5, t6");
COMPARE(mod_wu(a0, a1, a2), "002198a4 mod.wu a0, a1, a2");
COMPARE(mod_wu(a3, a4, a5), "0021a507 mod.wu a3, a4, a5");
COMPARE(mod_wu(a0, a1, a2), "002198a4 mod.wu a0, a1, a2");
COMPARE(mod_wu(a3, a4, a5), "0021a507 mod.wu a3, a4, a5");
COMPARE(div_d(t0, t0, a6), "0022298c div.d t0, t0, a6");
COMPARE(div_d(a7, a7, a5), "0022256b div.d a7, a7, a5");
COMPARE(div_d(t0, t0, a6), "0022298c div.d t0, t0, a6");
COMPARE(div_d(a7, a7, a5), "0022256b div.d a7, a7, a5");
COMPARE(mod_d(a6, a7, t0), "0022b16a mod.d a6, a7, t0");
COMPARE(mod_d(t1, t2, t3), "0022bdcd mod.d t1, t2, t3");
COMPARE(mod_d(a6, a7, t0), "0022b16a mod.d a6, a7, t0");
COMPARE(mod_d(t1, t2, t3), "0022bdcd mod.d t1, t2, t3");
COMPARE(div_du(t4, t5, t6), "00234a30 div.du t4, t5, t6");
COMPARE(div_du(a0, a1, a2), "002318a4 div.du a0, a1, a2");
COMPARE(div_du(t4, t5, t6), "00234a30 div.du t4, t5, t6");
COMPARE(div_du(a0, a1, a2), "002318a4 div.du a0, a1, a2");
COMPARE(mod_du(a3, a4, a5), "0023a507 mod.du a3, a4, a5");
COMPARE(mod_du(a6, a7, t0), "0023b16a mod.du a6, a7, t0");
COMPARE(mod_du(a3, a4, a5), "0023a507 mod.du a3, a4, a5");
COMPARE(mod_du(a6, a7, t0), "0023b16a mod.du a6, a7, t0");
COMPARE(fadd_s(f3, f4, f5), "01009483 fadd.s f3, f4, f5");
COMPARE(fadd_s(f6, f7, f8), "0100a0e6 fadd.s f6, f7, f8");
COMPARE(fadd_s(f3, f4, f5), "01009483 fadd.s f3, f4, f5");
COMPARE(fadd_s(f6, f7, f8), "0100a0e6 fadd.s f6, f7, f8");
COMPARE(fadd_d(f0, f1, f0), "01010020 fadd.d f0, f1, f0");
COMPARE(fadd_d(f0, f1, f2), "01010820 fadd.d f0, f1, f2");
COMPARE(fadd_d(f0, f1, f0), "01010020 fadd.d f0, f1, f0");
COMPARE(fadd_d(f0, f1, f2), "01010820 fadd.d f0, f1, f2");
COMPARE(fsub_s(f9, f10, f11), "0102ad49 fsub.s f9, f10, f11");
COMPARE(fsub_s(f12, f13, f14), "0102b9ac fsub.s f12, f13, f14");
COMPARE(fsub_s(f9, f10, f11), "0102ad49 fsub.s f9, f10, f11");
COMPARE(fsub_s(f12, f13, f14), "0102b9ac fsub.s f12, f13, f14");
COMPARE(fsub_d(f30, f0, f30), "0103781e fsub.d f30, f0, f30");
COMPARE(fsub_d(f0, f0, f1), "01030400 fsub.d f0, f0, f1");
COMPARE(fsub_d(f30, f0, f30), "0103781e fsub.d f30, f0, f30");
COMPARE(fsub_d(f0, f0, f1), "01030400 fsub.d f0, f0, f1");
COMPARE(fmul_s(f15, f16, f17), "0104c60f fmul.s f15, f16, f17");
COMPARE(fmul_s(f18, f19, f20), "0104d272 fmul.s f18, f19, f20");
COMPARE(fmul_s(f15, f16, f17), "0104c60f fmul.s f15, f16, f17");
COMPARE(fmul_s(f18, f19, f20), "0104d272 fmul.s f18, f19, f20");
COMPARE(fmul_d(f0, f0, f1), "01050400 fmul.d f0, f0, f1");
COMPARE(fmul_d(f0, f0, f0), "01050000 fmul.d f0, f0, f0");
COMPARE(fmul_d(f0, f0, f1), "01050400 fmul.d f0, f0, f1");
COMPARE(fmul_d(f0, f0, f0), "01050000 fmul.d f0, f0, f0");
COMPARE(fdiv_s(f0, f1, f2), "01068820 fdiv.s f0, f1, f2");
COMPARE(fdiv_s(f3, f4, f5), "01069483 fdiv.s f3, f4, f5");
COMPARE(fdiv_s(f0, f1, f2), "01068820 fdiv.s f0, f1, f2");
COMPARE(fdiv_s(f3, f4, f5), "01069483 fdiv.s f3, f4, f5");
COMPARE(fdiv_d(f0, f0, f1), "01070400 fdiv.d f0, f0, f1");
COMPARE(fdiv_d(f0, f1, f0), "01070020 fdiv.d f0, f1, f0");
COMPARE(fdiv_d(f0, f0, f1), "01070400 fdiv.d f0, f0, f1");
COMPARE(fdiv_d(f0, f1, f0), "01070020 fdiv.d f0, f1, f0");
COMPARE(fmax_s(f9, f10, f11), "0108ad49 fmax.s f9, f10, f11");
COMPARE(fmin_s(f6, f7, f8), "010aa0e6 fmin.s f6, f7, f8");
COMPARE(fmax_s(f9, f10, f11), "0108ad49 fmax.s f9, f10, f11");
COMPARE(fmin_s(f6, f7, f8), "010aa0e6 fmin.s f6, f7, f8");
COMPARE(fmax_d(f0, f1, f0), "01090020 fmax.d f0, f1, f0");
COMPARE(fmin_d(f0, f1, f0), "010b0020 fmin.d f0, f1, f0");
COMPARE(fmax_d(f0, f1, f0), "01090020 fmax.d f0, f1, f0");
COMPARE(fmin_d(f0, f1, f0), "010b0020 fmin.d f0, f1, f0");
COMPARE(fmaxa_s(f12, f13, f14), "010cb9ac fmaxa.s f12, f13, f14");
COMPARE(fmina_s(f15, f16, f17), "010ec60f fmina.s f15, f16, f17");
COMPARE(fmaxa_s(f12, f13, f14), "010cb9ac fmaxa.s f12, f13, f14");
COMPARE(fmina_s(f15, f16, f17), "010ec60f fmina.s f15, f16, f17");
COMPARE(fmaxa_d(f18, f19, f20), "010d5272 fmaxa.d f18, f19, f20");
COMPARE(fmina_d(f0, f1, f2), "010f0820 fmina.d f0, f1, f2");
COMPARE(fmaxa_d(f18, f19, f20), "010d5272 fmaxa.d f18, f19, f20");
COMPARE(fmina_d(f0, f1, f2), "010f0820 fmina.d f0, f1, f2");
COMPARE(ldx_b(a0, a1, a2), "380018a4 ldx.b a0, a1, a2");
COMPARE(ldx_h(a3, a4, a5), "38042507 ldx.h a3, a4, a5");
COMPARE(ldx_w(a6, a7, t0), "3808316a ldx.w a6, a7, t0");
COMPARE(ldx_b(a0, a1, a2), "380018a4 ldx.b a0, a1, a2");
COMPARE(ldx_h(a3, a4, a5), "38042507 ldx.h a3, a4, a5");
COMPARE(ldx_w(a6, a7, t0), "3808316a ldx.w a6, a7, t0");
COMPARE(stx_b(t1, t2, t3), "38103dcd stx.b t1, t2, t3");
COMPARE(stx_h(t4, t5, t6), "38144a30 stx.h t4, t5, t6");
COMPARE(stx_w(a0, a1, a2), "381818a4 stx.w a0, a1, a2");
COMPARE(stx_b(t1, t2, t3), "38103dcd stx.b t1, t2, t3");
COMPARE(stx_h(t4, t5, t6), "38144a30 stx.h t4, t5, t6");
COMPARE(stx_w(a0, a1, a2), "381818a4 stx.w a0, a1, a2");
COMPARE(ldx_bu(a3, a4, a5), "38202507 ldx.bu a3, a4, a5");
COMPARE(ldx_hu(a6, a7, t0), "3824316a ldx.hu a6, a7, t0");
COMPARE(ldx_wu(t1, t2, t3), "38283dcd ldx.wu t1, t2, t3");
COMPARE(ldx_bu(a3, a4, a5), "38202507 ldx.bu a3, a4, a5");
COMPARE(ldx_hu(a6, a7, t0), "3824316a ldx.hu a6, a7, t0");
COMPARE(ldx_wu(t1, t2, t3), "38283dcd ldx.wu t1, t2, t3");
COMPARE(ldx_d(a2, s6, t6), "380c4ba6 ldx.d a2, s6, t6");
COMPARE(ldx_d(t7, s6, t6), "380c4bb3 ldx.d t7, s6, t6");
COMPARE(ldx_d(a2, s6, t6), "380c4ba6 ldx.d a2, s6, t6");
COMPARE(ldx_d(t7, s6, t6), "380c4bb3 ldx.d t7, s6, t6");
COMPARE(stx_d(a4, a3, t6), "381c48e8 stx.d a4, a3, t6");
COMPARE(stx_d(a0, a3, t6), "381c48e4 stx.d a0, a3, t6");
COMPARE(stx_d(a4, a3, t6), "381c48e8 stx.d a4, a3, t6");
COMPARE(stx_d(a0, a3, t6), "381c48e4 stx.d a0, a3, t6");
COMPARE(dbar(0), "38720000 dbar 0x0(0)");
COMPARE(ibar(5555), "387295b3 ibar 0x15b3(5555)");
COMPARE(dbar(0), "38720000 dbar 0x0(0)");
COMPARE(ibar(5555), "387295b3 ibar 0x15b3(5555)");
COMPARE(break_(0), "002a0000 break code: 0x0(0)");
COMPARE(break_(0x3fc0), "002a3fc0 break code: 0x3fc0(16320)");
COMPARE(break_(0), "002a0000 break code: 0x0(0)");
COMPARE(break_(0x3fc0), "002a3fc0 break code: 0x3fc0(16320)");
COMPARE(fldx_s(f3, a4, a5), "38302503 fldx.s f3, a4, a5");
COMPARE(fldx_d(f6, a7, t0), "38343166 fldx.d f6, a7, t0");
COMPARE(fldx_s(f3, a4, a5), "38302503 fldx.s f3, a4, a5");
COMPARE(fldx_d(f6, a7, t0), "38343166 fldx.d f6, a7, t0");
COMPARE(fstx_s(f1, t2, t3), "38383dc1 fstx.s f1, t2, t3");
COMPARE(fstx_d(f4, t5, t6), "383c4a24 fstx.d f4, t5, t6");
COMPARE(fstx_s(f1, t2, t3), "38383dc1 fstx.s f1, t2, t3");
COMPARE(fstx_d(f4, t5, t6), "383c4a24 fstx.d f4, t5, t6");
COMPARE(amswap_w(a4, a5, a6), "38602548 amswap.w a4, a5, a6");
COMPARE(amswap_d(a7, t0, t1), "3860b1ab amswap.d a7, t0, t1");
COMPARE(amadd_w(t2, t3, t4), "38613e0e amadd.w t2, t3, t4");
COMPARE(amadd_d(t5, t6, a0), "3861c891 amadd.d t5, t6, a0");
COMPARE(amadd_w(t2, t3, t4), "38613e0e amadd.w t2, t3, t4");
COMPARE(amadd_d(t5, t6, a0), "3861c891 amadd.d t5, t6, a0");
COMPARE(amand_w(a1, a2, a3), "386218e5 amand.w a1, a2, a3");
COMPARE(amand_d(a4, a5, a6), "3862a548 amand.d a4, a5, a6");
COMPARE(amand_w(a1, a2, a3), "386218e5 amand.w a1, a2, a3");
COMPARE(amand_d(a4, a5, a6), "3862a548 amand.d a4, a5, a6");
COMPARE(amor_w(a7, t0, t1), "386331ab amor.w a7, t0, t1");
COMPARE(amor_d(t2, t3, t4), "3863be0e amor.d t2, t3, t4");
COMPARE(amor_w(a7, t0, t1), "386331ab amor.w a7, t0, t1");
COMPARE(amor_d(t2, t3, t4), "3863be0e amor.d t2, t3, t4");
COMPARE(amxor_w(t5, t6, a0), "38644891 amxor.w t5, t6, a0");
COMPARE(amxor_d(a1, a2, a3), "386498e5 amxor.d a1, a2, a3");
COMPARE(amxor_w(t5, t6, a0), "38644891 amxor.w t5, t6, a0");
COMPARE(amxor_d(a1, a2, a3), "386498e5 amxor.d a1, a2, a3");
COMPARE(ammax_w(a4, a5, a6), "38652548 ammax.w a4, a5, a6");
COMPARE(ammax_d(a7, t0, t1), "3865b1ab ammax.d a7, t0, t1");
COMPARE(ammax_w(a4, a5, a6), "38652548 ammax.w a4, a5, a6");
COMPARE(ammax_d(a7, t0, t1), "3865b1ab ammax.d a7, t0, t1");
COMPARE(ammin_w(t2, t3, t4), "38663e0e ammin.w t2, t3, t4");
COMPARE(ammin_d(t5, t6, a0), "3866c891 ammin.d t5, t6, a0");
COMPARE(ammin_w(t2, t3, t4), "38663e0e ammin.w t2, t3, t4");
COMPARE(ammin_d(t5, t6, a0), "3866c891 ammin.d t5, t6, a0");
COMPARE(ammax_wu(a1, a2, a3), "386718e5 ammax.wu a1, a2, a3");
COMPARE(ammax_du(a4, a5, a6), "3867a548 ammax.du a4, a5, a6");
......@@ -750,24 +812,24 @@ TEST(TypeOp17) {
COMPARE(ammin_wu(a7, t0, t1), "386831ab ammin.wu a7, t0, t1");
COMPARE(ammin_du(t2, t3, t4), "3868be0e ammin.du t2, t3, t4");
COMPARE(ammax_db_d(a0, a1, a2), "386e94c4 ammax_db.d a0, a1, a2");
COMPARE(ammax_db_du(a3, a4, a5), "3870a127 ammax_db.du a3, a4, a5");
COMPARE(ammax_db_d(a0, a1, a2), "386e94c4 ammax_db.d a0, a1, a2");
COMPARE(ammax_db_du(a3, a4, a5), "3870a127 ammax_db.du a3, a4, a5");
COMPARE(ammax_db_w(a6, a7, t0), "386e2d8a ammax_db.w a6, a7, t0");
COMPARE(ammax_db_wu(t1, t2, t3), "387039ed ammax_db.wu t1, t2, t3");
COMPARE(ammax_db_w(a6, a7, t0), "386e2d8a ammax_db.w a6, a7, t0");
COMPARE(ammax_db_wu(t1, t2, t3), "387039ed ammax_db.wu t1, t2, t3");
COMPARE(ammin_db_d(t4, t5, t6), "386fc650 ammin_db.d t4, t5, t6");
COMPARE(ammin_db_du(a0, a1, a2), "387194c4 ammin_db.du a0, a1, a2");
COMPARE(ammin_db_d(t4, t5, t6), "386fc650 ammin_db.d t4, t5, t6");
COMPARE(ammin_db_du(a0, a1, a2), "387194c4 ammin_db.du a0, a1, a2");
COMPARE(ammin_db_wu(a3, a4, a5), "38712127 ammin_db.wu a3, a4, a5");
COMPARE(ammin_db_w(a6, a7, t0), "386f2d8a ammin_db.w a6, a7, t0");
COMPARE(ammin_db_wu(a3, a4, a5), "38712127 ammin_db.wu a3, a4, a5");
COMPARE(ammin_db_w(a6, a7, t0), "386f2d8a ammin_db.w a6, a7, t0");
COMPARE(fscaleb_s(f0, f1, f2), "01108820 fscaleb.s f0, f1, f2");
COMPARE(fscaleb_d(f3, f4, f5), "01111483 fscaleb.d f3, f4, f5");
COMPARE(fscaleb_s(f0, f1, f2), "01108820 fscaleb.s f0, f1, f2");
COMPARE(fscaleb_d(f3, f4, f5), "01111483 fscaleb.d f3, f4, f5");
COMPARE(fcopysign_s(f6, f7, f8), "0112a0e6 fcopysign.s f6, f7, f8");
COMPARE(fcopysign_s(f6, f7, f8), "0112a0e6 fcopysign.s f6, f7, f8");
COMPARE(fcopysign_d(f9, f10, f12),
"01133149 fcopysign.d f9, f10, f12");
"01133149 fcopysign.d f9, f10, f12");
VERIFY_RUN();
}
......@@ -775,64 +837,64 @@ TEST(TypeOp17) {
TEST(TypeOp22) {
SET_UP();
COMPARE(clz_w(a3, a0), "00001487 clz.w a3, a0");
COMPARE(ctz_w(a0, a1), "00001ca4 ctz.w a0, a1");
COMPARE(clz_d(a2, a3), "000024e6 clz.d a2, a3");
COMPARE(ctz_d(a4, a5), "00002d28 ctz.d a4, a5");
COMPARE(clz_w(a3, a0), "00001487 clz.w a3, a0");
COMPARE(ctz_w(a0, a1), "00001ca4 ctz.w a0, a1");
COMPARE(clz_d(a2, a3), "000024e6 clz.d a2, a3");
COMPARE(ctz_d(a4, a5), "00002d28 ctz.d a4, a5");
COMPARE(clo_w(a0, a1), "000010a4 clo.w a0, a1");
COMPARE(cto_w(a2, a3), "000018e6 cto.w a2, a3");
COMPARE(clo_d(a4, a5), "00002128 clo.d a4, a5");
COMPARE(cto_d(a6, a7), "0000296a cto.d a6, a7");
COMPARE(clo_w(a0, a1), "000010a4 clo.w a0, a1");
COMPARE(cto_w(a2, a3), "000018e6 cto.w a2, a3");
COMPARE(clo_d(a4, a5), "00002128 clo.d a4, a5");
COMPARE(cto_d(a6, a7), "0000296a cto.d a6, a7");
COMPARE(revb_2h(a6, a7), "0000316a revb.2h a6, a7");
COMPARE(revb_4h(t0, t1), "000035ac revb.4h t0, t1");
COMPARE(revb_2w(t2, t3), "000039ee revb.2w t2, t3");
COMPARE(revb_d(t4, t5), "00003e30 revb.d t4, t5");
COMPARE(revb_2h(a6, a7), "0000316a revb.2h a6, a7");
COMPARE(revb_4h(t0, t1), "000035ac revb.4h t0, t1");
COMPARE(revb_2w(t2, t3), "000039ee revb.2w t2, t3");
COMPARE(revb_d(t4, t5), "00003e30 revb.d t4, t5");
COMPARE(revh_2w(a0, a1), "000040a4 revh.2w a0, a1");
COMPARE(revh_d(a2, a3), "000044e6 revh.d a2, a3");
COMPARE(revh_2w(a0, a1), "000040a4 revh.2w a0, a1");
COMPARE(revh_d(a2, a3), "000044e6 revh.d a2, a3");
COMPARE(bitrev_4b(a4, a5), "00004928 bitrev.4b a4, a5");
COMPARE(bitrev_8b(a6, a7), "00004d6a bitrev.8b a6, a7");
COMPARE(bitrev_4b(a4, a5), "00004928 bitrev.4b a4, a5");
COMPARE(bitrev_8b(a6, a7), "00004d6a bitrev.8b a6, a7");
COMPARE(bitrev_w(t0, t1), "000051ac bitrev.w t0, t1");
COMPARE(bitrev_d(t2, t3), "000055ee bitrev.d t2, t3");
COMPARE(ext_w_b(t4, t5), "00005e30 ext.w.b t4, t5");
COMPARE(ext_w_h(a0, a1), "000058a4 ext.w.h a0, a1");
COMPARE(ext_w_b(t4, t5), "00005e30 ext.w.b t4, t5");
COMPARE(ext_w_h(a0, a1), "000058a4 ext.w.h a0, a1");
COMPARE(fabs_s(f2, f3), "01140462 fabs.s f2, f3");
COMPARE(fabs_d(f0, f0), "01140800 fabs.d f0, f0");
COMPARE(fabs_s(f2, f3), "01140462 fabs.s f2, f3");
COMPARE(fabs_d(f0, f0), "01140800 fabs.d f0, f0");
COMPARE(fneg_s(f0, f1), "01141420 fneg.s f0, f1");
COMPARE(fneg_d(f0, f0), "01141800 fneg.d f0, f0");
COMPARE(fneg_s(f0, f1), "01141420 fneg.s f0, f1");
COMPARE(fneg_d(f0, f0), "01141800 fneg.d f0, f0");
COMPARE(fsqrt_s(f4, f5), "011444a4 fsqrt.s f4, f5");
COMPARE(fsqrt_d(f0, f0), "01144800 fsqrt.d f0, f0");
COMPARE(fsqrt_s(f4, f5), "011444a4 fsqrt.s f4, f5");
COMPARE(fsqrt_d(f0, f0), "01144800 fsqrt.d f0, f0");
COMPARE(fmov_s(f6, f7), "011494e6 fmov.s f6, f7");
COMPARE(fmov_d(f0, f1), "01149820 fmov.d f0, f1");
COMPARE(fmov_d(f1, f0), "01149801 fmov.d f1, f0");
COMPARE(fmov_s(f6, f7), "011494e6 fmov.s f6, f7");
COMPARE(fmov_d(f0, f1), "01149820 fmov.d f0, f1");
COMPARE(fmov_d(f1, f0), "01149801 fmov.d f1, f0");
COMPARE(movgr2fr_d(f0, t6), "0114aa40 movgr2fr.d f0, t6");
COMPARE(movgr2fr_d(f1, t6), "0114aa41 movgr2fr.d f1, t6");
COMPARE(movgr2fr_d(f0, t6), "0114aa40 movgr2fr.d f0, t6");
COMPARE(movgr2fr_d(f1, t6), "0114aa41 movgr2fr.d f1, t6");
COMPARE(movgr2fr_w(f30, a3), "0114a4fe movgr2fr.w f30, a3");
COMPARE(movgr2fr_w(f30, a0), "0114a49e movgr2fr.w f30, a0");
COMPARE(movgr2fr_w(f30, a3), "0114a4fe movgr2fr.w f30, a3");
COMPARE(movgr2fr_w(f30, a0), "0114a49e movgr2fr.w f30, a0");
COMPARE(movgr2frh_w(f30, t6), "0114ae5e movgr2frh.w f30, t6");
COMPARE(movgr2frh_w(f0, a3), "0114ace0 movgr2frh.w f0, a3");
COMPARE(movgr2frh_w(f30, t6), "0114ae5e movgr2frh.w f30, t6");
COMPARE(movgr2frh_w(f0, a3), "0114ace0 movgr2frh.w f0, a3");
COMPARE(movfr2gr_s(a3, f30), "0114b7c7 movfr2gr.s a3, f30");
COMPARE(movfr2gr_s(a3, f30), "0114b7c7 movfr2gr.s a3, f30");
COMPARE(movfr2gr_d(a6, f30), "0114bbca movfr2gr.d a6, f30");
COMPARE(movfr2gr_d(t7, f30), "0114bbd3 movfr2gr.d t7, f30");
COMPARE(movfr2gr_d(a6, f30), "0114bbca movfr2gr.d a6, f30");
COMPARE(movfr2gr_d(t7, f30), "0114bbd3 movfr2gr.d t7, f30");
COMPARE(movfrh2gr_s(a5, f0), "0114bc09 movfrh2gr.s a5, f0");
COMPARE(movfrh2gr_s(a4, f0), "0114bc08 movfrh2gr.s a4, f0");
COMPARE(movfrh2gr_s(a5, f0), "0114bc09 movfrh2gr.s a5, f0");
COMPARE(movfrh2gr_s(a4, f0), "0114bc08 movfrh2gr.s a4, f0");
COMPARE(movgr2fcsr(a2), "0114c0c0 movgr2fcsr fcsr, a2");
COMPARE(movfcsr2gr(a4), "0114c808 movfcsr2gr a4, fcsr");
COMPARE(movgr2fcsr(a2), "0114c0c0 movgr2fcsr fcsr, a2");
COMPARE(movfcsr2gr(a4), "0114c808 movfcsr2gr a4, fcsr");
COMPARE(movfr2cf(FCC0, f0), "0114d000 movfr2cf fcc0, f0");
COMPARE(movcf2fr(f1, FCC1), "0114d421 movcf2fr f1, fcc1");
......@@ -843,38 +905,38 @@ TEST(TypeOp22) {
COMPARE(fcvt_s_d(f0, f0), "01191800 fcvt.s.d f0, f0");
COMPARE(fcvt_d_s(f0, f0), "01192400 fcvt.d.s f0, f0");
COMPARE(ftintrm_w_s(f8, f9), "011a0528 ftintrm.w.s f8, f9");
COMPARE(ftintrm_w_d(f10, f11), "011a096a ftintrm.w.d f10, f11");
COMPARE(ftintrm_l_s(f12, f13), "011a25ac ftintrm.l.s f12, f13");
COMPARE(ftintrm_l_d(f14, f15), "011a29ee ftintrm.l.d f14, f15");
COMPARE(ftintrm_w_s(f8, f9), "011a0528 ftintrm.w.s f8, f9");
COMPARE(ftintrm_w_d(f10, f11), "011a096a ftintrm.w.d f10, f11");
COMPARE(ftintrm_l_s(f12, f13), "011a25ac ftintrm.l.s f12, f13");
COMPARE(ftintrm_l_d(f14, f15), "011a29ee ftintrm.l.d f14, f15");
COMPARE(ftintrp_w_s(f16, f17), "011a4630 ftintrp.w.s f16, f17");
COMPARE(ftintrp_w_d(f18, f19), "011a4a72 ftintrp.w.d f18, f19");
COMPARE(ftintrp_l_s(f20, f21), "011a66b4 ftintrp.l.s f20, f21");
COMPARE(ftintrp_l_d(f0, f1), "011a6820 ftintrp.l.d f0, f1");
COMPARE(ftintrp_w_s(f16, f17), "011a4630 ftintrp.w.s f16, f17");
COMPARE(ftintrp_w_d(f18, f19), "011a4a72 ftintrp.w.d f18, f19");
COMPARE(ftintrp_l_s(f20, f21), "011a66b4 ftintrp.l.s f20, f21");
COMPARE(ftintrp_l_d(f0, f1), "011a6820 ftintrp.l.d f0, f1");
COMPARE(ftintrz_w_s(f30, f4), "011a849e ftintrz.w.s f30, f4");
COMPARE(ftintrz_w_d(f30, f4), "011a889e ftintrz.w.d f30, f4");
COMPARE(ftintrz_l_s(f30, f0), "011aa41e ftintrz.l.s f30, f0");
COMPARE(ftintrz_l_d(f30, f30), "011aabde ftintrz.l.d f30, f30");
COMPARE(ftintrz_w_s(f30, f4), "011a849e ftintrz.w.s f30, f4");
COMPARE(ftintrz_w_d(f30, f4), "011a889e ftintrz.w.d f30, f4");
COMPARE(ftintrz_l_s(f30, f0), "011aa41e ftintrz.l.s f30, f0");
COMPARE(ftintrz_l_d(f30, f30), "011aabde ftintrz.l.d f30, f30");
COMPARE(ftintrne_w_s(f2, f3), "011ac462 ftintrne.w.s f2, f3");
COMPARE(ftintrne_w_d(f4, f5), "011ac8a4 ftintrne.w.d f4, f5");
COMPARE(ftintrne_l_s(f6, f7), "011ae4e6 ftintrne.l.s f6, f7");
COMPARE(ftintrne_l_d(f8, f9), "011ae928 ftintrne.l.d f8, f9");
COMPARE(ftintrne_w_s(f2, f3), "011ac462 ftintrne.w.s f2, f3");
COMPARE(ftintrne_w_d(f4, f5), "011ac8a4 ftintrne.w.d f4, f5");
COMPARE(ftintrne_l_s(f6, f7), "011ae4e6 ftintrne.l.s f6, f7");
COMPARE(ftintrne_l_d(f8, f9), "011ae928 ftintrne.l.d f8, f9");
COMPARE(ftint_w_s(f10, f11), "011b056a ftint.w.s f10, f11");
COMPARE(ftint_w_d(f12, f13), "011b09ac ftint.w.d f12, f13");
COMPARE(ftint_l_s(f14, f15), "011b25ee ftint.l.s f14, f15");
COMPARE(ftint_l_d(f16, f17), "011b2a30 ftint.l.d f16, f17");
COMPARE(ftint_w_s(f10, f11), "011b056a ftint.w.s f10, f11");
COMPARE(ftint_w_d(f12, f13), "011b09ac ftint.w.d f12, f13");
COMPARE(ftint_l_s(f14, f15), "011b25ee ftint.l.s f14, f15");
COMPARE(ftint_l_d(f16, f17), "011b2a30 ftint.l.d f16, f17");
COMPARE(ffint_s_w(f18, f19), "011d1272 ffint.s.w f18, f19");
COMPARE(ffint_s_l(f20, f21), "011d1ab4 ffint.s.l f20, f21");
COMPARE(ffint_d_w(f0, f1), "011d2020 ffint.d.w f0, f1");
COMPARE(ffint_d_l(f2, f3), "011d2862 ffint.d.l f2, f3");
COMPARE(ffint_s_w(f18, f19), "011d1272 ffint.s.w f18, f19");
COMPARE(ffint_s_l(f20, f21), "011d1ab4 ffint.s.l f20, f21");
COMPARE(ffint_d_w(f0, f1), "011d2020 ffint.d.w f0, f1");
COMPARE(ffint_d_l(f2, f3), "011d2862 ffint.d.l f2, f3");
COMPARE(frint_s(f4, f5), "011e44a4 frint.s f4, f5");
COMPARE(frint_d(f6, f7), "011e48e6 frint.d f6, f7");
COMPARE(frint_s(f4, f5), "011e44a4 frint.s f4, f5");
COMPARE(frint_d(f6, f7), "011e48e6 frint.d f6, f7");
COMPARE(frecip_s(f8, f9), "01145528 frecip.s f8, f9");
COMPARE(frecip_d(f10, f11), "0114596a frecip.d f10, f11");
......@@ -885,8 +947,8 @@ TEST(TypeOp22) {
COMPARE(fclass_s(f16, f17), "01143630 fclass.s f16, f17");
COMPARE(fclass_d(f18, f19), "01143a72 fclass.d f18, f19");
COMPARE(flogb_s(f20, f21), "011426b4 flogb.s f20, f21");
COMPARE(flogb_d(f0, f1), "01142820 flogb.d f0, f1");
COMPARE(flogb_s(f20, f21), "011426b4 flogb.s f20, f21");
COMPARE(flogb_d(f0, f1), "01142820 flogb.d f0, f1");
VERIFY_RUN();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment