106c3fb27SDimitry Andric//===-- RISCVInstrInfoZfa.td - RISC-V 'Zfa' instructions ---*- tablegen -*-===// 206c3fb27SDimitry Andric// 306c3fb27SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 406c3fb27SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 506c3fb27SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 606c3fb27SDimitry Andric// 706c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 806c3fb27SDimitry Andric// 906c3fb27SDimitry Andric// This file describes the RISC-V instructions from the standard 'Zfa' 10*5f757f3fSDimitry Andric// additional floating-point extension, version 1.0. 1106c3fb27SDimitry Andric// 1206c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 1306c3fb27SDimitry Andric 1406c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 1506c3fb27SDimitry Andric// Operand and SDNode transformation definitions. 1606c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 1706c3fb27SDimitry Andric 1806c3fb27SDimitry Andric// 5-bit floating-point immediate encodings. 1906c3fb27SDimitry Andricdef LoadFPImmOperand : AsmOperandClass { 2006c3fb27SDimitry Andric let Name = "LoadFPImm"; 2106c3fb27SDimitry Andric let ParserMethod = "parseFPImm"; 2206c3fb27SDimitry Andric let RenderMethod = "addFPImmOperands"; 2306c3fb27SDimitry Andric let DiagnosticType = "InvalidLoadFPImm"; 2406c3fb27SDimitry Andric} 2506c3fb27SDimitry Andric 2606c3fb27SDimitry Andricdef loadfpimm : Operand<XLenVT> { 2706c3fb27SDimitry Andric let ParserMatchClass = LoadFPImmOperand; 2806c3fb27SDimitry Andric let PrintMethod = "printFPImmOperand"; 2906c3fb27SDimitry Andric} 3006c3fb27SDimitry Andric 3106c3fb27SDimitry Andricdef RTZArg : AsmOperandClass { 3206c3fb27SDimitry Andric let Name = "RTZArg"; 3306c3fb27SDimitry Andric let RenderMethod = "addFRMArgOperands"; 3406c3fb27SDimitry Andric let DiagnosticType = "InvalidRTZArg"; 3506c3fb27SDimitry Andric let ParserMethod = "parseFRMArg"; 3606c3fb27SDimitry Andric} 3706c3fb27SDimitry Andric 3806c3fb27SDimitry Andricdef rtzarg : Operand<XLenVT> { 3906c3fb27SDimitry Andric let ParserMatchClass = RTZArg; 4006c3fb27SDimitry Andric let PrintMethod = "printFRMArg"; 4106c3fb27SDimitry Andric let DecoderMethod = "decodeFRMArg"; 4206c3fb27SDimitry Andric} 4306c3fb27SDimitry Andric 4406c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 4506c3fb27SDimitry Andric// Instruction class templates 4606c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 4706c3fb27SDimitry Andric 4806c3fb27SDimitry Andriclet hasSideEffects = 0, mayLoad = 0, mayStore = 0, mayRaiseFPException = 1 in 4906c3fb27SDimitry Andricclass FPBinaryOp_rr<bits<7> funct7, bits<3> funct3, DAGOperand rdty, 5006c3fb27SDimitry Andric DAGOperand rsty, string opcodestr> 5106c3fb27SDimitry Andric : RVInstR<funct7, funct3, OPC_OP_FP, (outs rdty:$rd), 5206c3fb27SDimitry Andric (ins rsty:$rs1, rsty:$rs2), opcodestr, "$rd, $rs1, $rs2">; 5306c3fb27SDimitry Andric 5406c3fb27SDimitry Andriclet hasSideEffects = 0, mayLoad = 0, mayStore = 0 in 55*5f757f3fSDimitry Andricclass FPFLI_r<bits<7> funct7, bits<5> rs2val, bits<3> funct3, 56*5f757f3fSDimitry Andric DAGOperand rdty, string opcodestr> 57*5f757f3fSDimitry Andric : RVInstR<funct7, funct3, OPC_OP_FP, (outs rdty:$rd), 58*5f757f3fSDimitry Andric (ins loadfpimm:$imm), opcodestr, "$rd, $imm"> { 5906c3fb27SDimitry Andric bits<5> imm; 6006c3fb27SDimitry Andric 61*5f757f3fSDimitry Andric let rs2 = rs2val; 62*5f757f3fSDimitry Andric let rs1 = imm; 6306c3fb27SDimitry Andric} 6406c3fb27SDimitry Andric 6506c3fb27SDimitry Andriclet hasSideEffects = 0, mayLoad = 0, mayStore = 0, mayRaiseFPException = 1, 6606c3fb27SDimitry Andric UseNamedOperandTable = 1, hasPostISelHook = 1 in 6706c3fb27SDimitry Andricclass FPUnaryOp_r_rtz<bits<7> funct7, bits<5> rs2val, DAGOperand rdty, 6806c3fb27SDimitry Andric DAGOperand rs1ty, string opcodestr> 6906c3fb27SDimitry Andric : RVInstRFrm<funct7, OPC_OP_FP, (outs rdty:$rd), 7006c3fb27SDimitry Andric (ins rs1ty:$rs1, rtzarg:$frm), opcodestr, 7106c3fb27SDimitry Andric "$rd, $rs1$frm"> { 7206c3fb27SDimitry Andric let rs2 = rs2val; 7306c3fb27SDimitry Andric} 7406c3fb27SDimitry Andric 7506c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 7606c3fb27SDimitry Andric// Instructions 7706c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 7806c3fb27SDimitry Andric 7906c3fb27SDimitry Andriclet Predicates = [HasStdExtZfa] in { 8006c3fb27SDimitry Andriclet isReMaterializable = 1, isAsCheapAsAMove = 1 in 81*5f757f3fSDimitry Andricdef FLI_S : FPFLI_r<0b1111000, 0b00001, 0b000, FPR32, "fli.s">, 8206c3fb27SDimitry Andric Sched<[WriteFLI32]>; 8306c3fb27SDimitry Andric 8406c3fb27SDimitry Andriclet SchedRW = [WriteFMinMax32, ReadFMinMax32, ReadFMinMax32] in { 8506c3fb27SDimitry Andricdef FMINM_S: FPALU_rr<0b0010100, 0b010, "fminm.s", FPR32, Commutable=1>; 8606c3fb27SDimitry Andricdef FMAXM_S: FPALU_rr<0b0010100, 0b011, "fmaxm.s", FPR32, Commutable=1>; 8706c3fb27SDimitry Andric} 8806c3fb27SDimitry Andric 8906c3fb27SDimitry Andricdef FROUND_S : FPUnaryOp_r_frm<0b0100000, 0b00100, FPR32, FPR32, "fround.s">, 9006c3fb27SDimitry Andric Sched<[WriteFRoundF32, ReadFRoundF32]>; 9106c3fb27SDimitry Andricdef FROUNDNX_S : FPUnaryOp_r_frm<0b0100000, 0b00101, FPR32, FPR32, "froundnx.s">, 9206c3fb27SDimitry Andric Sched<[WriteFRoundF32, ReadFRoundF32]>; 9306c3fb27SDimitry Andric 9406c3fb27SDimitry Andriclet SchedRW = [WriteFCmp32, ReadFCmp32, ReadFCmp32] in { 9506c3fb27SDimitry Andricdef FLTQ_S : FPCmp_rr<0b1010000, 0b101, "fltq.s", FPR32>; 9606c3fb27SDimitry Andricdef FLEQ_S : FPCmp_rr<0b1010000, 0b100, "fleq.s", FPR32>; 9706c3fb27SDimitry Andric} 9806c3fb27SDimitry Andric} // Predicates = [HasStdExtZfa] 9906c3fb27SDimitry Andric 10006c3fb27SDimitry Andriclet Predicates = [HasStdExtZfa, HasStdExtD] in { 10106c3fb27SDimitry Andriclet isReMaterializable = 1, isAsCheapAsAMove = 1 in 102*5f757f3fSDimitry Andricdef FLI_D : FPFLI_r<0b1111001, 0b00001, 0b000, FPR64, "fli.d">, 10306c3fb27SDimitry Andric Sched<[WriteFLI64]>; 10406c3fb27SDimitry Andric 10506c3fb27SDimitry Andriclet SchedRW = [WriteFMinMax64, ReadFMinMax64, ReadFMinMax64] in { 10606c3fb27SDimitry Andricdef FMINM_D: FPALU_rr<0b0010101, 0b010, "fminm.d", FPR64, Commutable=1>; 10706c3fb27SDimitry Andricdef FMAXM_D: FPALU_rr<0b0010101, 0b011, "fmaxm.d", FPR64, Commutable=1>; 10806c3fb27SDimitry Andric} 10906c3fb27SDimitry Andric 11006c3fb27SDimitry Andricdef FROUND_D : FPUnaryOp_r_frm<0b0100001, 0b00100, FPR64, FPR64, "fround.d">, 11106c3fb27SDimitry Andric Sched<[WriteFRoundF64, ReadFRoundF64]>; 11206c3fb27SDimitry Andricdef FROUNDNX_D : FPUnaryOp_r_frm<0b0100001, 0b00101, FPR64, FPR64, "froundnx.d">, 11306c3fb27SDimitry Andric Sched<[WriteFRoundF64, ReadFRoundF64]>; 11406c3fb27SDimitry Andric 115*5f757f3fSDimitry Andriclet IsSignExtendingOpW = 1 in 11606c3fb27SDimitry Andricdef FCVTMOD_W_D 11706c3fb27SDimitry Andric : FPUnaryOp_r_rtz<0b1100001, 0b01000, GPR, FPR64, "fcvtmod.w.d">, 11806c3fb27SDimitry Andric Sched<[WriteFCvtF64ToI32, ReadFCvtF64ToI32]>; 11906c3fb27SDimitry Andric 12006c3fb27SDimitry Andriclet SchedRW = [WriteFCmp64, ReadFCmp64, ReadFCmp64] in { 12106c3fb27SDimitry Andricdef FLTQ_D : FPCmp_rr<0b1010001, 0b101, "fltq.d", FPR64>; 12206c3fb27SDimitry Andricdef FLEQ_D : FPCmp_rr<0b1010001, 0b100, "fleq.d", FPR64>; 12306c3fb27SDimitry Andric} 12406c3fb27SDimitry Andric} // Predicates = [HasStdExtZfa, HasStdExtD] 12506c3fb27SDimitry Andric 12606c3fb27SDimitry Andriclet Predicates = [HasStdExtZfa, HasStdExtD, IsRV32] in { 12706c3fb27SDimitry Andriclet mayRaiseFPException = 0 in { 12806c3fb27SDimitry Andricdef FMVH_X_D : FPUnaryOp_r<0b1110001, 0b00001, 0b000, GPR, FPR64, "fmvh.x.d">, 12906c3fb27SDimitry Andric Sched<[WriteFMovF64ToI64, ReadFMovF64ToI64]>; 13006c3fb27SDimitry Andricdef FMVP_D_X : FPBinaryOp_rr<0b1011001, 0b000, FPR64, GPR, "fmvp.d.x">, 13106c3fb27SDimitry Andric Sched<[WriteFMovI64ToF64, ReadFMovI64ToF64]>; 13206c3fb27SDimitry Andric} 13306c3fb27SDimitry Andric 13406c3fb27SDimitry Andriclet isCodeGenOnly = 1, mayRaiseFPException = 0 in 13506c3fb27SDimitry Andricdef FMV_X_W_FPR64 : FPUnaryOp_r<0b1110000, 0b00000, 0b000, GPR, FPR64, 13606c3fb27SDimitry Andric "fmv.x.w">, 13706c3fb27SDimitry Andric Sched<[WriteFMovF64ToI64, ReadFMovF64ToI64]>; 13806c3fb27SDimitry Andric} // Predicates = [HasStdExtZfa, HasStdExtD, IsRV32] 13906c3fb27SDimitry Andric 14006c3fb27SDimitry Andriclet Predicates = [HasStdExtZfa, HasStdExtZfhOrZvfh] in 14106c3fb27SDimitry Andriclet isReMaterializable = 1, isAsCheapAsAMove = 1 in 142*5f757f3fSDimitry Andricdef FLI_H : FPFLI_r<0b1111010, 0b00001, 0b000, FPR16, "fli.h">, 14306c3fb27SDimitry Andric Sched<[WriteFLI16]>; 14406c3fb27SDimitry Andric 14506c3fb27SDimitry Andriclet Predicates = [HasStdExtZfa, HasStdExtZfh] in { 14606c3fb27SDimitry Andriclet SchedRW = [WriteFMinMax16, ReadFMinMax16, ReadFMinMax16] in { 14706c3fb27SDimitry Andricdef FMINM_H: FPALU_rr<0b0010110, 0b010, "fminm.h", FPR16, Commutable=1>; 14806c3fb27SDimitry Andricdef FMAXM_H: FPALU_rr<0b0010110, 0b011, "fmaxm.h", FPR16, Commutable=1>; 14906c3fb27SDimitry Andric} 15006c3fb27SDimitry Andric 15106c3fb27SDimitry Andricdef FROUND_H : FPUnaryOp_r_frm<0b0100010, 0b00100, FPR16, FPR16, "fround.h">, 15206c3fb27SDimitry Andric Sched<[WriteFRoundF16, ReadFRoundF16]>; 15306c3fb27SDimitry Andricdef FROUNDNX_H : FPUnaryOp_r_frm<0b0100010, 0b00101, FPR16, FPR16, "froundnx.h">, 15406c3fb27SDimitry Andric Sched<[WriteFRoundF16, ReadFRoundF16]>; 15506c3fb27SDimitry Andric 15606c3fb27SDimitry Andriclet SchedRW = [WriteFCmp16, ReadFCmp16, ReadFCmp16] in { 15706c3fb27SDimitry Andricdef FLTQ_H : FPCmp_rr<0b1010010, 0b101, "fltq.h", FPR16>; 15806c3fb27SDimitry Andricdef FLEQ_H : FPCmp_rr<0b1010010, 0b100, "fleq.h", FPR16>; 15906c3fb27SDimitry Andric} 16006c3fb27SDimitry Andric} // Predicates = [HasStdExtZfa, HasStdExtZfh] 16106c3fb27SDimitry Andric 16206c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 16306c3fb27SDimitry Andric// Pseudo-instructions and codegen patterns 16406c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 16506c3fb27SDimitry Andric 16606c3fb27SDimitry Andriclet Predicates = [HasStdExtZfa] in { 16706c3fb27SDimitry Andricdef : InstAlias<"fgtq.s $rd, $rs, $rt", 16806c3fb27SDimitry Andric (FLTQ_S GPR:$rd, FPR32:$rt, FPR32:$rs), 0>; 16906c3fb27SDimitry Andricdef : InstAlias<"fgeq.s $rd, $rs, $rt", 17006c3fb27SDimitry Andric (FLEQ_S GPR:$rd, FPR32:$rt, FPR32:$rs), 0>; 17106c3fb27SDimitry Andric} 17206c3fb27SDimitry Andric 17306c3fb27SDimitry Andriclet Predicates = [HasStdExtZfa, HasStdExtD] in { 17406c3fb27SDimitry Andricdef : InstAlias<"fgtq.d $rd, $rs, $rt", 17506c3fb27SDimitry Andric (FLTQ_D GPR:$rd, FPR64:$rt, FPR64:$rs), 0>; 17606c3fb27SDimitry Andricdef : InstAlias<"fgeq.d $rd, $rs, $rt", 17706c3fb27SDimitry Andric (FLEQ_D GPR:$rd, FPR64:$rt, FPR64:$rs), 0>; 17806c3fb27SDimitry Andric} 17906c3fb27SDimitry Andric 18006c3fb27SDimitry Andriclet Predicates = [HasStdExtZfa, HasStdExtZfh] in { 18106c3fb27SDimitry Andricdef : InstAlias<"fgtq.h $rd, $rs, $rt", 18206c3fb27SDimitry Andric (FLTQ_H GPR:$rd, FPR16:$rt, FPR16:$rs), 0>; 18306c3fb27SDimitry Andricdef : InstAlias<"fgeq.h $rd, $rs, $rt", 18406c3fb27SDimitry Andric (FLEQ_H GPR:$rd, FPR16:$rt, FPR16:$rs), 0>; 18506c3fb27SDimitry Andric} 18606c3fb27SDimitry Andric 18706c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 18806c3fb27SDimitry Andric// Codegen patterns 18906c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 19006c3fb27SDimitry Andric 19106c3fb27SDimitry Andriclet Predicates = [HasStdExtZfa] in { 19206c3fb27SDimitry Andricdef: PatFprFpr<fminimum, FMINM_S, FPR32, f32>; 19306c3fb27SDimitry Andricdef: PatFprFpr<fmaximum, FMAXM_S, FPR32, f32>; 19406c3fb27SDimitry Andric 19506c3fb27SDimitry Andric// frint rounds according to the current rounding mode and detects 19606c3fb27SDimitry Andric// inexact conditions. 19706c3fb27SDimitry Andricdef: Pat<(any_frint FPR32:$rs1), (FROUNDNX_S FPR32:$rs1, FRM_DYN)>; 19806c3fb27SDimitry Andric 19906c3fb27SDimitry Andric// fnearbyint is like frint but does not detect inexact conditions. 20006c3fb27SDimitry Andricdef: Pat<(any_fnearbyint FPR32:$rs1), (FROUND_S FPR32:$rs1, FRM_DYN)>; 20106c3fb27SDimitry Andric 20206c3fb27SDimitry Andricdef: Pat<(any_fround FPR32:$rs1), (FROUND_S FPR32:$rs1, FRM_RMM)>; 20306c3fb27SDimitry Andricdef: Pat<(any_ffloor FPR32:$rs1), (FROUND_S FPR32:$rs1, FRM_RDN)>; 20406c3fb27SDimitry Andricdef: Pat<(any_fceil FPR32:$rs1), (FROUND_S FPR32:$rs1, FRM_RUP)>; 20506c3fb27SDimitry Andricdef: Pat<(any_ftrunc FPR32:$rs1), (FROUND_S FPR32:$rs1, FRM_RTZ)>; 20606c3fb27SDimitry Andric 20706c3fb27SDimitry Andricdef: PatSetCC<FPR32, strict_fsetcc, SETLT, FLTQ_S, f32>; 20806c3fb27SDimitry Andricdef: PatSetCC<FPR32, strict_fsetcc, SETOLT, FLTQ_S, f32>; 20906c3fb27SDimitry Andricdef: PatSetCC<FPR32, strict_fsetcc, SETLE, FLEQ_S, f32>; 21006c3fb27SDimitry Andricdef: PatSetCC<FPR32, strict_fsetcc, SETOLE, FLEQ_S, f32>; 21106c3fb27SDimitry Andric} // Predicates = [HasStdExtZfa] 21206c3fb27SDimitry Andric 21306c3fb27SDimitry Andriclet Predicates = [HasStdExtZfa, HasStdExtD] in { 21406c3fb27SDimitry Andricdef: PatFprFpr<fminimum, FMINM_D, FPR64, f64>; 21506c3fb27SDimitry Andricdef: PatFprFpr<fmaximum, FMAXM_D, FPR64, f64>; 21606c3fb27SDimitry Andric 21706c3fb27SDimitry Andric// frint rounds according to the current rounding mode and detects 21806c3fb27SDimitry Andric// inexact conditions. 21906c3fb27SDimitry Andricdef: Pat<(any_frint FPR64:$rs1), (FROUNDNX_D FPR64:$rs1, FRM_DYN)>; 22006c3fb27SDimitry Andric 22106c3fb27SDimitry Andric// fnearbyint is like frint but does not detect inexact conditions. 22206c3fb27SDimitry Andricdef: Pat<(any_fnearbyint FPR64:$rs1), (FROUND_D FPR64:$rs1, FRM_DYN)>; 22306c3fb27SDimitry Andric 22406c3fb27SDimitry Andricdef: Pat<(any_fround FPR64:$rs1), (FROUND_D FPR64:$rs1, FRM_RMM)>; 22506c3fb27SDimitry Andricdef: Pat<(any_froundeven FPR64:$rs1), (FROUND_D FPR64:$rs1, FRM_RNE)>; 22606c3fb27SDimitry Andricdef: Pat<(any_ffloor FPR64:$rs1), (FROUND_D FPR64:$rs1, FRM_RDN)>; 22706c3fb27SDimitry Andricdef: Pat<(any_fceil FPR64:$rs1), (FROUND_D FPR64:$rs1, FRM_RUP)>; 22806c3fb27SDimitry Andricdef: Pat<(any_ftrunc FPR64:$rs1), (FROUND_D FPR64:$rs1, FRM_RTZ)>; 22906c3fb27SDimitry Andric 23006c3fb27SDimitry Andricdef: PatSetCC<FPR64, strict_fsetcc, SETLT, FLTQ_D, f64>; 23106c3fb27SDimitry Andricdef: PatSetCC<FPR64, strict_fsetcc, SETOLT, FLTQ_D, f64>; 23206c3fb27SDimitry Andricdef: PatSetCC<FPR64, strict_fsetcc, SETLE, FLEQ_D, f64>; 23306c3fb27SDimitry Andricdef: PatSetCC<FPR64, strict_fsetcc, SETOLE, FLEQ_D, f64>; 23406c3fb27SDimitry Andric} // Predicates = [HasStdExtZfa, HasStdExtD] 23506c3fb27SDimitry Andric 23606c3fb27SDimitry Andriclet Predicates = [HasStdExtZfa, HasStdExtD, IsRV32] in { 23706c3fb27SDimitry Andricdef : Pat<(RISCVBuildPairF64 GPR:$rs1, GPR:$rs2), 23806c3fb27SDimitry Andric (FMVP_D_X GPR:$rs1, GPR:$rs2)>; 23906c3fb27SDimitry Andric} 24006c3fb27SDimitry Andric 24106c3fb27SDimitry Andriclet Predicates = [HasStdExtZfa, HasStdExtZfh] in { 24206c3fb27SDimitry Andricdef: PatFprFpr<fminimum, FMINM_H, FPR16, f16>; 24306c3fb27SDimitry Andricdef: PatFprFpr<fmaximum, FMAXM_H, FPR16, f16>; 24406c3fb27SDimitry Andric 24506c3fb27SDimitry Andric// frint rounds according to the current rounding mode and detects 24606c3fb27SDimitry Andric// inexact conditions. 24706c3fb27SDimitry Andricdef: Pat<(f16 (any_frint FPR16:$rs1)), (FROUNDNX_H FPR16:$rs1, FRM_DYN)>; 24806c3fb27SDimitry Andric 24906c3fb27SDimitry Andric// fnearbyint is like frint but does not detect inexact conditions. 25006c3fb27SDimitry Andricdef: Pat<(f16 (any_fnearbyint FPR16:$rs1)), (FROUND_H FPR16:$rs1, FRM_DYN)>; 25106c3fb27SDimitry Andric 25206c3fb27SDimitry Andricdef: Pat<(f16 (any_fround FPR16:$rs1)), (FROUND_H FPR16:$rs1, FRM_RMM)>; 25306c3fb27SDimitry Andricdef: Pat<(f16 (any_froundeven FPR16:$rs1)), (FROUND_H FPR16:$rs1, FRM_RNE)>; 25406c3fb27SDimitry Andricdef: Pat<(f16 (any_ffloor FPR16:$rs1)), (FROUND_H FPR16:$rs1, FRM_RDN)>; 25506c3fb27SDimitry Andricdef: Pat<(f16 (any_fceil FPR16:$rs1)), (FROUND_H FPR16:$rs1, FRM_RUP)>; 25606c3fb27SDimitry Andricdef: Pat<(f16 (any_ftrunc FPR16:$rs1)), (FROUND_H FPR16:$rs1, FRM_RTZ)>; 25706c3fb27SDimitry Andric 25806c3fb27SDimitry Andricdef: PatSetCC<FPR16, strict_fsetcc, SETLT, FLTQ_H, f16>; 25906c3fb27SDimitry Andricdef: PatSetCC<FPR16, strict_fsetcc, SETOLT, FLTQ_H, f16>; 26006c3fb27SDimitry Andricdef: PatSetCC<FPR16, strict_fsetcc, SETLE, FLEQ_H, f16>; 26106c3fb27SDimitry Andricdef: PatSetCC<FPR16, strict_fsetcc, SETOLE, FLEQ_H, f16>; 26206c3fb27SDimitry Andric} // Predicates = [HasStdExtZfa, HasStdExtZfh] 263