aboutsummaryrefslogtreecommitdiff
path: root/src/core/arm/nce/interpreter_visitor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/arm/nce/interpreter_visitor.cpp')
-rw-r--r--src/core/arm/nce/interpreter_visitor.cpp12
1 files changed, 4 insertions, 8 deletions
diff --git a/src/core/arm/nce/interpreter_visitor.cpp b/src/core/arm/nce/interpreter_visitor.cpp
index 31ab7735d2..b1cf0f1a2c 100644
--- a/src/core/arm/nce/interpreter_visitor.cpp
+++ b/src/core/arm/nce/interpreter_visitor.cpp
@@ -408,6 +408,8 @@ bool InterpreterVisitor::RegisterImmediate(bool wback, bool postindex, size_t sc
bool signed_ = false;
size_t regsize = 0;
+ const size_t datasize = 8 << scale;
+
if (opc.Bit<1>() == 0) {
memop = opc.Bit<0>() ? MemOp::Load : MemOp::Store;
regsize = size == 0b11 ? 64 : 32;
@@ -427,7 +429,6 @@ bool InterpreterVisitor::RegisterImmediate(bool wback, bool postindex, size_t sc
return false;
}
- // Use aligned access where possible
alignas(8) u64 address;
if (Rn == Reg::SP) {
address = this->GetSp();
@@ -435,21 +436,18 @@ bool InterpreterVisitor::RegisterImmediate(bool wback, bool postindex, size_t sc
address = this->GetReg(Rn);
}
- // Pre-index addressing
if (!postindex) {
address += offset;
}
- // Alignment optimization for common cases
- const bool is_aligned = (address % 8) == 0;
+ //const bool is_aligned = (address % 8) == 0;
- // Enhanced prefetching for loads with aligned addresses
if (memop == MemOp::Load) {
const size_t CACHE_LINE_SIZE = 64;
if ((address % 16) == 0) {
__builtin_prefetch((void*)address, 0, 3);
__builtin_prefetch((void*)(address + CACHE_LINE_SIZE), 0, 3);
- if (datasize >= 32) {
+ if (datasize >= 32) { // Now datasize is in scope
__builtin_prefetch((void*)(address + CACHE_LINE_SIZE * 2), 0, 2);
}
} else if ((address % 8) == 0) {
@@ -457,7 +455,6 @@ bool InterpreterVisitor::RegisterImmediate(bool wback, bool postindex, size_t sc
}
}
- const size_t datasize = 8 << scale;
switch (memop) {
case MemOp::Store: {
u64 data = this->GetReg(Rt);
@@ -483,7 +480,6 @@ bool InterpreterVisitor::RegisterImmediate(bool wback, bool postindex, size_t sc
if (postindex) {
address += offset;
}
-
if (Rn == Reg::SP) {
this->SetSp(address);
} else {