Expand Up
@@ -93,10 +93,10 @@ void JitArm64::GenerateAsm()
// set the mem_base based on MSR flags
LDR (IndexType::Unsigned, ARM64Reg::W28, PPC_REG, PPCSTATE_OFF (msr));
FixupBranch physmem = TBNZ (ARM64Reg::W28, 31 - 27 );
MOVP2R (MEM_REG, Memory::physical_base);
MOVP2R (MEM_REG, jo. fastmem_arena ? Memory::physical_base : Memory::physical_page_mappings_base );
FixupBranch membaseend = B ();
SetJumpTarget (physmem);
MOVP2R (MEM_REG, Memory::logical_base);
MOVP2R (MEM_REG, jo. fastmem_arena ? Memory::logical_base : Memory::logical_page_mappings_base );
SetJumpTarget (membaseend);
// iCache[(address >> 2) & iCache_Mask];
Expand Down
Expand Up
@@ -141,10 +141,10 @@ void JitArm64::GenerateAsm()
// set the mem_base based on MSR flags and jump to next block.
LDR (IndexType::Unsigned, ARM64Reg::W28, PPC_REG, PPCSTATE_OFF (msr));
FixupBranch physmem = TBNZ (ARM64Reg::W28, 31 - 27 );
MOVP2R (MEM_REG, Memory::physical_base);
MOVP2R (MEM_REG, jo. fastmem_arena ? Memory::physical_base : Memory::physical_page_mappings_base );
BR (ARM64Reg::X0);
SetJumpTarget (physmem);
MOVP2R (MEM_REG, Memory::logical_base);
MOVP2R (MEM_REG, jo. fastmem_arena ? Memory::logical_base : Memory::logical_page_mappings_base );
BR (ARM64Reg::X0);
// Call JIT
Expand Down
Expand Up
@@ -510,7 +510,7 @@ void JitArm64::GenerateQuantizedLoads()
constexpr u32 flags = BackPatchInfo::FLAG_LOAD | BackPatchInfo::FLAG_FLOAT |
BackPatchInfo::FLAG_PAIR | BackPatchInfo::FLAG_SIZE_32;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
EmitBackpatchRoutine (flags, MemAccessMode::Auto , ARM64Reg::D0, addr_reg,
gprs_to_push & ~BitSet32{1 }, fprs_to_push, true );
RET (ARM64Reg::X30);
Expand All
@@ -520,8 +520,8 @@ void JitArm64::GenerateQuantizedLoads()
constexpr u32 flags = BackPatchInfo::FLAG_LOAD | BackPatchInfo::FLAG_FLOAT |
BackPatchInfo::FLAG_PAIR | BackPatchInfo::FLAG_SIZE_8;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
float_emit.UXTL (8 , ARM64Reg::D0, ARM64Reg::D0);
float_emit.UXTL (16 , ARM64Reg::D0, ARM64Reg::D0);
Expand All
@@ -538,8 +538,8 @@ void JitArm64::GenerateQuantizedLoads()
constexpr u32 flags = BackPatchInfo::FLAG_LOAD | BackPatchInfo::FLAG_FLOAT |
BackPatchInfo::FLAG_PAIR | BackPatchInfo::FLAG_SIZE_8;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
float_emit.SXTL (8 , ARM64Reg::D0, ARM64Reg::D0);
float_emit.SXTL (16 , ARM64Reg::D0, ARM64Reg::D0);
Expand All
@@ -556,8 +556,8 @@ void JitArm64::GenerateQuantizedLoads()
constexpr u32 flags = BackPatchInfo::FLAG_LOAD | BackPatchInfo::FLAG_FLOAT |
BackPatchInfo::FLAG_PAIR | BackPatchInfo::FLAG_SIZE_16;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
float_emit.UXTL (16 , ARM64Reg::D0, ARM64Reg::D0);
float_emit.UCVTF (32 , ARM64Reg::D0, ARM64Reg::D0);
Expand All
@@ -573,8 +573,8 @@ void JitArm64::GenerateQuantizedLoads()
constexpr u32 flags = BackPatchInfo::FLAG_LOAD | BackPatchInfo::FLAG_FLOAT |
BackPatchInfo::FLAG_PAIR | BackPatchInfo::FLAG_SIZE_16;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
float_emit.SXTL (16 , ARM64Reg::D0, ARM64Reg::D0);
float_emit.SCVTF (32 , ARM64Reg::D0, ARM64Reg::D0);
Expand All
@@ -591,7 +591,7 @@ void JitArm64::GenerateQuantizedLoads()
constexpr u32 flags =
BackPatchInfo::FLAG_LOAD | BackPatchInfo::FLAG_FLOAT | BackPatchInfo::FLAG_SIZE_32;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
EmitBackpatchRoutine (flags, MemAccessMode::Auto , ARM64Reg::D0, addr_reg,
gprs_to_push & ~BitSet32{1 }, fprs_to_push, true );
RET (ARM64Reg::X30);
Expand All
@@ -601,8 +601,8 @@ void JitArm64::GenerateQuantizedLoads()
constexpr u32 flags =
BackPatchInfo::FLAG_LOAD | BackPatchInfo::FLAG_FLOAT | BackPatchInfo::FLAG_SIZE_8;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
float_emit.UXTL (8 , ARM64Reg::D0, ARM64Reg::D0);
float_emit.UXTL (16 , ARM64Reg::D0, ARM64Reg::D0);
Expand All
@@ -619,8 +619,8 @@ void JitArm64::GenerateQuantizedLoads()
constexpr u32 flags =
BackPatchInfo::FLAG_LOAD | BackPatchInfo::FLAG_FLOAT | BackPatchInfo::FLAG_SIZE_8;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
float_emit.SXTL (8 , ARM64Reg::D0, ARM64Reg::D0);
float_emit.SXTL (16 , ARM64Reg::D0, ARM64Reg::D0);
Expand All
@@ -637,8 +637,8 @@ void JitArm64::GenerateQuantizedLoads()
constexpr u32 flags =
BackPatchInfo::FLAG_LOAD | BackPatchInfo::FLAG_FLOAT | BackPatchInfo::FLAG_SIZE_16;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
float_emit.UXTL (16 , ARM64Reg::D0, ARM64Reg::D0);
float_emit.UCVTF (32 , ARM64Reg::D0, ARM64Reg::D0);
Expand All
@@ -654,8 +654,8 @@ void JitArm64::GenerateQuantizedLoads()
constexpr u32 flags =
BackPatchInfo::FLAG_LOAD | BackPatchInfo::FLAG_FLOAT | BackPatchInfo::FLAG_SIZE_16;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
float_emit.SXTL (16 , ARM64Reg::D0, ARM64Reg::D0);
float_emit.SCVTF (32 , ARM64Reg::D0, ARM64Reg::D0);
Expand Down
Expand Up
@@ -699,6 +699,7 @@ void JitArm64::GenerateQuantizedStores()
// X0 is the scale
// X1 is the address
// X2 is a temporary
// X3 is a temporary if jo.fastmem_arena is false (used in EmitBackpatchRoutine)
// X30 is LR
// Q0 is the register
// Q1 is a temporary
Expand All
@@ -707,6 +708,8 @@ void JitArm64::GenerateQuantizedStores()
BitSet32 gprs_to_push = CALLER_SAVED_GPRS & ~BitSet32{0 , 2 };
if (!jo.memcheck )
gprs_to_push &= ~BitSet32{1 };
if (!jo.fastmem_arena )
gprs_to_push &= ~BitSet32{3 };
BitSet32 fprs_to_push = BitSet32 (0xFFFFFFFF ) & ~BitSet32{0 , 1 };
ARM64FloatEmitter float_emit (this );
Expand All
@@ -718,8 +721,8 @@ void JitArm64::GenerateQuantizedStores()
constexpr u32 flags = BackPatchInfo::FLAG_STORE | BackPatchInfo::FLAG_FLOAT |
BackPatchInfo::FLAG_PAIR | BackPatchInfo::FLAG_SIZE_32;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
RET (ARM64Reg::X30);
}
Expand All
@@ -737,8 +740,8 @@ void JitArm64::GenerateQuantizedStores()
constexpr u32 flags = BackPatchInfo::FLAG_STORE | BackPatchInfo::FLAG_FLOAT |
BackPatchInfo::FLAG_PAIR | BackPatchInfo::FLAG_SIZE_8;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
RET (ARM64Reg::X30);
}
Expand All
@@ -756,8 +759,8 @@ void JitArm64::GenerateQuantizedStores()
constexpr u32 flags = BackPatchInfo::FLAG_STORE | BackPatchInfo::FLAG_FLOAT |
BackPatchInfo::FLAG_PAIR | BackPatchInfo::FLAG_SIZE_8;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
RET (ARM64Reg::X30);
}
Expand All
@@ -774,8 +777,8 @@ void JitArm64::GenerateQuantizedStores()
constexpr u32 flags = BackPatchInfo::FLAG_STORE | BackPatchInfo::FLAG_FLOAT |
BackPatchInfo::FLAG_PAIR | BackPatchInfo::FLAG_SIZE_16;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
RET (ARM64Reg::X30);
}
Expand All
@@ -792,8 +795,8 @@ void JitArm64::GenerateQuantizedStores()
constexpr u32 flags = BackPatchInfo::FLAG_STORE | BackPatchInfo::FLAG_FLOAT |
BackPatchInfo::FLAG_PAIR | BackPatchInfo::FLAG_SIZE_16;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
RET (ARM64Reg::X30);
}
Expand All
@@ -803,8 +806,8 @@ void JitArm64::GenerateQuantizedStores()
constexpr u32 flags =
BackPatchInfo::FLAG_STORE | BackPatchInfo::FLAG_FLOAT | BackPatchInfo::FLAG_SIZE_32;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
RET (ARM64Reg::X30);
}
Expand All
@@ -822,8 +825,8 @@ void JitArm64::GenerateQuantizedStores()
constexpr u32 flags =
BackPatchInfo::FLAG_STORE | BackPatchInfo::FLAG_FLOAT | BackPatchInfo::FLAG_SIZE_8;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
RET (ARM64Reg::X30);
}
Expand All
@@ -841,8 +844,8 @@ void JitArm64::GenerateQuantizedStores()
constexpr u32 flags =
BackPatchInfo::FLAG_STORE | BackPatchInfo::FLAG_FLOAT | BackPatchInfo::FLAG_SIZE_8;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
RET (ARM64Reg::X30);
}
Expand All
@@ -859,8 +862,8 @@ void JitArm64::GenerateQuantizedStores()
constexpr u32 flags =
BackPatchInfo::FLAG_STORE | BackPatchInfo::FLAG_FLOAT | BackPatchInfo::FLAG_SIZE_16;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
RET (ARM64Reg::X30);
}
Expand All
@@ -877,8 +880,8 @@ void JitArm64::GenerateQuantizedStores()
constexpr u32 flags =
BackPatchInfo::FLAG_STORE | BackPatchInfo::FLAG_FLOAT | BackPatchInfo::FLAG_SIZE_16;
EmitBackpatchRoutine (flags, jo. fastmem_arena , jo. fastmem_arena , ARM64Reg::D0, addr_reg,
gprs_to_push, fprs_to_push, true );
EmitBackpatchRoutine (flags, MemAccessMode::Auto, ARM64Reg::D0, addr_reg, gprs_to_push ,
fprs_to_push, true );
RET (ARM64Reg::X30);
}
Expand Down