TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
/* { dg-final { scan-assembler-times {vadd.vx} 2 } } */
-/* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vsub.vx} 2 } } */
/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vand.vx} 1 } } */
/* { dg-final { scan-assembler-times {vor.vx} 1 } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
+/* { dg-final { scan-assembler-not {vwsubu.wx} } } */
TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
/* { dg-final { scan-assembler-times {vadd.vx} 2 } } */
-/* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vsub.vx} 2 } } */
/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vand.vx} 1 } } */
/* { dg-final { scan-assembler-times {vor.vx} 1 } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
+/* { dg-final { scan-assembler-not {vwsubu.wx} } } */
/* { dg-final { scan-assembler-times {vwsubu.vx} 1 } } */
/* { dg-final { scan-assembler-times {vwmulu.vx} 1 } } */
/* { dg-final { scan-assembler-times {vwaddu.wx} 1 } } */
+/* { dg-final { scan-assembler-times {vwsubu.wx} 1 } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
+/* { dg-final { scan-assembler-not {vwsubu.wx} } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
+/* { dg-final { scan-assembler-not {vwsubu.wx} } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
+/* { dg-final { scan-assembler-not {vwsubu.wx} } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
+/* { dg-final { scan-assembler-not {vwsubu.wx} } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
+/* { dg-final { scan-assembler-not {vwsubu.wx} } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
+/* { dg-final { scan-assembler-not {vwsubu.wx} } } */
DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, -, sub) \
DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, *, mul) \
DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, +, add) \
+ DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, -, sub) \
#endif
DEF_BINARY_WIDEN_STRUCT_1(WT, NT, NAME)
DEF_BINARY_WIDEN_STRUCT_1_WRAP(uint64_t, uint32_t, add)
+DEF_BINARY_WIDEN_STRUCT_1_WRAP(uint64_t, uint32_t, sub)
DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, add)[] = {
{
},
};
+DEF_BINARY_WIDEN_STRUCT_1_DECL_WRAP(uint64_t, uint32_t, sub)[] = {
+ {
+ /* vs2 */
+ {
+ 2147483648, 2147483648, 2147483648, 2147483648,
+ 2147483647, 2147483647, 2147483647, 2147483647,
+ 4294967294, 4294967294, 4294967294, 4294967294,
+ 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull,
+ },
+ /* rs1 */
+ 2147483647,
+ /* expect */
+ {
+ 1, 1, 1, 1,
+ 0, 0, 0, 0,
+ 2147483647, 2147483647, 2147483647, 2147483647,
+ 2147483649, 2147483649, 2147483649, 2147483649,
+ },
+ },
+ {
+ /* vs2 */
+ {
+ 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull,
+ 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull,
+ 8589934590ull, 8589934590ull, 8589934590ull, 8589934590ull,
+ 8589934591ull, 8589934591ull, 8589934591ull, 8589934591ull,
+ },
+ /* rs1 */
+ 4294967295,
+ /* expect */
+ {
+ 1, 1, 1, 1,
+ 0, 0, 0, 0,
+ 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull,
+ 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull,
+ },
+ },
+};
+
#endif
--- /dev/null
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_widen.h"
+#include "vx_widen_data.h"
+
+#define WT uint64_t
+#define NT uint32_t
+#define NAME sub
+#define TEST_DATA DEF_BINARY_WIDEN_STRUCT_1_VAR_WRAP(WT, NT, NAME)
+#define DATA_TYPE DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME)
+
+DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, -, NAME)
+
+#define TEST_RUN(WT, NT, NAME, vd, vs2, rs1, N) \
+ RUN_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, NAME, vd, vs2, rs1, N)
+
+#include "vx_widen_wx_run.h"