/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c

https://gitlab.com/adotout/gcc · C · 103 lines · 89 code · 10 blank · 4 comment · 3 complexity · 1b2da204849f9a4b044381276b99053b MD5 · raw file

  1. /* { dg-do run } */
  2. /* { dg-require-effective-target vect_complex_add_double } */
  3. /* { dg-add-options arm_v8_3a_complex_neon } */
  4. /* { dg-add-options arm_v8_3a_complex_neon } */
  5. #include <stdio.h>
  6. #include <complex.h>
  7. #include <string.h>
  8. #include <float.h>
  9. #include <math.h>
  10. #define PREF old
  11. #pragma GCC push_options
  12. #pragma GCC optimize ("no-tree-vectorize")
  13. # include "complex-operations.c"
  14. #pragma GCC pop_options
  15. #undef PREF
  16. #define PREF new
  17. # include "complex-operations.c"
  18. #undef PREF
  19. #define TYPE double
  20. #define TYPE2 double
  21. #define EP pow(2, -45)
  22. #define xstr(s) str(s)
  23. #define str(s) #s
  24. #define FCMP(A, B) \
  25. ((fabs (creal (A) - creal (B)) <= EP) && (fabs (cimag (A) - cimag (B)) <= EP))
  26. #define CMP(A, B) \
  27. (FCMP(A,B) ? "PASS" : "FAIL")
  28. #define COMPARE(A,B) \
  29. memset (&c1, 0, sizeof (c1)); \
  30. memset (&c2, 0, sizeof (c2)); \
  31. A; B; \
  32. if (!FCMP(c1[0],c2[0]) || !FCMP(c1[1], c2[1])) \
  33. { \
  34. printf ("=> %s vs %s\n", xstr (A), xstr (B)); \
  35. printf ("%a\n", creal (c1[0]) - creal (c2[0])); \
  36. printf ("%a\n", cimag (c1[1]) - cimag (c2[1])); \
  37. printf ("%.2f+%.2fI == %.2f+%.2fI (%s)\n", creal (c1[0]), cimag (c1[0]), creal (c2[0]), cimag (c2[0]), CMP (c1[0], c2[0])); \
  38. printf ("%.2f+%.2fI == %.2f+%.2fI (%s)\n", creal (c1[1]), cimag (c1[1]), creal (c2[1]), cimag (c2[1]), CMP (c1[1], c2[1])); \
  39. printf ("\n"); \
  40. __builtin_abort (); \
  41. }
  42. int main ()
  43. {
  44. TYPE2 complex a[] = { 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I };
  45. TYPE complex b[] = { 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I };
  46. TYPE complex c2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  47. TYPE complex c1[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  48. TYPE diff1, diff2;
  49. COMPARE(fma0_old(a, b, c1), fma0_new(a, b, c2));
  50. COMPARE(fma90_old(a, b, c1), fma90_new(a, b, c2));
  51. COMPARE(fma180_old(a, b, c1), fma180_new(a, b, c2));
  52. COMPARE(fma270_old(a, b, c1), fma270_new(a, b, c2));
  53. COMPARE(fma0_snd_old(a, b, c1), fma0_snd_new(a, b, c2));
  54. COMPARE(fma90_snd_old(a, b, c1), fma90_snd_new(a, b, c2));
  55. COMPARE(fma180_snd_old(a, b, c1), fma180_snd_new(a, b, c2));
  56. COMPARE(fma270_snd_old(a, b, c1), fma270_snd_new(a, b, c2));
  57. COMPARE(fma_conj_first_old(a, b, c1), fma_conj_first_new(a, b, c2));
  58. COMPARE(fma_conj_second_old(a, b, c1), fma_conj_second_new(a, b, c2));
  59. COMPARE(fma_conj_both_old(a, b, c1), fma_conj_both_new(a, b, c2));
  60. COMPARE(fms0_old(a, b, c1), fms0_new(a, b, c2));
  61. COMPARE(fms90_old(a, b, c1), fms90_new(a, b, c2));
  62. COMPARE(fms180_old(a, b, c1), fms180_new(a, b, c2));
  63. COMPARE(fms270_old(a, b, c1), fms270_new(a, b, c2));
  64. COMPARE(fms0_snd_old(a, b, c1), fms0_snd_new(a, b, c2));
  65. COMPARE(fms90_snd_old(a, b, c1), fms90_snd_new(a, b, c2));
  66. COMPARE(fms180_snd_old(a, b, c1), fms180_snd_new(a, b, c2));
  67. COMPARE(fms270_snd_old(a, b, c1), fms270_snd_new(a, b, c2));
  68. COMPARE(fms_conj_first_old(a, b, c1), fms_conj_first_new(a, b, c2));
  69. COMPARE(fms_conj_second_old(a, b, c1), fms_conj_second_new(a, b, c2));
  70. COMPARE(fms_conj_both_old(a, b, c1), fms_conj_both_new(a, b, c2));
  71. COMPARE(mul0_old(a, b, c1), mul0_new(a, b, c2));
  72. COMPARE(mul90_old(a, b, c1), mul90_new(a, b, c2));
  73. COMPARE(mul180_old(a, b, c1), mul180_new(a, b, c2));
  74. COMPARE(mul270_old(a, b, c1), mul270_new(a, b, c2));
  75. COMPARE(mul0_snd_old(a, b, c1), mul0_snd_new(a, b, c2));
  76. COMPARE(mul90_snd_old(a, b, c1), mul90_snd_new(a, b, c2));
  77. COMPARE(mul180_snd_old(a, b, c1), mul180_snd_new(a, b, c2));
  78. COMPARE(mul270_snd_old(a, b, c1), mul270_snd_new(a, b, c2));
  79. COMPARE(mul_conj_first_old(a, b, c1), mul_conj_first_new(a, b, c2));
  80. COMPARE(mul_conj_second_old(a, b, c1), mul_conj_second_new(a, b, c2));
  81. COMPARE(mul_conj_both_old(a, b, c1), mul_conj_both_new(a, b, c2));
  82. COMPARE(add0_old(a, b, c1), add0_new(a, b, c2));
  83. COMPARE(add90_old(a, b, c1), add90_new(a, b, c2));
  84. COMPARE(add180_old(a, b, c1), add180_new(a, b, c2));
  85. COMPARE(add270_old(a, b, c1), add270_new(a, b, c2));
  86. COMPARE(add0_snd_old(a, b, c1), add0_snd_new(a, b, c2));
  87. COMPARE(add90_snd_old(a, b, c1), add90_snd_new(a, b, c2));
  88. COMPARE(add180_snd_old(a, b, c1), add180_snd_new(a, b, c2));
  89. COMPARE(add270_snd_old(a, b, c1), add270_snd_new(a, b, c2));
  90. COMPARE(add_conj_first_old(a, b, c1), add_conj_first_new(a, b, c2));
  91. COMPARE(add_conj_second_old(a, b, c1), add_conj_second_new(a, b, c2));
  92. COMPARE(add_conj_both_old(a, b, c1), add_conj_both_new(a, b, c2));
  93. }