|
|
|
@ -12,7 +12,6 @@ |
|
|
|
#include "dynarmic/backend/arm64/emit_context.h"
|
|
|
|
#include "dynarmic/backend/arm64/fpsr_manager.h"
|
|
|
|
#include "dynarmic/backend/arm64/reg_alloc.h"
|
|
|
|
#include "dynarmic/common/always_false.h"
|
|
|
|
#include "dynarmic/ir/basic_block.h"
|
|
|
|
#include "dynarmic/ir/microinstruction.h"
|
|
|
|
#include "dynarmic/ir/opcodes.h"
|
|
|
|
@ -43,7 +42,7 @@ static void EmitTwoOpArranged(oaknut::CodeGenerator& code, EmitContext& ctx, IR: |
|
|
|
} else if constexpr (size == 64) { |
|
|
|
emit(Qresult->D2(), Qoperand->D2()); |
|
|
|
} else { |
|
|
|
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>); |
|
|
|
static_assert(false); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
@ -66,7 +65,7 @@ static void EmitTwoOpArrangedWiden(oaknut::CodeGenerator& code, EmitContext& ctx |
|
|
|
} else if constexpr (size == 32) { |
|
|
|
emit(Qresult->D2(), Qoperand->toD().S2()); |
|
|
|
} else { |
|
|
|
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>); |
|
|
|
static_assert(false); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
@ -81,7 +80,7 @@ static void EmitTwoOpArrangedNarrow(oaknut::CodeGenerator& code, EmitContext& ct |
|
|
|
} else if constexpr (size == 64) { |
|
|
|
emit(Qresult->toD().S2(), Qoperand->D2()); |
|
|
|
} else { |
|
|
|
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>); |
|
|
|
static_assert(false); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
@ -104,7 +103,7 @@ static void EmitTwoOpArrangedPairWiden(oaknut::CodeGenerator& code, EmitContext& |
|
|
|
} else if constexpr (size == 32) { |
|
|
|
emit(Qresult->D2(), Qoperand->S4()); |
|
|
|
} else { |
|
|
|
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>); |
|
|
|
static_assert(false); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
@ -119,7 +118,7 @@ static void EmitTwoOpArrangedLower(oaknut::CodeGenerator& code, EmitContext& ctx |
|
|
|
} else if constexpr (size == 32) { |
|
|
|
emit(Qresult->toD().S2(), Qoperand->toD().S2()); |
|
|
|
} else { |
|
|
|
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>); |
|
|
|
static_assert(false); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
@ -147,7 +146,7 @@ static void EmitThreeOpArranged(oaknut::CodeGenerator& code, EmitContext& ctx, I |
|
|
|
} else if constexpr (size == 64) { |
|
|
|
emit(Qresult->D2(), Qa->D2(), Qb->D2()); |
|
|
|
} else { |
|
|
|
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>); |
|
|
|
static_assert(false); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
@ -172,7 +171,7 @@ static void EmitThreeOpArrangedWiden(oaknut::CodeGenerator& code, EmitContext& c |
|
|
|
} else if constexpr (size == 64) { |
|
|
|
emit(Qresult->Q1(), Qa->toD().D1(), Qb->toD().D1()); |
|
|
|
} else { |
|
|
|
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>); |
|
|
|
static_assert(false); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
@ -195,7 +194,7 @@ static void EmitThreeOpArrangedLower(oaknut::CodeGenerator& code, EmitContext& c |
|
|
|
} else if constexpr (size == 32) { |
|
|
|
emit(Qresult->toD().S2(), Qa->toD().S2(), Qb->toD().S2()); |
|
|
|
} else { |
|
|
|
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>); |
|
|
|
static_assert(false); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
@ -217,7 +216,7 @@ static void EmitSaturatedAccumulate(oaknut::CodeGenerator&, EmitContext& ctx, IR |
|
|
|
} else if constexpr (size == 64) { |
|
|
|
emit(Qaccumulator->D2(), Qoperand->D2()); |
|
|
|
} else { |
|
|
|
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>); |
|
|
|
static_assert(false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -238,7 +237,7 @@ static void EmitImmShift(oaknut::CodeGenerator&, EmitContext& ctx, IR::Inst* ins |
|
|
|
} else if constexpr (size == 64) { |
|
|
|
emit(Qresult->D2(), Qoperand->D2(), shift_amount); |
|
|
|
} else { |
|
|
|
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>); |
|
|
|
static_assert(false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -266,7 +265,7 @@ static void EmitReduce(oaknut::CodeGenerator&, EmitContext& ctx, IR::Inst* inst, |
|
|
|
} else if constexpr (size == 64) { |
|
|
|
emit(Vresult, Qoperand->D2()); |
|
|
|
} else { |
|
|
|
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>); |
|
|
|
static_assert(false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|