From: Julian Seward Date: Thu, 30 Oct 2014 23:56:10 +0000 (+0000) Subject: Implement PRFM (immediate). Fixes #335713. X-Git-Tag: svn/VALGRIND_3_11_0^2~166 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d9ea5629644b7d208f2368a4c09f15005c7cada4;p=thirdparty%2Fvalgrind.git Implement PRFM (immediate). Fixes #335713. git-svn-id: svn://svn.valgrind.org/vex/trunk@2985 --- diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c index acfdc023db..b9032b80d2 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