diff options
| author | Léo Lam <leo@leolam.fr> | 2021-02-14 16:34:39 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-14 16:34:39 +0100 |
| commit | efab17c0259d47e805d3a343429bb9402732ffdb (patch) | |
| tree | 4a1b065b64632e40becb37e7b8f984cb2c32ba2d /Source/Core | |
| parent | be2cd2272d8bd69a1976812e6f2e21e4d633d184 (diff) | |
| parent | 118b2a3580972972c42a492347287fc292add50b (diff) | |
Merge pull request #9498 from leoetlino/offsetof-constant
Core/DSP: Fix improper uses of offsetof
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/DSP/Jit/x64/DSPEmitter.cpp | 5 | ||||
| -rw-r--r-- | Source/Core/Core/DSP/Jit/x64/DSPJitRegCache.cpp | 33 |
2 files changed, 25 insertions, 13 deletions
diff --git a/Source/Core/Core/DSP/Jit/x64/DSPEmitter.cpp b/Source/Core/Core/DSP/Jit/x64/DSPEmitter.cpp index 5bb2326019..b83b6f6297 100644 --- a/Source/Core/Core/DSP/Jit/x64/DSPEmitter.cpp +++ b/Source/Core/Core/DSP/Jit/x64/DSPEmitter.cpp @@ -494,12 +494,13 @@ Gen::OpArg DSPEmitter::M_SDSP_external_interrupt_waiting() Gen::OpArg DSPEmitter::M_SDSP_r_st(size_t index) { - return MDisp(R15, static_cast<int>(offsetof(SDSP, r.st[index]))); + return MDisp(R15, static_cast<int>(offsetof(SDSP, r.st) + sizeof(SDSP::r.st[0]) * index)); } Gen::OpArg DSPEmitter::M_SDSP_reg_stack_ptrs(size_t index) { - return MDisp(R15, static_cast<int>(offsetof(SDSP, reg_stack_ptrs[index]))); + return MDisp(R15, static_cast<int>(offsetof(SDSP, reg_stack_ptrs) + + sizeof(SDSP::reg_stack_ptrs[0]) * index)); } } // namespace DSP::JIT::x64 diff --git a/Source/Core/Core/DSP/Jit/x64/DSPJitRegCache.cpp b/Source/Core/Core/DSP/Jit/x64/DSPJitRegCache.cpp index aface8ab9b..1324b41ffd 100644 --- a/Source/Core/Core/DSP/Jit/x64/DSPJitRegCache.cpp +++ b/Source/Core/Core/DSP/Jit/x64/DSPJitRegCache.cpp @@ -30,25 +30,30 @@ static Gen::OpArg GetRegisterPointer(size_t reg) case DSP_REG_AR1: case DSP_REG_AR2: case DSP_REG_AR3: - return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ar[reg - DSP_REG_AR0]))); + return MDisp( + R15, static_cast<int>(offsetof(SDSP, r.ar) + sizeof(SDSP::r.ar[0]) * (reg - DSP_REG_AR0))); case DSP_REG_IX0: case DSP_REG_IX1: case DSP_REG_IX2: case DSP_REG_IX3: - return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ix[reg - DSP_REG_IX0]))); + return MDisp( + R15, static_cast<int>(offsetof(SDSP, r.ix) + sizeof(SDSP::r.ix[0]) * (reg - DSP_REG_IX0))); case DSP_REG_WR0: case DSP_REG_WR1: case DSP_REG_WR2: case DSP_REG_WR3: - return MDisp(R15, static_cast<int>(offsetof(SDSP, r.wr[reg - DSP_REG_WR0]))); + return MDisp( + R15, static_cast<int>(offsetof(SDSP, r.wr) + sizeof(SDSP::r.wr[0]) * (reg - DSP_REG_WR0))); case DSP_REG_ST0: case DSP_REG_ST1: case DSP_REG_ST2: case DSP_REG_ST3: - return MDisp(R15, static_cast<int>(offsetof(SDSP, r.st[reg - DSP_REG_ST0]))); + return MDisp( + R15, static_cast<int>(offsetof(SDSP, r.st) + sizeof(SDSP::r.st[0]) * (reg - DSP_REG_ST0))); case DSP_REG_ACH0: case DSP_REG_ACH1: - return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ac[reg - DSP_REG_ACH0].h))); + return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ac[0].h) + + sizeof(SDSP::r.ac[0]) * (reg - DSP_REG_ACH0))); case DSP_REG_CR: return MDisp(R15, static_cast<int>(offsetof(SDSP, r.cr))); case DSP_REG_SR: @@ -63,22 +68,28 @@ static Gen::OpArg GetRegisterPointer(size_t reg) return MDisp(R15, static_cast<int>(offsetof(SDSP, r.prod.m2))); case DSP_REG_AXL0: case DSP_REG_AXL1: - return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ax[reg - DSP_REG_AXL0].l))); + return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ax[0].l) + + sizeof(SDSP::r.ax[0]) * (reg - DSP_REG_AXL0))); case DSP_REG_AXH0: case DSP_REG_AXH1: - return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ax[reg - DSP_REG_AXH0].h))); + return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ax[0].h) + + sizeof(SDSP::r.ax[0]) * (reg - DSP_REG_AXH0))); case DSP_REG_ACL0: case DSP_REG_ACL1: - return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ac[reg - DSP_REG_ACL0].l))); + return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ac[0].l) + + sizeof(SDSP::r.ac[0]) * (reg - DSP_REG_ACL0))); case DSP_REG_ACM0: case DSP_REG_ACM1: - return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ac[reg - DSP_REG_ACM0].m))); + return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ac[0].m) + + sizeof(SDSP::r.ac[0]) * (reg - DSP_REG_ACM0))); case DSP_REG_AX0_32: case DSP_REG_AX1_32: - return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ax[reg - DSP_REG_AX0_32].val))); + return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ax[0].val) + + sizeof(SDSP::r.ax[0]) * (reg - DSP_REG_AX0_32))); case DSP_REG_ACC0_64: case DSP_REG_ACC1_64: - return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ac[reg - DSP_REG_ACC0_64].val))); + return MDisp(R15, static_cast<int>(offsetof(SDSP, r.ac[0].val) + + sizeof(SDSP::r.ac[0]) * (reg - DSP_REG_ACC0_64))); case DSP_REG_PROD_64: return MDisp(R15, static_cast<int>(offsetof(SDSP, r.prod.val))); default: |
