@@ -288,6 +288,10 @@ class IRR_a<bits<8> op1, bits<8> op2, string asmstr, RegisterClass cd=RD, Regist
288288 : RR<op1, op2, (outs cd:$d), (ins c1:$s1),
289289 asmstr # " $d, $s1", []>;
290290
291+ class IRR_a_n<bits<8> op1, bits<8> op2, bits<2> n, string asmstr, RegisterClass cd=RD, RegisterClass c1=RD>
292+ : RR_n<op1, op2, n, (outs cd:$d), (ins c1:$s1),
293+ asmstr # " $d, $s1", []>;
294+
291295/// op R[c], R[b]
292296class IRR_b<bits<8> op1, bits<8> op2, string asmstr, RegisterClass cd=RD, RegisterClass c2=RD>
293297 : RR<op1, op2, (outs cd:$d), (ins c2:$s1, c2:$s2),
@@ -298,10 +302,18 @@ class IRR_2<bits<8> op1, bits<8> op2, string asmstr
298302 , RegisterClass cd=RD, RegisterClass c1=RD, RegisterClass c2=RD>
299303 : RR<op1, op2, (outs cd:$d), (ins c1:$s1, c2:$s2), asmstr, []>;
300304
305+ class IRR_2_n<bits<8> op1, bits<8> op2, bits<2> n, string asmstr
306+ , RegisterClass cd=RD, RegisterClass c1=RD, RegisterClass c2=RD>
307+ : RR_n<op1, op2, n, (outs cd:$d), (ins c1:$s1, c2:$s2), asmstr, []>;
308+
301309class IRR_dab<bits<8> op1, bits<8> op2, string asmstr,
302310 RegisterClass RCd=RD, RegisterClass RC1=RD, RegisterClass RC2=RD>
303311 : IRR_2<op1, op2, asmstr # " $d, $s1, $s2", RCd, RC1, RC2>;
304312
313+ class IRR_dab_n<bits<8> op1, bits<8> op2, bits<2> n, string asmstr,
314+ RegisterClass RCd=RD, RegisterClass RC1=RD, RegisterClass RC2=RD>
315+ : IRR_2_n<op1, op2, n, asmstr # " $d, $s1, $s2", RCd, RC1, RC2>;
316+
305317class IRR_dba<bits<8> op1, bits<8> op2, string asmstr,
306318 RegisterClass RCd=RD, RegisterClass RC1=RD, RegisterClass RC2=RD>
307319 : IRR_2<op1, op2, asmstr # " $d, $s2, $s1", RCd, RC1, RC2>;
@@ -593,10 +605,19 @@ class IRRR<bits<8>op1, bits<4> op2, string asmstr,
593605 : RRR<op1, op2, (outs RCd:$d), (ins RC1:$s1, RC2:$s2, RC3:$s3),
594606 asmstr # " $d, $s3, $s1, $s2", []>;
595607
608+ class IRRR_n<bits<8>op1, bits<4> op2, bits<2> n, string asmstr,
609+ RegisterClass RCd=RD, RegisterClass RC1=RD, RegisterClass RC2=RD, RegisterClass RC3=RD>
610+ : RRR_n<op1, op2, n, (outs RCd:$d), (ins RC1:$s1, RC2:$s2, RC3:$s3),
611+ asmstr # " $d, $s3, $s1, $s2", []>;
612+
596613class IRRR_d31<bits<8>op1, bits<4> op2, string asmstr,
597614 RegisterClass RCd=RD, RegisterClass RC1=RD, RegisterClass RC2=RD, RegisterClass RC3=RD>
598615 : RRR<op1, op2, (outs RCd:$d), (ins RC1:$s1, RC2:$s2, RC3:$s3), asmstr # " $d, $s3, $s1", []>;
599616
617+ class IRRR_d31_n<bits<8>op1, bits<4> op2, bits<2> n, string asmstr,
618+ RegisterClass RCd=RD, RegisterClass RC1=RD, RegisterClass RC2=RD, RegisterClass RC3=RD>
619+ : RRR_n<op1, op2, n, (outs RCd:$d), (ins RC1:$s1, RC2:$s2, RC3:$s3), asmstr # " $d, $s3, $s1", []>;
620+
600621class IRRR_d32<bits<8>op1, bits<4> op2, string asmstr,
601622 RegisterClass RCd=RD, RegisterClass RC1=RD, RegisterClass RC2=RD, RegisterClass RC3=RD>
602623 : RRR<op1, op2, (outs RCd:$d), (ins RC1:$s1, RC2:$s2, RC3:$s3),
@@ -1846,30 +1867,62 @@ defm XOR_LT_U : mIRR_RC<0x0B, 0x32, 0x8B, 0x32, "xor.lt.u">;
18461867
18471868/// FPU Instructions
18481869
1849- def MADD_F_rrr : IRRR<0x6B, 0x06, "madd.f">, Requires<[HasV130_UP]>;
1850- def MSUB_F_rrr : IRRR<0x6B, 0x07, "msub.f">, Requires<[HasV130_UP]>;
1851- def ADD_F_rrr : IRRR_d31<0x6B, 0x02, "add.f">, Requires<[HasV130_UP]>;
1852- def SUB_F_rrr : IRRR_d31<0x6B, 0x03, "sub.f">, Requires<[HasV130_UP]>;
1853- def MUL_F_rrr : IRR_dab<0x4B, 0x04, "mul.f">, Requires<[HasV130_UP]>;
1854- def DIV_F_rr : IRR_dab<0x4B, 0x05, "div.f">, Requires<[HasV130_UP]>;
1855- def CMP_F_rr : IRR_dab<0x4B, 0x00, "cmp.f">, Requires<[HasV130_UP]>;
1856-
1857- def FTOI_rr : IRR_a<0x4B, 0x10, "ftoi">, Requires<[HasV130_UP]>;
1858- def FTOIZ_rr : IRR_a<0x4B, 0x13, "ftoiz">, Requires<[HasV131_UP]>;
1870+ def MADD_F_rrr : IRRR_n<0x6B, 0x06, 0x1, "madd.f">, Requires<[HasV130_UP]>;
1871+ def MSUB_F_rrr : IRRR_n<0x6B, 0x07, 0x1, "msub.f">, Requires<[HasV130_UP]>;
1872+ def MADD_DF_rrr : IRRR_n<0x6B, 0x06, 0x2, "madd.df", RE, RE, RE, RE>, Requires<[HasV180_UP]>;
1873+ def MSUB_DF_rrr : IRRR_n<0x6B, 0x07, 0x2, "msub.df", RE, RE, RE, RE>, Requires<[HasV180_UP]>;
1874+ def ADD_F_rrr : IRRR_d31_n<0x6B, 0x02, 0x1, "add.f">, Requires<[HasV130_UP]>;
1875+ def ADD_DF_rrr : IRRR_d31_n<0x6B, 0x02, 0x2, "add.df", RE, RE, RE, RE>, Requires<[HasV180_UP]>;
1876+ def SUB_F_rrr : IRRR_d31_n<0x6B, 0x03, 0x1, "sub.f">, Requires<[HasV130_UP]>;
1877+ def SUB_DF_rrr : IRRR_d31_n<0x6B, 0x03, 0x2, "sub.df", RE, RE, RE, RE>, Requires<[HasV180_UP]>;
1878+ def MUL_F_rrr : IRR_dab_n<0x4B, 0x04, 0x01, "mul.f">, Requires<[HasV130_UP]>;
1879+ def MUL_DF_rrr : IRR_dab_n<0x4B, 0x04, 0x02, "mul.df", RE, RE, RE>, Requires<[HasV180_UP]>;
1880+ def DIV_F_rr : IRR_dab_n<0x4B, 0x05, 0x01, "div.f">, Requires<[HasV130_UP]>;
1881+ def DIV_DF_rr : IRR_dab_n<0x4B, 0x05, 0x02, "div.df", RE, RE, RE>, Requires<[HasV180_UP]>;
1882+ def CMP_F_rr : IRR_dab_n<0x4B, 0x00, 0x01, "cmp.f">, Requires<[HasV130_UP]>;
1883+ def CMP_DF_rr : IRR_dab_n<0x4B, 0x00, 0x02, "cmp.df", RD, RE, RE>, Requires<[HasV180_UP]>;
1884+ def MIN_F_rr : IRR_dab_n<0x4B, 0x33, 0x01, "min.f">, Requires<[HasV180_UP]>;
1885+ def MIN_DF_rr : IRR_dab_n<0x4B, 0x33, 0x02, "min.df", RE, RE, RE>, Requires<[HasV180_UP]>;
1886+ def MAX_F_rr : IRR_dab_n<0x4B, 0x32, 0x01, "max.f">, Requires<[HasV180_UP]>;
1887+ def MAX_DF_rr : IRR_dab_n<0x4B, 0x32, 0x02, "max.df", RE, RE, RE>, Requires<[HasV180_UP]>;
1888+
1889+ def FTOI_rr : IRR_a_n<0x4B, 0x10, 0x01, "ftoi">, Requires<[HasV130_UP]>;
1890+ def DFTOI_rr : IRR_a_n<0x4B, 0x10, 0x02, "dftoi", RD, RE>, Requires<[HasV180_UP]>;
1891+ def FTOIZ_rr : IRR_a_n<0x4B, 0x13, 0x01, "ftoiz">, Requires<[HasV131_UP]>;
1892+ def DFTOIZ_rr : IRR_a_n<0x4B, 0x13, 0x02, "dftoiz", RD, RE>, Requires<[HasV180_UP]>;
1893+ def FTOIN_rr : IRR_a_n<0x4B, 0x37, 0x01, "ftoin">, Requires<[HasV180_UP]>;
1894+ def DFTOIN_rr : IRR_a_n<0x4B, 0x37, 0x02, "dftoin", RD, RE>, Requires<[HasV180_UP]>;
1895+ def DFTOL_rr : IRR_a_n<0x4B, 0x1A, 0x02, "dftol", RE, RE>, Requires<[HasV180_UP]>;
1896+ def DFTOLZ_rr : IRR_a_n<0x4B, 0x1B, 0x02, "dftolz", RE, RE>, Requires<[HasV180_UP]>;
1897+ def DFTOUL_rr : IRR_a_n<0x4B, 0x1E, 0x02, "dftoul", RE, RE>, Requires<[HasV180_UP]>;
1898+ def DFTOULZ_rr : IRR_a_n<0x4B, 0x1F, 0x02, "dftoulz", RE, RE>, Requires<[HasV180_UP]>;
1899+ def ABS_F_rr : IRR_a_n<0x4B, 0x30, 0x01, "abs.f">, Requires<[HasV180_UP]>;
1900+ def ABS_DF_rr : IRR_a_n<0x4B, 0x30, 0x02, "abs.df", RE, RE>, Requires<[HasV180_UP]>;
1901+ def NEG_F_rr : IRR_a_n<0x4B, 0x31, 0x01, "neg.f">, Requires<[HasV180_UP]>;
1902+ def NEG_DF_rr : IRR_a_n<0x4B, 0x31, 0x02, "neg.df", RE, RE>, Requires<[HasV180_UP]>;
18591903
18601904def FTOQ31_rr : IRR_dab<0x4B, 0x11, "ftoq31">, Requires<[HasV130_UP]>;
18611905def FTOQ31Z_rr: IRR_dab<0x4B, 0x18, "ftoq31z">, Requires<[HasV131_UP]>;
18621906
1863- def FTOU_rr : IRR_a<0x4B, 0x12, "ftou">, Requires<[HasV130_UP]>;
1864- def FTOUZ_rr : IRR_a<0x4B, 0x17, "ftouz">, Requires<[HasV131_UP]>;
1907+ def FTOU_rr : IRR_a_n<0x4B, 0x12, 0x01, "ftou">, Requires<[HasV130_UP]>;
1908+ def DFTOU_rr : IRR_a_n<0x4B, 0x12, 0x02, "dftou", RD, RE>, Requires<[HasV180_UP]>;
1909+ def FTOUZ_rr : IRR_a_n<0x4B, 0x17, 0x01, "ftouz">, Requires<[HasV131_UP]>;
1910+ def DFTOUZ_rr : IRR_a_n<0x4B, 0x17, 0x02, "dftouz", RD, RE>, Requires<[HasV180_UP]>;
18651911
18661912def FTOHP_rr : IRR_a<0x4B, 0x25, "ftohp">, Requires<[HasV162_UP]>;
18671913
18681914def HPTOF_rr : IRR_a<0x4B, 0x24, "hptof">, Requires<[HasV162_UP]>;
1869- def ITOF_rr : IRR_a<0x4B, 0x14, "itof">, Requires<[HasV130_UP]>;
1915+ def ITOF_rr : IRR_a_n<0x4B, 0x14, 0x01, "itof">, Requires<[HasV130_UP]>;
1916+ def ITODF_rr : IRR_a_n<0x4B, 0x14, 0x02, "itodf", RE, RD>, Requires<[HasV180_UP]>;
18701917
18711918def Q31TOF_rr : IRR_dab<0x4B, 0x15, "q31tof">, Requires<[HasV130_UP]>;
1872- def QSEED_F_rr : IRR_a<0x4B, 0x19, "qseed.f">, Requires<[HasV130_UP]>;
1919+ def QSEED_F_rr : IRR_a_n<0x4B, 0x19, 0x01, "qseed.f">, Requires<[HasV130_UP]>;
1920+ def QSEED_DF_rr : IRR_a_n<0x4B, 0x19, 0x02, "qseed.df", RE, RE>, Requires<[HasV180_UP]>;
18731921
18741922def UPDFL_rr : IRR_R1<0x4B, 0x0C, "updfl">, Requires<[HasV130_UP]>;
1875- def UTOF_rr : IRR_a<0x4B, 0x16, "utof">, Requires<[HasV130_UP]>;
1923+ def UTOF_rr : IRR_a_n<0x4B, 0x16, 0x01, "utof">, Requires<[HasV130_UP]>;
1924+ def UTODF_rr : IRR_a_n<0x4B, 0x16, 0x02, "utodf", RE, RD>, Requires<[HasV180_UP]>;
1925+ def LTODF_rr : IRR_a_n<0x4B, 0x26, 0x02, "ltodf", RE, RE>, Requires<[HasV180_UP]>;
1926+ def ULTODF_rr : IRR_a_n<0x4B, 0x27, 0x02, "ultodf", RE, RE>, Requires<[HasV180_UP]>;
1927+ def DFTOF_rr : IRR_a_n<0x4B, 0x28, 0x02, "dftof", RD, RE>, Requires<[HasV180_UP]>;
1928+ def FTODF_rr : IRR_a_n<0x4B, 0x29, 0x02, "ftodf", RE, RD>, Requires<[HasV180_UP]>;
0 commit comments