diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp index 6b492fb99..848eaba7d 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp @@ -4274,13 +4274,14 @@ void OpDispatchBuilder::SCASOp(OpcodeArgs) { void OpDispatchBuilder::BSWAPOp(OpcodeArgs) { OrderedNode *Dest; - if (GetSrcSize(Op) == 2) { + const auto Size = GetSrcSize(Op); + if (Size == 2) { // BSWAP of 16bit is undef. ZEN+ causes the lower 16bits to get zero'd Dest = _Constant(0); } else { Dest = LoadSource(GPRClass, Op, Op->Dest, Op->Flags, -1); - Dest = _Rev(Dest); + Dest = _Rev(IR::SizeToOpSize(Size), Dest); } StoreResult(GPRClass, Op, Dest, -1); } @@ -5599,7 +5600,7 @@ void OpDispatchBuilder::LZCNT(OpcodeArgs) { void OpDispatchBuilder::MOVBEOp(OpcodeArgs) { OrderedNode *Src = LoadSource(GPRClass, Op, Op->Src[0], Op->Flags, 1); - Src = _Rev(Src); + Src = _Rev(IR::SizeToOpSize(GetSrcSize(Op)), Src); StoreResult(GPRClass, Op, Src, 1); } diff --git a/FEXCore/include/FEXCore/IR/IREmitter.h b/FEXCore/include/FEXCore/IR/IREmitter.h index 3499730d6..e8724a275 100644 --- a/FEXCore/include/FEXCore/IR/IREmitter.h +++ b/FEXCore/include/FEXCore/IR/IREmitter.h @@ -152,9 +152,6 @@ friend class FEXCore::IR::PassManager; return _AtomicFetchNeg(static_cast(Size), _Addr); } ///< ALU - IRPair _Rev(OrderedNode *_Src) { - return _Rev(static_cast(GetOpSize(_Src)), _Src); - } IRPair _Add(OrderedNode *_Src1, OrderedNode *_Src2) { return _Add(static_cast(std::max(4, std::max(GetOpSize(_Src1), GetOpSize(_Src2)))), _Src1, _Src2); }