[a64] Remove `VOne` constant in favor of `FMOV`
This commit is contained in:
parent
3b1a696dd6
commit
cba92a2e6e
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -1746,7 +1746,7 @@ struct UNPACK : Sequence<UNPACK, I<OPCODE_UNPACK, V128Op, V128Op>> {
|
|||
|
||||
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<UNPACK, I<OPCODE_UNPACK, V128Op, V128Op>> {
|
|||
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.
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue