Implement PRFM (immediate). Fixes #335713.
git-svn-id: svn://svn.valgrind.org/vex/trunk@2985 8f6e269a-dfd6-0310-a8e1-e2731360e62c
diff --git a/priv/guest_arm64_toIR.c b/priv/guest_arm64_toIR.c
index acfdc02..b9032b8 100644
--- a/priv/guest_arm64_toIR.c
+++ b/priv/guest_arm64_toIR.c
@@ -6358,6 +6358,22 @@
return True;
}
+ /* ------------------ PRFM (immediate) ------------------ */
+ /* 31 21 9 4
+ 11 111 00110 imm12 n t PRFM pfrop=Rt, [Xn|SP, #pimm]
+ */
+ if (INSN(31,22) == BITS10(1,1,1,1,1,0,0,1,1,0)) {
+ UInt imm12 = INSN(21,10);
+ UInt nn = INSN(9,5);
+ UInt tt = INSN(4,0);
+ /* Generating any IR here is pointless, except for documentation
+ purposes, as it will get optimised away later. */
+ IRTemp ea = newTemp(Ity_I64);
+ assign(ea, binop(Iop_Add64, getIReg64orSP(nn), mkU64(imm12 * 8)));
+ DIP("prfm prfop=%u, [%s, #%u]\n", tt, nameIReg64orSP(nn), imm12 * 8);
+ return True;
+ }
+
vex_printf("ARM64 front end: load_store\n");
return False;
# undef INSN