| 3612 | } |
| 3613 | |
| 3614 | void OpDispatchBuilder::NEGOp(OpcodeArgs) { |
| 3615 | HandledLock = (Op->Flags & FEXCore::X86Tables::DecodeFlags::FLAG_LOCK) != 0; |
| 3616 | |
| 3617 | const auto Size = OpSizeFromSrc(Op); |
| 3618 | auto ZeroConst = Constant(0); |
| 3619 | |
| 3620 | if (DestIsLockedMem(Op)) { |
| 3621 | Ref DestMem = MakeSegmentAddress(Op, Op->Dest); |
| 3622 | Ref Dest = _AtomicFetchNeg(Size, DestMem); |
| 3623 | CalculateFlags_SUB(Size, ZeroConst, Dest); |
| 3624 | } else { |
| 3625 | Ref Dest = LoadSource(GPRClass, Op, Op->Dest, Op->Flags, {.AllowUpperGarbage = true}); |
| 3626 | Ref Result = CalculateFlags_SUB(Size, ZeroConst, Dest); |
| 3627 | |
| 3628 | StoreResult(GPRClass, Op, Result, OpSize::iInvalid); |
| 3629 | } |
| 3630 | } |
| 3631 | |
| 3632 | void OpDispatchBuilder::DIVOp(OpcodeArgs) { |
| 3633 | const auto GPRSize = GetGPROpSize(); |
nothing calls this directly
no outgoing calls
no test coverage detected