backend\A64\a32_emit_a64: Implement UpdateUpperLocationDescriptor
This commit is contained in:
parent
5aa60e72a3
commit
60e798d886
@ -62,6 +62,10 @@ A32::LocationDescriptor A32EmitContext::Location() const {
|
|||||||
return A32::LocationDescriptor{block.Location()};
|
return A32::LocationDescriptor{block.Location()};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
A32::LocationDescriptor A32EmitContext::EndLocation() const {
|
||||||
|
return A32::LocationDescriptor{block.EndLocation()};
|
||||||
|
}
|
||||||
|
|
||||||
bool A32EmitContext::IsSingleStep() const {
|
bool A32EmitContext::IsSingleStep() const {
|
||||||
return A32::LocationDescriptor{block.Location()}.SingleStepping();
|
return A32::LocationDescriptor{block.Location()}.SingleStepping();
|
||||||
}
|
}
|
||||||
@ -699,6 +703,15 @@ void A32EmitA64::EmitA32BXWritePC(A32EmitContext& ctx, IR::Inst* inst) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void A32EmitA64::EmitA32UpdateUpperLocationDescriptor(A32EmitContext& ctx, IR::Inst*) {
|
||||||
|
for (auto& inst : ctx.block) {
|
||||||
|
if (inst.GetOpcode() == IR::Opcode::A32BXWritePC) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EmitSetUpperLocationDescriptor(ctx.EndLocation(), ctx.Location());
|
||||||
|
}
|
||||||
|
|
||||||
void A32EmitA64::EmitA32CallSupervisor(A32EmitContext& ctx, IR::Inst* inst) {
|
void A32EmitA64::EmitA32CallSupervisor(A32EmitContext& ctx, IR::Inst* inst) {
|
||||||
ctx.reg_alloc.HostCall(nullptr);
|
ctx.reg_alloc.HostCall(nullptr);
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ class RegAlloc;
|
|||||||
struct A32EmitContext final : public EmitContext {
|
struct A32EmitContext final : public EmitContext {
|
||||||
A32EmitContext(RegAlloc& reg_alloc, IR::Block& block);
|
A32EmitContext(RegAlloc& reg_alloc, IR::Block& block);
|
||||||
A32::LocationDescriptor Location() const;
|
A32::LocationDescriptor Location() const;
|
||||||
|
A32::LocationDescriptor EndLocation() const;
|
||||||
bool IsSingleStep() const;
|
bool IsSingleStep() const;
|
||||||
FP::RoundingMode FPSCR_RMode() const override;
|
FP::RoundingMode FPSCR_RMode() const override;
|
||||||
u32 FPCR() const override;
|
u32 FPCR() const override;
|
||||||
|
@ -32,7 +32,7 @@ A32OPC(GetGEFlags, U32,
|
|||||||
A32OPC(SetGEFlags, Void, U32 )
|
A32OPC(SetGEFlags, Void, U32 )
|
||||||
A32OPC(SetGEFlagsCompressed, Void, U32 )
|
A32OPC(SetGEFlagsCompressed, Void, U32 )
|
||||||
A32OPC(BXWritePC, Void, U32 )
|
A32OPC(BXWritePC, Void, U32 )
|
||||||
//A32OPC(UpdateUpperLocationDescriptor, Void, )
|
A32OPC(UpdateUpperLocationDescriptor, Void, )
|
||||||
A32OPC(CallSupervisor, Void, U32 )
|
A32OPC(CallSupervisor, Void, U32 )
|
||||||
A32OPC(ExceptionRaised, Void, U32, U64 )
|
A32OPC(ExceptionRaised, Void, U32, U64 )
|
||||||
//A32OPC(DataSynchronizationBarrier, Void, )
|
//A32OPC(DataSynchronizationBarrier, Void, )
|
||||||
|
Loading…
x
Reference in New Issue
Block a user