xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCVInstrInfoZfa.td (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
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