diff --git a/External/FEXCore/Source/Interface/Core/JIT/Arm64/JIT.cpp b/External/FEXCore/Source/Interface/Core/JIT/Arm64/JIT.cpp index 106ba6399..4b95ba458 100644 --- a/External/FEXCore/Source/Interface/Core/JIT/Arm64/JIT.cpp +++ b/External/FEXCore/Source/Interface/Core/JIT/Arm64/JIT.cpp @@ -2475,6 +2475,71 @@ void *JITCore::CompileCode([[maybe_unused]] FEXCore::IR::IRListView const } break; } + case IR::OP_VSQXTUN: { + auto Op = IROp->C(); + switch (Op->ElementSize) { + case 2: + sqxtun(GetDst(Node).V8B(), GetSrc(Op->Header.Args[0].ID()).V8H()); + break; + case 4: + sqxtun(GetDst(Node).V4H(), GetSrc(Op->Header.Args[0].ID()).V4S()); + break; + case 8: + sqxtun(GetDst(Node).V2S(), GetSrc(Op->Header.Args[0].ID()).V2D()); + break; + default: LogMan::Msg::A("Unknown element size: %d", Op->ElementSize); + } + break; + } + case IR::OP_VSQXTUN2: { + auto Op = IROp->C(); + mov(GetDst(Node), GetSrc(Op->Header.Args[0].ID())); + switch (Op->ElementSize) { + case 2: + sqxtun2(GetDst(Node).V16B(), GetSrc(Op->Header.Args[1].ID()).V8H()); + break; + case 4: + sqxtun2(GetDst(Node).V8H(), GetSrc(Op->Header.Args[1].ID()).V4S()); + break; + case 8: + sqxtun2(GetDst(Node).V4S(), GetSrc(Op->Header.Args[1].ID()).V2D()); + break; + default: LogMan::Msg::A("Unknown element size: %d", Op->ElementSize); + } + break; + } + case IR::OP_VSXTL: { + auto Op = IROp->C(); + switch (Op->ElementSize) { + case 1: + sxtl(GetDst(Node).V8H(), GetSrc(Op->Header.Args[0].ID()).V8B()); + break; + case 2: + sxtl(GetDst(Node).V4S(), GetSrc(Op->Header.Args[0].ID()).V4H()); + break; + case 4: + sxtl(GetDst(Node).V2D(), GetSrc(Op->Header.Args[0].ID()).V2S()); + break; + default: LogMan::Msg::A("Unknown element size: %d", Op->ElementSize); + } + break; + } + case IR::OP_VUXTL: { + auto Op = IROp->C(); + switch (Op->ElementSize) { + case 1: + uxtl(GetDst(Node).V8H(), GetSrc(Op->Header.Args[0].ID()).V8B()); + break; + case 2: + uxtl(GetDst(Node).V4S(), GetSrc(Op->Header.Args[0].ID()).V4H()); + break; + case 4: + uxtl(GetDst(Node).V2D(), GetSrc(Op->Header.Args[0].ID()).V2S()); + break; + default: LogMan::Msg::A("Unknown element size: %d", Op->ElementSize); + } + break; + } case IR::OP_FLOAT_FTOF: { auto Op = IROp->C(); uint16_t Conv = (Op->DstElementSize << 8) | Op->SrcElementSize;