Fix encoding of prfm
PiperOrigin-RevId: 424628305
diff --git a/src/jit/aarch64-assembler.cc b/src/jit/aarch64-assembler.cc
index a38e747..62eb81c 100644
--- a/src/jit/aarch64-assembler.cc
+++ b/src/jit/aarch64-assembler.cc
@@ -280,7 +280,7 @@
return;
}
- emit32(0xF9800000 | xn.offset << 10 | rn(xn.base) | static_cast<uint32_t>(prfop));
+ emit32(0xF9800000 | xn.offset >> 3 << 10 | rn(xn.base) | prfop);
}
void Assembler::ret() {
diff --git a/test/aarch64-assembler.cc b/test/aarch64-assembler.cc
index d52113b..ceb1282 100644
--- a/test/aarch64-assembler.cc
+++ b/test/aarch64-assembler.cc
@@ -54,6 +54,7 @@
EXPECT_ERROR(Error::kInvalidOperand, a.ldr(x8, MemOperand(sp, 16, AddressingMode::kPostIndex)));
CHECK_ENCODING(0xF98000A0, a.prfm(kPLDL1KEEP, mem[x5]));
+ CHECK_ENCODING(0xF98020A0, a.prfm(kPLDL1KEEP, mem[x5, 64]));
EXPECT_ERROR(Error::kInvalidOperand, a.prfm(kPLDL1KEEP, mem[x5, -8]));
EXPECT_ERROR(Error::kInvalidOperand, a.prfm(kPLDL1KEEP, mem[x5, 32761]));