diff --git a/src/dynarmic/backend/arm64/emit_arm64_data_processing.cpp b/src/dynarmic/backend/arm64/emit_arm64_data_processing.cpp index 93b8e3fd..f610daa9 100644 --- a/src/dynarmic/backend/arm64/emit_arm64_data_processing.cpp +++ b/src/dynarmic/backend/arm64/emit_arm64_data_processing.cpp @@ -932,42 +932,37 @@ void EmitIR(oaknut::CodeGenerator& code, EmitContext& ctx, IR template<> void EmitIR(oaknut::CodeGenerator& code, EmitContext& ctx, IR::Inst* inst) { - (void)code; - (void)ctx; - (void)inst; - ASSERT_FALSE("Unimplemented"); + EmitTwoOp<32>( + code, ctx, inst, + [&](auto& Wresult, auto& Woperand) { code.SXTB(Wresult, Woperand); }); } template<> void EmitIR(oaknut::CodeGenerator& code, EmitContext& ctx, IR::Inst* inst) { - (void)code; - (void)ctx; - (void)inst; - ASSERT_FALSE("Unimplemented"); + EmitTwoOp<32>( + code, ctx, inst, + [&](auto& Wresult, auto& Woperand) { code.SXTH(Wresult, Woperand); }); } template<> void EmitIR(oaknut::CodeGenerator& code, EmitContext& ctx, IR::Inst* inst) { - (void)code; - (void)ctx; - (void)inst; - ASSERT_FALSE("Unimplemented"); + EmitTwoOp<64>( + code, ctx, inst, + [&](auto& Xresult, auto& Xoperand) { code.SXTB(Xresult, Xoperand->toW()); }); } template<> void EmitIR(oaknut::CodeGenerator& code, EmitContext& ctx, IR::Inst* inst) { - (void)code; - (void)ctx; - (void)inst; - ASSERT_FALSE("Unimplemented"); + EmitTwoOp<64>( + code, ctx, inst, + [&](auto& Xresult, auto& Xoperand) { code.SXTH(Xresult, Xoperand->toW()); }); } template<> void EmitIR(oaknut::CodeGenerator& code, EmitContext& ctx, IR::Inst* inst) { - (void)code; - (void)ctx; - (void)inst; - ASSERT_FALSE("Unimplemented"); + EmitTwoOp<64>( + code, ctx, inst, + [&](auto& Xresult, auto& Xoperand) { code.SXTW(Xresult, Xoperand->toW()); }); } template<>