# SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2022-present - The JELOS Project (https://github.com/JustEnoughLinuxOS) diff --git a/src/core/cpu_core.h b/src/core/cpu_core.h index c9199153..5d82b5c0 100644 --- a/src/core/cpu_core.h +++ b/src/core/cpu_core.h @@ -84,6 +84,8 @@ struct State std::array dcache = {}; std::array icache_tags = {}; std::array icache_data = {}; + + static constexpr u32 GTERegisterOffset(u32 index) { return offsetof(State, gte_regs.r32) + (sizeof(u32) * index); } }; extern State g_state; diff --git a/src/core/cpu_recompiler_code_generator.cpp b/src/core/cpu_recompiler_code_generator.cpp index 68492b03..e550844e 100644 --- a/src/core/cpu_recompiler_code_generator.cpp +++ b/src/core/cpu_recompiler_code_generator.cpp @@ -2377,7 +2377,7 @@ Value CodeGenerator::DoGTERegisterRead(u32 index) default: { - EmitLoadCPUStructField(value.host_reg, RegSize_32, offsetof(State, gte_regs.r32[index])); + EmitLoadCPUStructField(value.host_reg, RegSize_32, State::GTERegisterOffset(index)); } break; } @@ -2406,7 +2406,7 @@ void CodeGenerator::DoGTERegisterWrite(u32 index, const Value& value) { // sign-extend z component of vector registers Value temp = ConvertValueSize(value.ViewAsSize(RegSize_16), RegSize_32, true); - EmitStoreCPUStructField(offsetof(State, gte_regs.r32[index]), temp); + EmitStoreCPUStructField(State::GTERegisterOffset(index), temp); return; } break; @@ -2419,7 +2419,7 @@ void CodeGenerator::DoGTERegisterWrite(u32 index, const Value& value) { // zero-extend unsigned values Value temp = ConvertValueSize(value.ViewAsSize(RegSize_16), RegSize_32, false); - EmitStoreCPUStructField(offsetof(State, gte_regs.r32[index]), temp); + EmitStoreCPUStructField(State::GTERegisterOffset(index), temp); return; } break; @@ -2461,7 +2461,7 @@ void CodeGenerator::DoGTERegisterWrite(u32 index, const Value& value) default: { // written as-is, 2x16 or 1x32 bits - EmitStoreCPUStructField(offsetof(State, gte_regs.r32[index]), value); + EmitStoreCPUStructField(State::GTERegisterOffset(index), value); return; } }