This patch fixes several more FAILs that would only show in 32-bit runs.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/autovec/binop/vmul-zvfh-run.c: Adjust.
* gcc.target/riscv/rvv/autovec/binop/vsub-zvfh-run.c: Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_narrow_shift_run-3.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/pr111401.c: Ditto.
* gcc.target/riscv/rvv/autovec/conversions/vfcvt-itof-zvfh-run.c:
Ditto.
* gcc.target/riscv/rvv/autovec/conversions/vfcvt_rtz-zvfh-run.c:
Ditto.
* gcc.target/riscv/rvv/autovec/conversions/vfncvt-ftoi-zvfh-run.c:
Ditto.
* gcc.target/riscv/rvv/autovec/conversions/vfncvt-itof-template.h:
Ditto.
* gcc.target/riscv/rvv/autovec/conversions/vfncvt-itof-zvfh-run.c:
Ditto.
* gcc.target/riscv/rvv/autovec/conversions/vfncvt-zvfh-run.c:
Ditto.
* gcc.target/riscv/rvv/autovec/conversions/vfwcvt-ftoi-zvfh-run.c:
Ditto.
* gcc.target/riscv/rvv/autovec/conversions/vfwcvt-itof-zvfh-run.c:
Ditto.
* gcc.target/riscv/rvv/autovec/conversions/vfwcvt-zvfh-run.c:
Ditto.
* gcc.target/riscv/rvv/autovec/slp-mask-run-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-1.c:
Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-10.c:
Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-11.c:
Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-12.c:
Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-2.c:
Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-3.c:
Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-4.c:
Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-5.c:
Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-6.c:
Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-7.c:
Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-8.c:
Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-9.c:
Ditto.
* gcc.target/riscv/rvv/autovec/unop/vfsqrt-run.c: Ditto.
* gcc.target/riscv/rvv/autovec/unop/vfsqrt-rv32gcv.c: Ditto.
* gcc.target/riscv/rvv/autovec/unop/vfsqrt-rv64gcv.c: Ditto.
* gcc.target/riscv/rvv/autovec/unop/vfsqrt-template.h: Ditto.
* gcc.target/riscv/rvv/autovec/unop/vfsqrt-zvfh-run.c: Ditto.
* gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-zvfh-run.c:
Ditto.
* gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-zvfh-run.c:
Ditto.
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_zvfh } } } */
/* { dg-additional-options "-std=c99 -fno-vect-cost-model --param=riscv-autovec-preference=fixed-vlmax -ffast-math" } */
#include "vmul-template.h"
#define SZ 512
-#define RUN(TYPE,VAL) \
- TYPE a##TYPE[SZ]; \
- TYPE b##TYPE[SZ]; \
- for (int i = 0; i < SZ; i++) \
- { \
- a##TYPE[i] = 2; \
- b##TYPE[i] = VAL; \
- } \
- vadd_##TYPE (a##TYPE, a##TYPE, b##TYPE, SZ); \
- for (int i = 0; i < SZ; i++) \
+#define RUN(TYPE, VAL) \
+ TYPE a##TYPE[SZ]; \
+ TYPE b##TYPE[SZ]; \
+ for (int i = 0; i < SZ; i++) \
+ { \
+ a##TYPE[i] = 2; \
+ b##TYPE[i] = VAL; \
+ } \
+ vmul_##TYPE (a##TYPE, a##TYPE, b##TYPE, SZ); \
+ for (int i = 0; i < SZ; i++) \
assert (a##TYPE[i] == 2 * VAL);
-#define RUN2(TYPE,VAL) \
- TYPE as##TYPE[SZ]; \
- for (int i = 0; i < SZ; i++) \
- as##TYPE[i] = 3; \
- vadds_##TYPE (as##TYPE, as##TYPE, VAL, SZ); \
- for (int i = 0; i < SZ; i++) \
+#define RUN2(TYPE, VAL) \
+ TYPE as##TYPE[SZ]; \
+ for (int i = 0; i < SZ; i++) \
+ as##TYPE[i] = 3; \
+ vmuls_##TYPE (as##TYPE, as##TYPE, VAL, SZ); \
+ for (int i = 0; i < SZ; i++) \
assert (as##TYPE[i] == 3 * VAL);
#define RUN_ALL() \
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
/* { dg-additional-options "-std=c99 -fno-vect-cost-model --param=riscv-autovec-preference=fixed-vlmax -ffast-math" } */
#include "vsub-template.h"
#define SZ 512
-#define RUN(TYPE,VAL) \
- TYPE a##TYPE[SZ]; \
- TYPE b##TYPE[SZ]; \
- for (int i = 0; i < SZ; i++) \
- { \
- a##TYPE[i] = 999; \
- b##TYPE[i] = VAL; \
- } \
- vsub_##TYPE (a##TYPE, a##TYPE, b##TYPE, SZ); \
- for (int i = 0; i < SZ; i++) \
- assert (a##TYPE[i] == 999 - VAL);
-
-#define RUN2(TYPE,VAL) \
- TYPE as##TYPE[SZ]; \
- for (int i = 0; i < SZ; i++) \
- as##TYPE[i] = 999; \
- vsubs_##TYPE (as##TYPE, as##TYPE, VAL, SZ); \
- for (int i = 0; i < SZ; i++) \
- assert (as##TYPE[i] == 999 - VAL);
-
-#define RUN3(TYPE) \
- TYPE as2##TYPE[SZ]; \
- for (int i = 0; i < SZ; i++) \
- as2##TYPE[i] = i * 33 - 779; \
- vsubi_##TYPE (as2##TYPE, as2##TYPE, SZ); \
- for (int i = 0; i < SZ; i++) \
- assert (as2##TYPE[i] == (TYPE)(-16 - (i * 33 - 779)));
-
-#define RUN4(TYPE) \
- TYPE as3##TYPE[SZ]; \
- for (int i = 0; i < SZ; i++) \
- as3##TYPE[i] = i * -17 + 667; \
- vsubi2_##TYPE (as3##TYPE, as3##TYPE, SZ); \
- for (int i = 0; i < SZ; i++) \
- assert (as3##TYPE[i] == (TYPE)(15 - (i * -17 + 667)));
+#define RUN(TYPE, VAL) \
+ TYPE a##TYPE[SZ]; \
+ TYPE b##TYPE[SZ]; \
+ for (int i = 0; i < SZ; i++) \
+ { \
+ a##TYPE[i] = 123; \
+ b##TYPE[i] = VAL; \
+ } \
+ vsub_##TYPE (a##TYPE, a##TYPE, b##TYPE, SZ); \
+ for (int i = 0; i < SZ; i++) \
+ assert (a##TYPE[i] == 123 - VAL);
+
+#define RUN2(TYPE, VAL) \
+ TYPE as##TYPE[SZ]; \
+ for (int i = 0; i < SZ; i++) \
+ as##TYPE[i] = 234; \
+ vsubs_##TYPE (as##TYPE, as##TYPE, VAL, SZ); \
+ for (int i = 0; i < SZ; i++) \
+ assert (as##TYPE[i] == 234 - VAL);
+
+#define RUN3(TYPE) \
+ TYPE as2##TYPE[SZ]; \
+ for (int i = 0; i < SZ; i++) \
+ as2##TYPE[i] = i * 33 - 779; \
+ vsubi_##TYPE (as2##TYPE, as2##TYPE, SZ); \
+ for (int i = 0; i < SZ; i++) \
+ assert (as2##TYPE[i] == (TYPE) (-16 - (i * 33 - 779)));
+
+#define RUN4(TYPE) \
+ TYPE as3##TYPE[SZ]; \
+ for (int i = 0; i < SZ; i++) \
+ as3##TYPE[i] = i * -3 + 267; \
+ vsubi2_##TYPE (as3##TYPE, as3##TYPE, SZ); \
+ for (int i = 0; i < SZ; i++) \
+ assert (as3##TYPE[i] == (TYPE) (15 - (i * -3 + 267)));
#define RUN_ALL() \
RUN(_Float16, 4) \
#include "cond_narrow_shift-3.c"
-#define N 99
+#define N 61
#define TEST_LOOP(TYPE1, TYPE2) \
{ \
/* { dg-do run { target { riscv_v } } } */
-/* { dg-additional-options "-march=rv64gcv -mabi=lp64d --param riscv-autovec-preference=scalable -fdump-tree-vect-details" } */
+/* { dg-additional-options "--param riscv-autovec-preference=scalable -fdump-tree-vect-details" } */
double
__attribute__ ((noipa))
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
-/* { dg-additional-options "-std=c99 -march=rv64gcv_zvfh -mabi=lp64d -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
+/* { dg-additional-options "-std=c99 -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
#include "vfcvt-itof-template.h"
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
-/* { dg-additional-options "-std=c99 -march=rv64gcv_zvfh -mabi=lp64d -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
+/* { dg-additional-options "-std=c99 -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
#include "vfcvt_rtz-template.h"
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
-/* { dg-additional-options "-std=c99 -march=rv64gcv_zvfh -mabi=lp64d -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
+/* { dg-additional-options "-std=c99 -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
#include "vfncvt-ftoi-template.h"
TYPE1 src##TYPE1##TYPE2##NUM[NUM]; \
TYPE2 dst##TYPE1##TYPE2##NUM[NUM]; \
for (int i = 0; i < NUM; i++) \
- { \
- src##TYPE1##TYPE2##NUM[i] = i * -3.1315926 - 8.947289; \
- } \
- vfcvt_##TYPE1##TYPE2 (dst##TYPE1##TYPE2##NUM, src##TYPE1##TYPE2##NUM, NUM); \
+ src##TYPE1##TYPE2##NUM[i] = i * -3.1315926 - 8.947289; \
+ vfncvt_##TYPE1##TYPE2 (dst##TYPE1##TYPE2##NUM, src##TYPE1##TYPE2##NUM, NUM); \
for (int i = 0; i < NUM; i++) \
if (dst##TYPE1##TYPE2##NUM[i] != (TYPE2) src##TYPE1##TYPE2##NUM[i]) \
__builtin_abort ();
TYPE1 src##TYPE1##TYPE2##NUM[NUM]; \
TYPE2 dst##TYPE1##TYPE2##NUM[NUM]; \
for (int i = 0; i < NUM; i++) \
- { \
- src##TYPE1##TYPE2##NUM[i] = i * 3.1315926 + 8.947289; \
- } \
- vfcvt_##TYPE1##TYPE2 (dst##TYPE1##TYPE2##NUM, src##TYPE1##TYPE2##NUM, NUM); \
+ src##TYPE1##TYPE2##NUM[i] = i * 3.1315926 + 8.947289; \
+ vfncvt_##TYPE1##TYPE2 (dst##TYPE1##TYPE2##NUM, src##TYPE1##TYPE2##NUM, NUM); \
for (int i = 0; i < NUM; i++) \
if (dst##TYPE1##TYPE2##NUM[i] != (TYPE2) src##TYPE1##TYPE2##NUM[i]) \
__builtin_abort ();
RUN (_Float16, int8_t, 3)
RUN (_Float16, int8_t, 4)
RUN (_Float16, int8_t, 13)
- RUN (_Float16, int8_t, 40)
+ RUN (_Float16, int8_t, 29)
RUN2 (_Float16, uint8_t, 1)
RUN2 (_Float16, uint8_t, 8)
#include <stdint-gcc.h>
-#define TEST(TYPE1, TYPE2) \
- __attribute__ ((noipa)) \
- void vfncvt_##TYPE1##TYPE2 (TYPE2 *restrict dst, \
- TYPE1 *restrict a, int n) \
- { \
- for (int i = 0; i < n; i++) \
- dst[i] = (TYPE2) (a[i] & 0x7ffffffful); \
+#define TEST(TYPE1, TYPE2) \
+ __attribute__ ((noipa)) void vfncvt_##TYPE1##TYPE2 (TYPE2 *restrict dst, \
+ TYPE1 *restrict a, \
+ int n) \
+ { \
+ for (int i = 0; i < n; i++) \
+ dst[i] = (TYPE2) (a[i] & 0x7ffffffful); \
}
+#define TESTS(TYPE1, TYPE2) \
+ __attribute__ ((noipa)) void vfncvts_##TYPE1##TYPE2 (TYPE2 *restrict dst, \
+ TYPE1 *restrict a, \
+ int n) \
+ { \
+ for (int i = 0; i < n; i++) \
+ dst[i] = (TYPE2) (a[i]); \
+ }
-#define TEST_ALL() \
- TEST (int64_t, float) \
- TEST (uint64_t, float) \
- TEST (int64_t, _Float16) \
- TEST (uint64_t, _Float16) \
- TEST (int32_t, _Float16) \
- TEST (uint32_t, _Float16) \
+#define TEST_ALL() \
+ TEST (int64_t, float) \
+ TEST (uint64_t, float) \
+ TEST (int64_t, _Float16) \
+ TEST (uint64_t, _Float16) \
+ TEST (int32_t, _Float16) \
+ TEST (uint32_t, _Float16) \
TEST_ALL ()
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
-/* { dg-additional-options "-std=c99 -march=rv64gcv_zvfh -mabi=lp64d -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
+/* { dg-do run { target { riscv_zvfh && riscv_zfh} } } */
+/* { dg-additional-options "-std=c99 -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
#include "vfncvt-itof-template.h"
+#include <math.h>
+
+TESTS (int64_t, _Float16)
+TESTS (int32_t, _Float16)
+
+#define EPS 1e-5
+
#define RUN(TYPE1, TYPE2, NUM) \
TYPE1 src##TYPE1##TYPE2##NUM[NUM]; \
TYPE2 dst##TYPE1##TYPE2##NUM[NUM]; \
for (int i = 0; i < NUM; i++) \
- { \
- src##TYPE1##TYPE2##NUM[i] = i * -3 - 832; \
- } \
- vfncvt_##TYPE1##TYPE2 (dst##TYPE1##TYPE2##NUM, src##TYPE1##TYPE2##NUM, NUM); \
+ src##TYPE1##TYPE2##NUM[i] = i * -3 + 833; \
+ vfncvts_##TYPE1##TYPE2 (dst##TYPE1##TYPE2##NUM, src##TYPE1##TYPE2##NUM, \
+ NUM); \
for (int i = 0; i < NUM; i++) \
- if (dst##TYPE1##TYPE2##NUM[i] != (TYPE2) src##TYPE1##TYPE2##NUM[i]) \
+ if (__builtin_fabsf16 (dst##TYPE1##TYPE2##NUM[i] \
+ - (TYPE2) src##TYPE1##TYPE2##NUM[i]) \
+ > EPS) \
__builtin_abort ();
#define RUN2(TYPE1, TYPE2, NUM) \
TYPE1 src##TYPE1##TYPE2##NUM[NUM]; \
TYPE2 dst##TYPE1##TYPE2##NUM[NUM]; \
for (int i = 0; i < NUM; i++) \
- { \
- src##TYPE1##TYPE2##NUM[i] = i * 3 + 892; \
- } \
+ src##TYPE1##TYPE2##NUM[i] = i * 3 + 892; \
vfncvt_##TYPE1##TYPE2 (dst##TYPE1##TYPE2##NUM, src##TYPE1##TYPE2##NUM, NUM); \
for (int i = 0; i < NUM; i++) \
- if (dst##TYPE1##TYPE2##NUM[i] != (TYPE2) src##TYPE1##TYPE2##NUM[i]) \
+ if (__builtin_fabsf16 (dst##TYPE1##TYPE2##NUM[i] \
+ - (TYPE2) src##TYPE1##TYPE2##NUM[i]) \
+ > EPS) \
__builtin_abort ();
-
int
main ()
{
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
-/* { dg-additional-options "-std=c99 -march=rv64gcv_zvfh -mabi=lp64d -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
+/* { dg-additional-options "-std=c99 -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
#include "vfncvt-template.h"
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
-/* { dg-additional-options "-std=c99 -march=rv64gcv_zvfh -mabi=lp64d -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
+/* { dg-additional-options "-std=c99 -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
-#include "vfcvt_rtz-template.h"
+#include "vfwcvt-ftoi-template.h"
#define RUN(TYPE1, TYPE2, NUM) \
TYPE1 src##TYPE1##TYPE2##NUM[NUM]; \
{ \
src##TYPE1##TYPE2##NUM[i] = i * -3.1315926 - 832.947289; \
} \
- vfcvt_##TYPE1##TYPE2 (dst##TYPE1##TYPE2##NUM, src##TYPE1##TYPE2##NUM, NUM); \
+ vfwcvt_##TYPE1##TYPE2 (dst##TYPE1##TYPE2##NUM, src##TYPE1##TYPE2##NUM, NUM); \
for (int i = 0; i < NUM; i++) \
if (dst##TYPE1##TYPE2##NUM[i] != (TYPE2) src##TYPE1##TYPE2##NUM[i]) \
__builtin_abort ();
{ \
src##TYPE1##TYPE2##NUM[i] = i * 3.1315926 + 832.947289; \
} \
- vfcvt_##TYPE1##TYPE2 (dst##TYPE1##TYPE2##NUM, src##TYPE1##TYPE2##NUM, NUM); \
+ vfwcvt_##TYPE1##TYPE2 (dst##TYPE1##TYPE2##NUM, src##TYPE1##TYPE2##NUM, NUM); \
for (int i = 0; i < NUM; i++) \
if (dst##TYPE1##TYPE2##NUM[i] != (TYPE2) src##TYPE1##TYPE2##NUM[i]) \
__builtin_abort ();
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
-/* { dg-additional-options "-std=c99 -march=rv64gcv_zvfh -mabi=lp64d -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
+/* { dg-additional-options "-std=c99 -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
#include "vfwcvt-itof-template.h"
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
-/* { dg-additional-options "-std=c99 -march=rv64gcv_zvfh -mabi=lp64d -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
+/* { dg-additional-options "-std=c99 -fno-vect-cost-model --param=riscv-autovec-preference=scalable" } */
#include "vfwcvt-template.h"
#define SZ 512
#define EPS 1e-4
-#define RUN(TYPE1,TYPE2) \
- TYPE1 src##TYPE1##TYPE2[SZ]; \
- TYPE2 dst##TYPE1##TYPE2[SZ]; \
- for (int i = 0; i < SZ; i++) \
- { \
- src##TYPE1##TYPE2[i] = (i & 1) ? -i : i; \
- src##TYPE1##TYPE2[i] *= 0.0003141592; \
- dst##TYPE1##TYPE2[i] = -1; \
- } \
- vfwcvt_##TYPE1##TYPE2 (dst##TYPE1##TYPE2, \
- src##TYPE1##TYPE2, SZ); \
- for (int i = 0; i < SZ; i++) \
- assert (__builtin_fabs (dst##TYPE1##TYPE2[i] \
- - ((i & 1) ? -i : i) * 0.0003141592) < EPS); \
-
-
-#define RUN_ALL() \
- RUN(_Float16, float) \
- RUN(_Float16, double) \
+#define RUN(TYPE1, TYPE2) \
+ TYPE1 src##TYPE1##TYPE2[SZ]; \
+ TYPE2 dst##TYPE1##TYPE2[SZ]; \
+ for (int i = 0; i < SZ; i++) \
+ { \
+ src##TYPE1##TYPE2[i] = (i & 1) ? -i : i; \
+ src##TYPE1##TYPE2[i] *= 0.0003141592; \
+ dst##TYPE1##TYPE2[i] = -1; \
+ } \
+ vfwcvt_##TYPE1##TYPE2 (dst##TYPE1##TYPE2, src##TYPE1##TYPE2, SZ); \
+ for (int i = 0; i < SZ; i++) \
+ assert (__builtin_fabsf16 (dst##TYPE1##TYPE2[i] \
+ - ((i & 1) ? -i : i) * 0.0003141592) \
+ < EPS);
+#define RUN_ALL() \
+ RUN (_Float16, float) \
+ RUN (_Float16, double)
int main ()
{
RUN_ALL()
/* { dg-do run { target { riscv_v } } } */
-/* { dg-additional-options "-std=gnu99 -O3 -march=rv64gcv -mabi=lp64d --param=riscv-autovec-preference=scalable" } */
+/* { dg-additional-options "-std=gnu99 -O3 --param=riscv-autovec-preference=scalable" } */
#include <malloc.h>
#include <stdio.h>
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
/* { dg-additional-options "--param=riscv-autovec-preference=scalable -ffast-math" } */
#include "ternop-1.c"
TEST_LOOP (_Float16, 16)
TEST_LOOP (_Float16, 77)
TEST_LOOP (_Float16, 128)
- TEST_LOOP (_Float16, 795)
+ TEST_LOOP (_Float16, 299)
return 0;
}
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
/* { dg-additional-options "--param=riscv-autovec-preference=scalable -ffast-math" } */
#include "ternop-10.c"
TEST_LOOP (_Float16, 16)
TEST_LOOP (_Float16, 77)
TEST_LOOP (_Float16, 128)
- TEST_LOOP (_Float16, 795)
+ TEST_LOOP (_Float16, 299)
return 0;
}
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
/* { dg-additional-options "--param=riscv-autovec-preference=scalable -ffast-math" } */
#include "ternop-11.c"
TYPE array8_##NUM[NUM] = {}; \
for (int i = 0; i < NUM; ++i) \
{ \
- array1_##NUM[i] = (i & 1) + 5; \
- array2_##NUM[i] = i - NUM / 3; \
- array3_##NUM[i] = NUM - NUM / 3 - i; \
- array6_##NUM[i] = NUM - NUM / 3 - i; \
- array4_##NUM[i] = NUM - NUM / 2 + i; \
- array7_##NUM[i] = NUM - NUM / 2 + i; \
- array5_##NUM[i] = NUM + i * 7; \
- array8_##NUM[i] = NUM + i * 7; \
- asm volatile("" ::: "memory"); \
+ int val = NUM / 18.3; \
+ int val2 = i / 18.7; \
+ array1_##NUM[i] = (i & 1) + 5; \
+ array2_##NUM[i] = val2 - val / 3; \
+ array3_##NUM[i] = val - val / 3 - val2; \
+ array6_##NUM[i] = val - val / 3 - val2; \
+ array4_##NUM[i] = val - val / 2 + val2; \
+ array7_##NUM[i] = val - val / 2 + val2; \
+ array5_##NUM[i] = val + val2; \
+ array8_##NUM[i] = val + val2; \
+ asm volatile ("" ::: "memory"); \
} \
ternop_##TYPE (array3_##NUM, array4_##NUM, array5_##NUM, array1_##NUM, \
- array2_##NUM, NUM); \
+ array2_##NUM, NUM); \
for (int i = 0; i < NUM; i++) \
{ \
- array6_##NUM[i] \
- = (TYPE) (-(array1_##NUM[i] * array2_##NUM[i]) - array6_##NUM[i]); \
- if (array3_##NUM[i] != array6_##NUM[i]) \
- __builtin_abort (); \
- array7_##NUM[i] \
- = (TYPE) (array1_##NUM[i] * array6_##NUM[i] - array7_##NUM[i]); \
- if (array4_##NUM[i] != array7_##NUM[i]) \
- __builtin_abort (); \
- array8_##NUM[i] \
- = (TYPE) (array2_##NUM[i] * array7_##NUM[i] - array8_##NUM[i]); \
- if (array5_##NUM[i] != array8_##NUM[i]) \
- __builtin_abort (); \
+ array6_##NUM[i] \
+ = (TYPE) (-(array1_##NUM[i] * array2_##NUM[i]) - array6_##NUM[i]); \
+ if (array3_##NUM[i] != array6_##NUM[i]) \
+ __builtin_abort (); \
+ array7_##NUM[i] \
+ = (TYPE) (array1_##NUM[i] * array6_##NUM[i] - array7_##NUM[i]); \
+ if (array4_##NUM[i] != array7_##NUM[i]) \
+ __builtin_abort (); \
+ array8_##NUM[i] \
+ = (TYPE) (array2_##NUM[i] * array7_##NUM[i] - array8_##NUM[i]); \
+ if (array5_##NUM[i] != array8_##NUM[i]) \
+ __builtin_abort (); \
} \
}
TEST_LOOP (_Float16, 16)
TEST_LOOP (_Float16, 77)
TEST_LOOP (_Float16, 128)
- TEST_LOOP (_Float16, 795)
+ TEST_LOOP (_Float16, 299)
return 0;
}
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
/* { dg-additional-options "--param=riscv-autovec-preference=scalable -ffast-math" } */
#include "ternop-12.c"
TYPE array8_##NUM[NUM] = {}; \
for (int i = 0; i < NUM; ++i) \
{ \
- array1_##NUM[i] = (i & 1) + 5; \
- array2_##NUM[i] = i - NUM / 3; \
- array3_##NUM[i] = NUM - NUM / 3 - i; \
- array6_##NUM[i] = NUM - NUM / 3 - i; \
- array4_##NUM[i] = NUM - NUM / 2 + i; \
- array7_##NUM[i] = NUM - NUM / 2 + i; \
- array5_##NUM[i] = NUM + i * 7; \
- array8_##NUM[i] = NUM + i * 7; \
- asm volatile("" ::: "memory"); \
+ int val = NUM / 18.3; \
+ int val2 = i / 18.7; \
+ array1_##NUM[i] = (i & 1) + 5; \
+ array2_##NUM[i] = val2 - val / 3; \
+ array3_##NUM[i] = val - val / 3 - val2; \
+ array6_##NUM[i] = val - val / 3 - val2; \
+ array4_##NUM[i] = val - val / 2 + val2; \
+ array7_##NUM[i] = val - val / 2 + val2; \
+ array5_##NUM[i] = val + val2; \
+ array8_##NUM[i] = val + val2; \
+ asm volatile ("" ::: "memory"); \
} \
ternop_##TYPE (array3_##NUM, array4_##NUM, array5_##NUM, array1_##NUM, \
- array2_##NUM, NUM); \
+ array2_##NUM, NUM); \
for (int i = 0; i < NUM; i++) \
{ \
- array6_##NUM[i] \
- = (TYPE) (-(array1_##NUM[i] * array2_##NUM[i]) - array7_##NUM[i]); \
- if (array3_##NUM[i] != array6_##NUM[i]) \
- __builtin_abort (); \
- array7_##NUM[i] \
- = (TYPE) (array1_##NUM[i] * array6_##NUM[i] - array7_##NUM[i]); \
- if (array4_##NUM[i] != array7_##NUM[i]) \
- __builtin_abort (); \
- array8_##NUM[i] \
- = (TYPE) (array2_##NUM[i] * array7_##NUM[i] - array8_##NUM[i]); \
- if (array5_##NUM[i] != array8_##NUM[i]) \
- __builtin_abort (); \
+ array6_##NUM[i] \
+ = (TYPE) (-(array1_##NUM[i] * array2_##NUM[i]) - array7_##NUM[i]); \
+ if (array3_##NUM[i] != array6_##NUM[i]) \
+ __builtin_abort (); \
+ array7_##NUM[i] \
+ = (TYPE) (array1_##NUM[i] * array6_##NUM[i] - array7_##NUM[i]); \
+ if (array4_##NUM[i] != array7_##NUM[i]) \
+ __builtin_abort (); \
+ array8_##NUM[i] \
+ = (TYPE) (array2_##NUM[i] * array7_##NUM[i] - array8_##NUM[i]); \
+ if (array5_##NUM[i] != array8_##NUM[i]) \
+ __builtin_abort (); \
} \
}
TEST_LOOP (_Float16, 16)
TEST_LOOP (_Float16, 77)
TEST_LOOP (_Float16, 128)
- TEST_LOOP (_Float16, 795)
return 0;
}
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
/* { dg-additional-options "--param=riscv-autovec-preference=scalable -ffast-math" } */
#include "ternop-2.c"
TYPE array8_##NUM[NUM] = {}; \
for (int i = 0; i < NUM; ++i) \
{ \
+ int val = NUM / 18.3; \
+ int val2 = i / 18.7; \
array1_##NUM[i] = (i & 1) + 5; \
- array2_##NUM[i] = i - NUM / 3; \
- array3_##NUM[i] = NUM - NUM / 3 - i; \
- array6_##NUM[i] = NUM - NUM / 3 - i; \
- array4_##NUM[i] = NUM - NUM / 2 + i; \
- array7_##NUM[i] = NUM - NUM / 2 + i; \
- array5_##NUM[i] = NUM + i * 7; \
- array8_##NUM[i] = NUM + i * 7; \
- asm volatile("" ::: "memory"); \
+ array2_##NUM[i] = val2 - val / 3; \
+ array3_##NUM[i] = val - val / 3 - val2; \
+ array6_##NUM[i] = val - val / 3 - val2; \
+ array4_##NUM[i] = val - val / 2 + val2; \
+ array7_##NUM[i] = val - val / 2 + val2; \
+ array5_##NUM[i] = val + val2; \
+ array8_##NUM[i] = val + val2; \
+ asm volatile ("" ::: "memory"); \
} \
ternop_##TYPE (array3_##NUM, array4_##NUM, array5_##NUM, array1_##NUM, \
array2_##NUM, NUM); \
{
TEST_LOOP (_Float16, 7)
TEST_LOOP (_Float16, 16)
- TEST_LOOP (_Float16, 77)
+ TEST_LOOP (_Float16, 94)
TEST_LOOP (_Float16, 128)
- TEST_LOOP (_Float16, 795)
+ TEST_LOOP (_Float16, 199)
return 0;
}
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
/* { dg-additional-options "--param=riscv-autovec-preference=scalable -ffast-math" } */
#include "ternop-3.c"
TYPE array8_##NUM[NUM] = {}; \
for (int i = 0; i < NUM; ++i) \
{ \
+ int val = NUM / 18.3; \
+ int val2 = i / 18.7; \
array1_##NUM[i] = (i & 1) + 5; \
- array2_##NUM[i] = i - NUM / 3; \
- array3_##NUM[i] = NUM - NUM / 3 - i; \
- array6_##NUM[i] = NUM - NUM / 3 - i; \
- array4_##NUM[i] = NUM - NUM / 2 + i; \
- array7_##NUM[i] = NUM - NUM / 2 + i; \
- array5_##NUM[i] = NUM + i * 7; \
- array8_##NUM[i] = NUM + i * 7; \
- asm volatile("" ::: "memory"); \
+ array2_##NUM[i] = val2 - val / 3; \
+ array3_##NUM[i] = val - val / 3 - val2; \
+ array6_##NUM[i] = val - val / 3 - val2; \
+ array4_##NUM[i] = val - val / 2 + val2; \
+ array7_##NUM[i] = val - val / 2 + val2; \
+ array5_##NUM[i] = val + val2; \
+ array8_##NUM[i] = val + val2; \
+ asm volatile ("" ::: "memory"); \
} \
ternop_##TYPE (array3_##NUM, array4_##NUM, array5_##NUM, array1_##NUM, \
array2_##NUM, NUM); \
TEST_LOOP (_Float16, 16)
TEST_LOOP (_Float16, 77)
TEST_LOOP (_Float16, 128)
- TEST_LOOP (_Float16, 795)
return 0;
}
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
/* { dg-additional-options "--param=riscv-autovec-preference=scalable -ffast-math" } */
#include "ternop-4.c"
TEST_LOOP (_Float16, 16)
TEST_LOOP (_Float16, 77)
TEST_LOOP (_Float16, 128)
- TEST_LOOP (_Float16, 795)
+ TEST_LOOP (_Float16, 299)
return 0;
}
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
/* { dg-additional-options "--param=riscv-autovec-preference=scalable -ffast-math" } */
#include "ternop-5.c"
TYPE array8_##NUM[NUM] = {}; \
for (int i = 0; i < NUM; ++i) \
{ \
- array1_##NUM[i] = (i & 1) + 5; \
- array2_##NUM[i] = i - NUM / 3; \
- array3_##NUM[i] = NUM - NUM / 3 - i; \
- array6_##NUM[i] = NUM - NUM / 3 - i; \
- array4_##NUM[i] = NUM - NUM / 2 + i; \
- array7_##NUM[i] = NUM - NUM / 2 + i; \
- array5_##NUM[i] = NUM + i * 7; \
- array8_##NUM[i] = NUM + i * 7; \
- asm volatile("" ::: "memory"); \
+ int val = NUM / 18.3; \
+ int val2 = i / 18.7; \
+ array1_##NUM[i] = (i & 1) + 5; \
+ array2_##NUM[i] = val2 - val / 3; \
+ array3_##NUM[i] = val - val / 3 - val2; \
+ array6_##NUM[i] = val - val / 3 - val2; \
+ array4_##NUM[i] = val - val / 2 + val2; \
+ array7_##NUM[i] = val - val / 2 + val2; \
+ array5_##NUM[i] = val + val2 * 2; \
+ array8_##NUM[i] = val + val2 * 2; \
+ asm volatile ("" ::: "memory"); \
} \
ternop_##TYPE (array3_##NUM, array4_##NUM, array5_##NUM, array1_##NUM, \
- array2_##NUM, NUM); \
+ array2_##NUM, NUM); \
for (int i = 0; i < NUM; i++) \
{ \
- array6_##NUM[i] \
- = (TYPE) (-(array1_##NUM[i] * array2_##NUM[i]) + array6_##NUM[i]); \
- if (array3_##NUM[i] != array6_##NUM[i]) \
- __builtin_abort (); \
- array7_##NUM[i] \
- = (TYPE) (array1_##NUM[i] * array6_##NUM[i] + array7_##NUM[i]); \
- if (array4_##NUM[i] != array7_##NUM[i]) \
- __builtin_abort (); \
- array8_##NUM[i] \
- = (TYPE) (array2_##NUM[i] * array7_##NUM[i] + array8_##NUM[i]); \
- if (array5_##NUM[i] != array8_##NUM[i]) \
- __builtin_abort (); \
+ array6_##NUM[i] \
+ = (TYPE) (-(array1_##NUM[i] * array2_##NUM[i]) + array6_##NUM[i]); \
+ if (array3_##NUM[i] != array6_##NUM[i]) \
+ __builtin_abort (); \
+ array7_##NUM[i] \
+ = (TYPE) (array1_##NUM[i] * array6_##NUM[i] + array7_##NUM[i]); \
+ if (array4_##NUM[i] != array7_##NUM[i]) \
+ __builtin_abort (); \
+ array8_##NUM[i] \
+ = (TYPE) (array2_##NUM[i] * array7_##NUM[i] + array8_##NUM[i]); \
+ if (array5_##NUM[i] != array8_##NUM[i]) \
+ __builtin_abort (); \
} \
}
TEST_LOOP (_Float16, 16)
TEST_LOOP (_Float16, 77)
TEST_LOOP (_Float16, 128)
- TEST_LOOP (_Float16, 795)
+ TEST_LOOP (_Float16, 299)
return 0;
}
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
/* { dg-additional-options "--param=riscv-autovec-preference=scalable -ffast-math" } */
#include "ternop-6.c"
TYPE array8_##NUM[NUM] = {}; \
for (int i = 0; i < NUM; ++i) \
{ \
- array1_##NUM[i] = (i & 1) + 5; \
- array2_##NUM[i] = i - NUM / 3; \
- array3_##NUM[i] = NUM - NUM / 3 - i; \
- array6_##NUM[i] = NUM - NUM / 3 - i; \
- array4_##NUM[i] = NUM - NUM / 2 + i; \
- array7_##NUM[i] = NUM - NUM / 2 + i; \
- array5_##NUM[i] = NUM + i * 7; \
- array8_##NUM[i] = NUM + i * 7; \
- asm volatile("" ::: "memory"); \
+ int val = NUM / 18.3; \
+ int val2 = i / 18.7; \
+ array1_##NUM[i] = (i & 1) + 5; \
+ array2_##NUM[i] = val2 - val / 3; \
+ array3_##NUM[i] = val - val / 3 - val2; \
+ array6_##NUM[i] = val - val / 3 - val2; \
+ array4_##NUM[i] = val - val / 2 + val2; \
+ array7_##NUM[i] = val - val / 2 + val2; \
+ array5_##NUM[i] = val + val2; \
+ array8_##NUM[i] = val + val2; \
+ asm volatile ("" ::: "memory"); \
} \
ternop_##TYPE (array3_##NUM, array4_##NUM, array5_##NUM, array1_##NUM, \
- array2_##NUM, NUM); \
+ array2_##NUM, NUM); \
for (int i = 0; i < NUM; i++) \
{ \
- array6_##NUM[i] \
- = (TYPE) (-(array1_##NUM[i] * array2_##NUM[i]) + array7_##NUM[i]); \
- if (array3_##NUM[i] != array6_##NUM[i]) \
- __builtin_abort (); \
- array7_##NUM[i] \
- = (TYPE) (array1_##NUM[i] * array6_##NUM[i] + array7_##NUM[i]); \
- if (array4_##NUM[i] != array7_##NUM[i]) \
- __builtin_abort (); \
- array8_##NUM[i] \
- = (TYPE) (array2_##NUM[i] * array7_##NUM[i] + array8_##NUM[i]); \
- if (array5_##NUM[i] != array8_##NUM[i]) \
- __builtin_abort (); \
+ array6_##NUM[i] \
+ = (TYPE) (-(array1_##NUM[i] * array2_##NUM[i]) + array7_##NUM[i]); \
+ if (array3_##NUM[i] != array6_##NUM[i]) \
+ __builtin_abort (); \
+ array7_##NUM[i] \
+ = (TYPE) (array1_##NUM[i] * array6_##NUM[i] + array7_##NUM[i]); \
+ if (array4_##NUM[i] != array7_##NUM[i]) \
+ __builtin_abort (); \
+ array8_##NUM[i] \
+ = (TYPE) (array2_##NUM[i] * array7_##NUM[i] + array8_##NUM[i]); \
+ if (array5_##NUM[i] != array8_##NUM[i]) \
+ __builtin_abort (); \
} \
}
TEST_LOOP (_Float16, 16)
TEST_LOOP (_Float16, 77)
TEST_LOOP (_Float16, 128)
- TEST_LOOP (_Float16, 795)
+ TEST_LOOP (_Float16, 299)
return 0;
}
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
/* { dg-additional-options "--param=riscv-autovec-preference=scalable -ffast-math" } */
#include "ternop-7.c"
TEST_LOOP (_Float16, 16)
TEST_LOOP (_Float16, 77)
TEST_LOOP (_Float16, 128)
- TEST_LOOP (_Float16, 795)
+ TEST_LOOP (_Float16, 299)
return 0;
}
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
/* { dg-additional-options "--param=riscv-autovec-preference=scalable -ffast-math" } */
#include "ternop-8.c"
TYPE array8_##NUM[NUM] = {}; \
for (int i = 0; i < NUM; ++i) \
{ \
+ int val = NUM / 18.3; \
+ int val2 = i / 18.7; \
array1_##NUM[i] = (i & 1) + 5; \
- array2_##NUM[i] = i - NUM / 3; \
- array3_##NUM[i] = NUM - NUM / 3 - i; \
- array6_##NUM[i] = NUM - NUM / 3 - i; \
- array4_##NUM[i] = NUM - NUM / 2 + i; \
- array7_##NUM[i] = NUM - NUM / 2 + i; \
- array5_##NUM[i] = NUM + i * 7; \
- array8_##NUM[i] = NUM + i * 7; \
- asm volatile("" ::: "memory"); \
+ array2_##NUM[i] = val2 - val / 3; \
+ array3_##NUM[i] = val - val2 / 3 - val2; \
+ array6_##NUM[i] = val - val2 / 3 - val2; \
+ array4_##NUM[i] = val - val2 / 2 + val2; \
+ array7_##NUM[i] = val - val2 / 2 + val2; \
+ array5_##NUM[i] = val + val2; \
+ array8_##NUM[i] = val + val2; \
+ asm volatile ("" ::: "memory"); \
} \
ternop_##TYPE (array3_##NUM, array4_##NUM, array5_##NUM, array1_##NUM, \
array2_##NUM, NUM); \
TEST_LOOP (_Float16, 16)
TEST_LOOP (_Float16, 77)
TEST_LOOP (_Float16, 128)
- TEST_LOOP (_Float16, 795)
return 0;
}
-/* { dg-do run { target { riscv_v && riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_v && riscv_zvfh } } } */
/* { dg-additional-options "--param=riscv-autovec-preference=scalable -ffast-math" } */
#include "ternop-9.c"
TYPE array8_##NUM[NUM] = {}; \
for (int i = 0; i < NUM; ++i) \
{ \
+ int val = NUM / 18.3; \
+ int val2 = i / 18.7; \
array1_##NUM[i] = (i & 1) + 5; \
- array2_##NUM[i] = i - NUM / 3; \
- array3_##NUM[i] = NUM - NUM / 3 - i; \
- array6_##NUM[i] = NUM - NUM / 3 - i; \
- array4_##NUM[i] = NUM - NUM / 2 + i; \
- array7_##NUM[i] = NUM - NUM / 2 + i; \
- array5_##NUM[i] = NUM + i * 7; \
- array8_##NUM[i] = NUM + i * 7; \
- asm volatile("" ::: "memory"); \
+ array2_##NUM[i] = val2 - val / 3; \
+ array3_##NUM[i] = val - val / 3 - val2; \
+ array6_##NUM[i] = val - val / 3 - val2; \
+ array4_##NUM[i] = val - val / 2 + val2; \
+ array7_##NUM[i] = val - val / 2 + val2; \
+ array5_##NUM[i] = val + val2; \
+ array8_##NUM[i] = val + val2; \
+ asm volatile ("" ::: "memory"); \
} \
ternop_##TYPE (array3_##NUM, array4_##NUM, array5_##NUM, array1_##NUM, \
array2_##NUM, NUM); \
TEST_LOOP (_Float16, 16)
TEST_LOOP (_Float16, 77)
TEST_LOOP (_Float16, 128)
- TEST_LOOP (_Float16, 795)
+ TEST_LOOP (_Float16, 299)
return 0;
}
#include "vfsqrt-template.h"
-#include <assert.h>
-
#define SZ 255
#define EPS 1e-5
-#define RUN(TYPE) \
- TYPE a##TYPE[SZ]; \
- for (int i = 0; i < SZ; i++) \
- { \
- a##TYPE[i] = (TYPE)i; \
- } \
- vsqrt_##TYPE (a##TYPE, a##TYPE, SZ); \
- for (int i = 0; i < SZ; i++) \
- assert (__builtin_fabs \
- (a##TYPE[i] - __builtin_sqrtf ((TYPE)i)) < EPS); \
+#define RUN(TYPE, SUFFIX) \
+ TYPE a##TYPE[SZ]; \
+ for (int i = 0; i < SZ; i++) \
+ a##TYPE[i] = (TYPE) i; \
+ vsqrt_##TYPE (a##TYPE, a##TYPE, SZ); \
+ for (int i = 0; i < SZ; i++) \
+ if (__builtin_fabs##SUFFIX (a##TYPE[i] \
+ - __builtin_sqrt##SUFFIX ((TYPE) i)) \
+ > EPS) \
+ __builtin_abort ();
-#define RUN_ALL() \
- RUN(float) \
- RUN(double) \
+#define RUN_ALL() \
+ RUN (float, f) \
+ RUN (double, )
int main ()
{
- RUN_ALL()
+ RUN_ALL ()
}
it here instead of in the template directly (which is also
included by the run test that might need to be linked without
the extension). */
-TEST_TYPE3(_Float16)
+TEST_TYPE (_Float16, f16)
/* { dg-final { scan-assembler-times {\tvfsqrt\.v} 3 } } */
it here instead of in the template directly (which is also
included by the run test that might need to be linked without
the extension). */
-TEST_TYPE3(_Float16)
+TEST_TYPE (_Float16, f16)
/* { dg-final { scan-assembler-times {\tvfsqrt\.v} 3 } } */
#include <stdint-gcc.h>
-#define TEST_TYPE(TYPE) \
+#define TEST_TYPE(TYPE, SUFFIX) \
__attribute__((noipa)) \
void vsqrt_##TYPE (TYPE *dst, TYPE *a, int n) \
{ \
for (int i = 0; i < n; i++) \
- dst[i] = __builtin_sqrtf (a[i]); \
- }
-
-#define TEST_TYPE2(TYPE) \
- __attribute__((noipa)) \
- void vsqrt_##TYPE (TYPE *dst, TYPE *a, int n) \
- { \
- for (int i = 0; i < n; i++) \
- dst[i] = __builtin_sqrt (a[i]); \
- }
-
-#define TEST_TYPE3(TYPE) \
- __attribute__((noipa)) \
- void vsqrt_##TYPE (TYPE *dst, TYPE *a, int n) \
- { \
- for (int i = 0; i < n; i++) \
- dst[i] = __builtin_sqrtf16 (a[i]); \
+ dst[i] = __builtin_sqrt##SUFFIX (a[i]); \
}
#define TEST_ALL() \
- TEST_TYPE(float) \
- TEST_TYPE2(double) \
+ TEST_TYPE(float, f) \
+ TEST_TYPE(double, ) \
TEST_ALL()
-/* { dg-do run { target { riscv_zvfh_hw } } } */
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
/* { dg-additional-options "-std=c99 -fno-vect-cost-model --param=riscv-autovec-preference=fixed-vlmax -ffast-math" } */
#include "vfsqrt-template.h"
/* We cannot link this without the Zvfh extension so define
it here instead of in the template directly. */
-TEST_TYPE3(_Float16)
-
-#include <assert.h>
+TEST_TYPE(_Float16, f16)
#define SZ 255
#define EPS 1e-5
-#define RUN(TYPE) \
- TYPE a##TYPE[SZ]; \
- for (int i = 0; i < SZ; i++) \
- { \
- a##TYPE[i] = (TYPE)i; \
- } \
- vsqrt_##TYPE (a##TYPE, a##TYPE, SZ); \
- for (int i = 0; i < SZ; i++) \
- assert (__builtin_fabs \
- (a##TYPE[i] - __builtin_sqrtf ((TYPE)i)) < EPS); \
-
-#define RUN_ALL() \
- RUN(_Float16) \
+#define RUN(TYPE, SUFFIX) \
+ TYPE a##TYPE[SZ]; \
+ for (int i = 0; i < SZ; i++) \
+ { \
+ a##TYPE[i] = (TYPE) i; \
+ } \
+ vsqrt_##TYPE (a##TYPE, a##TYPE, SZ); \
+ for (int i = 0; i < SZ; i++) \
+ if (__builtin_fabs##SUFFIX (a##TYPE[i] \
+ - __builtin_sqrt##SUFFIX ((TYPE) i)) \
+ > EPS) \
+ __builtin_abort ();
+
+#define RUN_ALL() \
+ RUN (_Float16, f16)
int main ()
{
-/* { dg-do run {target { riscv_zvfh_hw } } } */
-/* { dg-additional-options "-Wno-pedantic" } */
+/* { dg-do run {target { riscv_zvfh } } } */
+/* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
#include <assert.h>
-/* { dg-do run { target { riscv_zvfh_hw } } } */
-/* { dg-additional-options "-Wno-pedantic" } */
+/* { dg-do run { target { riscv_zvfh } } } */
+/* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
#include <assert.h>