A64: Add missing decoding for PRFM (unscaled offset)
This commit is contained in:
parent
f2a85d5601
commit
43e6e98c3b
3 changed files with 8 additions and 0 deletions
|
@ -175,6 +175,7 @@ INST(STURx_LDURx, "STURx/LDURx", "zz111
|
||||||
INST(UnallocatedEncoding, "", "111110001-0---------00----------")
|
INST(UnallocatedEncoding, "", "111110001-0---------00----------")
|
||||||
INST(UnallocatedEncoding, "", "10111000110---------00----------")
|
INST(UnallocatedEncoding, "", "10111000110---------00----------")
|
||||||
INST(PRFM_imm, "PRFM (immediate)", "1111100110iiiiiiiiiiiinnnnnttttt")
|
INST(PRFM_imm, "PRFM (immediate)", "1111100110iiiiiiiiiiiinnnnnttttt")
|
||||||
|
INST(PRFM_unscaled_imm, "PRFM (unscaled offset)", "11111000100iiiiiiiii00nnnnnttttt")
|
||||||
INST(STUR_fpsimd, "STUR (SIMD&FP)", "zz111100o00iiiiiiiii00nnnnnttttt")
|
INST(STUR_fpsimd, "STUR (SIMD&FP)", "zz111100o00iiiiiiiii00nnnnnttttt")
|
||||||
INST(LDUR_fpsimd, "LDUR (SIMD&FP)", "zz111100o10iiiiiiiii00nnnnnttttt")
|
INST(LDUR_fpsimd, "LDUR (SIMD&FP)", "zz111100o10iiiiiiiii00nnnnnttttt")
|
||||||
|
|
||||||
|
|
|
@ -247,6 +247,7 @@ struct TranslatorVisitor final {
|
||||||
bool STRx_LDRx_imm_2(Imm<2> size, Imm<2> opc, Imm<12> imm12, Reg Rn, Reg Rt);
|
bool STRx_LDRx_imm_2(Imm<2> size, Imm<2> opc, Imm<12> imm12, Reg Rn, Reg Rt);
|
||||||
bool STURx_LDURx(Imm<2> size, Imm<2> opc, Imm<9> imm9, Reg Rn, Reg Rt);
|
bool STURx_LDURx(Imm<2> size, Imm<2> opc, Imm<9> imm9, Reg Rn, Reg Rt);
|
||||||
bool PRFM_imm(Imm<12> imm12, Reg Rn, Reg Rt);
|
bool PRFM_imm(Imm<12> imm12, Reg Rn, Reg Rt);
|
||||||
|
bool PRFM_unscaled_imm(Imm<9> imm9, Reg Rn, Reg Rt);
|
||||||
bool STR_imm_fpsimd_1(Imm<2> size, Imm<1> opc_1, Imm<9> imm9, bool not_postindex, Reg Rn, Vec Vt);
|
bool STR_imm_fpsimd_1(Imm<2> size, Imm<1> opc_1, Imm<9> imm9, bool not_postindex, Reg Rn, Vec Vt);
|
||||||
bool STR_imm_fpsimd_2(Imm<2> size, Imm<1> opc_1, Imm<12> imm12, Reg Rn, Vec Vt);
|
bool STR_imm_fpsimd_2(Imm<2> size, Imm<1> opc_1, Imm<12> imm12, Reg Rn, Vec Vt);
|
||||||
bool LDR_imm_fpsimd_1(Imm<2> size, Imm<1> opc_1, Imm<9> imm9, bool not_postindex, Reg Rn, Vec Vt);
|
bool LDR_imm_fpsimd_1(Imm<2> size, Imm<1> opc_1, Imm<9> imm9, bool not_postindex, Reg Rn, Vec Vt);
|
||||||
|
|
|
@ -106,6 +106,12 @@ bool TranslatorVisitor::PRFM_imm([[maybe_unused]] Imm<12> imm12, [[maybe_unused]
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TranslatorVisitor::PRFM_unscaled_imm([[maybe_unused]] Imm<9> imm9, [[maybe_unused]] Reg Rn, [[maybe_unused]] Reg Rt) {
|
||||||
|
// Currently a NOP (which is valid behavior, as indicated by
|
||||||
|
// the ARMv8 architecture reference manual)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static bool LoadStoreSIMD(TranslatorVisitor& tv, IREmitter& ir, bool wback, bool postindex, size_t scale, u64 offset, MemOp memop, Reg Rn, Vec Vt) {
|
static bool LoadStoreSIMD(TranslatorVisitor& tv, IREmitter& ir, bool wback, bool postindex, size_t scale, u64 offset, MemOp memop, Reg Rn, Vec Vt) {
|
||||||
const AccType acctype = AccType::VEC;
|
const AccType acctype = AccType::VEC;
|
||||||
const size_t datasize = 8 << scale;
|
const size_t datasize = 8 << scale;
|
||||||
|
|
Loading…
Reference in a new issue