From d2d9cb9cafa79b367bad4feb8a528bcd42c19381 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Sun, 23 Nov 2014 17:22:16 +0000 Subject: [PATCH] Merge, from trunk, r2985 335713 arm64: unhanded instruction: prfm (immediate) 2985 git-svn-id: svn://svn.valgrind.org/vex/branches/VEX_3_10_BRANCH@3011 --- VEX/priv/guest_arm64_toIR.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c index 714b1b3a76..2105a57e64 100644 --- a/VEX/priv/guest_arm64_toIR.c +++ b/VEX/priv/guest_arm64_toIR.c @@ -6358,6 +6358,22 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn) 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 -- 2.47.2