a32_emit_x64: Update upper_location_descriptor in BXWritePC based on final location
This commit is contained in:
parent
714b0b9a8b
commit
f229a68aed
2 changed files with 6 additions and 1 deletions
|
@ -67,6 +67,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 Location().SingleStepping();
|
return Location().SingleStepping();
|
||||||
}
|
}
|
||||||
|
@ -732,7 +736,7 @@ void A32EmitX64::EmitA32BXWritePC(A32EmitContext& ctx, IR::Inst* inst) {
|
||||||
auto args = ctx.reg_alloc.GetArgumentInfo(inst);
|
auto args = ctx.reg_alloc.GetArgumentInfo(inst);
|
||||||
auto& arg = args[0];
|
auto& arg = args[0];
|
||||||
|
|
||||||
const u32 upper_without_t = (ctx.Location().SetSingleStepping(false).UniqueHash() >> 32) & 0xFFFFFFFE;
|
const u32 upper_without_t = (ctx.EndLocation().SetSingleStepping(false).UniqueHash() >> 32) & 0xFFFFFFFE;
|
||||||
|
|
||||||
// Pseudocode:
|
// Pseudocode:
|
||||||
// if (new_pc & 1) {
|
// if (new_pc & 1) {
|
||||||
|
|
|
@ -29,6 +29,7 @@ struct A32EmitContext final : public EmitContext {
|
||||||
A32EmitContext(const A32::UserConfig& conf, RegAlloc& reg_alloc, IR::Block& block);
|
A32EmitContext(const A32::UserConfig& conf, 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::FPCR FPCR(bool fpcr_controlled = true) const override;
|
FP::FPCR FPCR(bool fpcr_controlled = true) const override;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue