|
@@ -944,13 +944,6 @@ def VCVT_F64 : SInst<"vcvt_f64", "Fd", "lUlQlQUl">;
|
|
|
def VCVT_HIGH_F64_F32 : SOpInst<"vcvt_high_f64", "wj", "f", OP_VCVT_EX_HI_F64>;
|
|
|
def VCVTX_F32_F64 : SInst<"vcvtx_f32", "fj", "d">;
|
|
|
def VCVTX_HIGH_F32_F64 : SOpInst<"vcvtx_high_f32", "qfj", "d", OP_VCVTX_HI>;
|
|
|
-def FRINTN : SInst<"vrndn", "dd", "fdQfQd">;
|
|
|
-def FRINTA : SInst<"vrnda", "dd", "fdQfQd">;
|
|
|
-def FRINTP : SInst<"vrndp", "dd", "fdQfQd">;
|
|
|
-def FRINTM : SInst<"vrndm", "dd", "fdQfQd">;
|
|
|
-def FRINTX : SInst<"vrndx", "dd", "fdQfQd">;
|
|
|
-def FRINTZ : SInst<"vrnd", "dd", "fdQfQd">;
|
|
|
-def FRINTI : SInst<"vrndi", "dd", "fdQfQd">;
|
|
|
def VCVT_S64 : SInst<"vcvt_s64", "xd", "dQd">;
|
|
|
def VCVT_U64 : SInst<"vcvt_u64", "ud", "dQd">;
|
|
|
def FRECPE : SInst<"vrecpe", "dd", "dQd">;
|
|
@@ -982,11 +975,6 @@ def CMLT : SInst<"vcltz", "ud", "csilfdQcQsQiQlQfQd">;
|
|
|
def MAX : SInst<"vmax", "ddd", "dQd">;
|
|
|
def MIN : SInst<"vmin", "ddd", "dQd">;
|
|
|
|
|
|
-////////////////////////////////////////////////////////////////////////////////
|
|
|
-// MaxNum/MinNum Floating Point
|
|
|
-def FMAXNM : SInst<"vmaxnm", "ddd", "fdQfQd">;
|
|
|
-def FMINNM : SInst<"vminnm", "ddd", "fdQfQd">;
|
|
|
-
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
// Pairwise Max/Min
|
|
|
def MAXP : SInst<"vpmax", "ddd", "QcQsQiQUcQUsQUiQfQd">;
|
|
@@ -1222,6 +1210,41 @@ def FCVTAS_S64 : SInst<"vcvta_s64", "xd", "dQd">;
|
|
|
def FCVTAU_S64 : SInst<"vcvta_u64", "ud", "dQd">;
|
|
|
}
|
|
|
|
|
|
+////////////////////////////////////////////////////////////////////////////////
|
|
|
+// Round to Integral
|
|
|
+
|
|
|
+let ArchGuard = "__ARM_ARCH >= 8" in {
|
|
|
+def FRINTN_S32 : SInst<"vrndn", "dd", "fQf">;
|
|
|
+def FRINTA_S32 : SInst<"vrnda", "dd", "fQf">;
|
|
|
+def FRINTP_S32 : SInst<"vrndp", "dd", "fQf">;
|
|
|
+def FRINTM_S32 : SInst<"vrndm", "dd", "fQf">;
|
|
|
+def FRINTX_S32 : SInst<"vrndx", "dd", "fQf">;
|
|
|
+def FRINTZ_S32 : SInst<"vrnd", "dd", "fQf">;
|
|
|
+}
|
|
|
+
|
|
|
+let ArchGuard = "__ARM_ARCH >= 8 && defined(__aarch64__)" in {
|
|
|
+def FRINTN_S64 : SInst<"vrndn", "dd", "dQd">;
|
|
|
+def FRINTA_S64 : SInst<"vrnda", "dd", "dQd">;
|
|
|
+def FRINTP_S64 : SInst<"vrndp", "dd", "dQd">;
|
|
|
+def FRINTM_S64 : SInst<"vrndm", "dd", "dQd">;
|
|
|
+def FRINTX_S64 : SInst<"vrndx", "dd", "dQd">;
|
|
|
+def FRINTZ_S64 : SInst<"vrnd", "dd", "dQd">;
|
|
|
+def FRINTI_S64 : SInst<"vrndi", "dd", "fdQfQd">;
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////////////////
|
|
|
+// MaxNum/MinNum Floating Point
|
|
|
+
|
|
|
+let ArchGuard = "__ARM_ARCH >= 8" in {
|
|
|
+def FMAXNM_S32 : SInst<"vmaxnm", "ddd", "fQf">;
|
|
|
+def FMINNM_S32 : SInst<"vminnm", "ddd", "fQf">;
|
|
|
+}
|
|
|
+
|
|
|
+let ArchGuard = "__ARM_ARCH >= 8 && defined(__aarch64__)" in {
|
|
|
+def FMAXNM_S64 : SInst<"vmaxnm", "ddd", "dQd">;
|
|
|
+def FMINNM_S64 : SInst<"vminnm", "ddd", "dQd">;
|
|
|
+}
|
|
|
+
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
// Permutation
|
|
|
def VTRN1 : SOpInst<"vtrn1", "ddd",
|