aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Daniel Faria <paulfaria@google.com>2024-05-11 16:37:52 +0000
committerPaul Daniel Faria <paulfaria@google.com>2024-05-11 16:39:21 +0000
commitbe4d336939a3a9bc5e384d1d81cf54e45334392a (patch)
tree8d052fed659c2f5e5bfd77c9dd336d7499387b46
parent30bd2e62ad64b02adc849b062a4bdb61a34743d4 (diff)
downloadbinary_translation-master.tar.gz
[heavy_opt/riscv64] Fix load of 64-bit csrHEADmastermain
Needed to and with the value of the constant and not its memory address. Test: m berberis_all berberis_run_host_tests, inline asm tests Change-Id: I6acc10da85213e7b01b30cd4210cc71e3874fdad
-rw-r--r--backend/x86_64/lir_instructions.json1
-rw-r--r--heavy_optimizer/riscv64/frontend.h2
2 files changed, 2 insertions, 1 deletions
diff --git a/backend/x86_64/lir_instructions.json b/backend/x86_64/lir_instructions.json
index 663305c2..ba093ff1 100644
--- a/backend/x86_64/lir_instructions.json
+++ b/backend/x86_64/lir_instructions.json
@@ -31,6 +31,7 @@
"AddpdXRegXReg",
"AddpsXRegXReg",
"AndqRegImm",
+ "AndqRegMemInsns",
"AndqRegReg",
"BtqRegImm",
"Cmc",
diff --git a/heavy_optimizer/riscv64/frontend.h b/heavy_optimizer/riscv64/frontend.h
index 30c5e149..17de50c8 100644
--- a/heavy_optimizer/riscv64/frontend.h
+++ b/heavy_optimizer/riscv64/frontend.h
@@ -376,7 +376,7 @@ class HeavyOptimizerFrontend {
Gen<x86_64::AndbRegImm>(tmp, kCsrMask<kName>, GetFlagsRegister());
Gen<x86_64::MovbMemBaseDispReg>(x86_64::kMachineRegRBP, kCsrFieldOffset<kName>, tmp);
} else if constexpr (sizeof(CsrFieldType<kName>) == 8) {
- Gen<x86_64::AndqRegImm>(
+ Gen<x86_64::AndqRegMemAbsolute>(
tmp, constants_pool::kConst<uint64_t{kCsrMask<kName>}>, GetFlagsRegister());
Gen<x86_64::MovqMemBaseDispReg>(x86_64::kMachineRegRBP, kCsrFieldOffset<kName>, tmp);
} else {