diff --git a/src/xenia/cpu/backend/a64/a64_emitter.cc b/src/xenia/cpu/backend/a64/a64_emitter.cc index 8913da000..58ab1e20b 100644 --- a/src/xenia/cpu/backend/a64/a64_emitter.cc +++ b/src/xenia/cpu/backend/a64/a64_emitter.cc @@ -689,7 +689,6 @@ void A64Emitter::MovMem64(const oaknut::XRegSp& addr, intptr_t offset, static const vec128_t v_consts[] = { /* VZero */ vec128f(0.0f), - /* VOne */ vec128f(1.0f), /* VOnePD */ vec128d(1.0), /* VNegativeOne */ vec128f(-1.0f, -1.0f, -1.0f, -1.0f), /* VFFFF */ diff --git a/src/xenia/cpu/backend/a64/a64_emitter.h b/src/xenia/cpu/backend/a64/a64_emitter.h index 3e0b35f36..fef334dce 100644 --- a/src/xenia/cpu/backend/a64/a64_emitter.h +++ b/src/xenia/cpu/backend/a64/a64_emitter.h @@ -47,7 +47,6 @@ enum RegisterFlags { enum VConst { VZero = 0, - VOne, VOnePD, VNegativeOne, VFFFF, @@ -201,12 +200,12 @@ class A64Emitter : public oaknut::CodeBlock, public oaknut::CodeGenerator { void ReloadMembase(); // Moves a 64bit immediate into memory. - bool ConstantFitsIn32Reg(uint64_t v); + static bool ConstantFitsIn32Reg(uint64_t v); void MovMem64(const oaknut::XRegSp& addr, intptr_t offset, uint64_t v); std::byte* GetVConstPtr() const; std::byte* GetVConstPtr(VConst id) const; - constexpr uintptr_t GetVConstOffset(VConst id) const { + static constexpr uintptr_t GetVConstOffset(VConst id){ return sizeof(vec128_t) * id; } void LoadConstantV(oaknut::QReg dest, float v); diff --git a/src/xenia/cpu/backend/a64/a64_seq_vector.cc b/src/xenia/cpu/backend/a64/a64_seq_vector.cc index 2ba9bd2ea..71d608f82 100644 --- a/src/xenia/cpu/backend/a64/a64_seq_vector.cc +++ b/src/xenia/cpu/backend/a64/a64_seq_vector.cc @@ -1746,7 +1746,7 @@ struct UNPACK : Sequence> { if (i.src1.is_constant) { if (i.src1.value->IsConstantZero()) { - e.LDR(i.dest.reg(), VConstData, e.GetVConstOffset(VOne)); + e.FMOV(i.dest.reg().S4(), FImm8(0, 7, 0)); return; } src = i.dest; @@ -1759,7 +1759,7 @@ struct UNPACK : Sequence> { e.LDR(Q1, VConstData, e.GetVConstOffset(VUnpackD3DCOLOR)); e.TBL(i.dest.reg().B16(), oaknut::List{src.B16()}, Q1.B16()); // Add 1.0f to each. - e.LDR(Q1, VConstData, e.GetVConstOffset(VOne)); + e.FMOV(Q1.S4(), FImm8(0, 7, 0)); e.EOR(i.dest.reg().B16(), i.dest.reg().B16(), Q1.B16()); // To convert to 0 to 1, games multiply by 0x47008081 and add 0xC7008081. }