| 2469 | |
| 2470 | template<IR::OpSize ElementSize> |
| 2471 | void OpDispatchBuilder::AVXVFCMPOp(OpcodeArgs) { |
| 2472 | // No need for zero-extending in the scalar case, since |
| 2473 | // all we need is an insert at the end of the operation. |
| 2474 | const auto SrcSize = OpSizeFromSrc(Op); |
| 2475 | const auto DstSize = OpSizeFromDst(Op); |
| 2476 | const uint8_t CompType = Op->Src[2].Literal(); |
| 2477 | |
| 2478 | Ref Src1 = LoadSource_WithOpSize(FPRClass, Op, Op->Src[0], DstSize, Op->Flags); |
| 2479 | Ref Src2 = LoadSource_WithOpSize(FPRClass, Op, Op->Src[1], SrcSize, Op->Flags); |
| 2480 | Ref Result = VFCMPOpImpl(OpSizeFromSrc(Op), ElementSize, Src1, Src2, CompType); |
| 2481 | |
| 2482 | StoreResult(FPRClass, Op, Result, OpSize::iInvalid); |
| 2483 | } |
| 2484 | |
| 2485 | template void OpDispatchBuilder::AVXVFCMPOp<OpSize::i32Bit>(OpcodeArgs); |
| 2486 | template void OpDispatchBuilder::AVXVFCMPOp<OpSize::i64Bit>(OpcodeArgs); |