OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [c-c++-common/] [torture/] [complex-sign.h] - Blame information for rev 686

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 686 jeremybenn
/* Common header for complex arithmetic sign tests.  */
2
 
3
#ifdef __cplusplus
4
extern "C" {
5
#endif
6
extern void abort (void);
7
extern void exit (int);
8
#ifdef __cplusplus
9
}
10
#endif
11
 
12
#define CHECK_RES(VALUE, COPY, SIGN_REAL, SIGN_IMAG)            \
13
  do {                                                          \
14
    if ((VALUE) != 0                                             \
15
        || COPY (1.0, __real__ (VALUE)) != SIGN_REAL 1.0        \
16
        || COPY (1.0, __imag__ (VALUE)) != SIGN_IMAG 1.0)       \
17
      abort ();                                                 \
18
  } while (0)
19
 
20
/* This definition is intended to work with or without imaginary
21
   types, as long as mixed real/complex arithmetic is handled
22
   correctly.  */
23
#define ENCODE(ZERO, ZEROI, SA, SB)                     \
24
  (SA 1 == 1                                            \
25
   ? SB 1 == 1 ? ZERO + ZEROI : ZERO - ZEROI            \
26
   : SB 1 == 1 ? -(ZERO - ZEROI) : -(ZERO + ZEROI))
27
 
28
#define CHECK_ARITH(TYPE, COPY, ZERO, ZEROI, OP, S1, S2, S3, S4, SR, SI) \
29
  do {                                                                  \
30
    _Complex TYPE a1, b1, c1;                                           \
31
    volatile _Complex TYPE a2, b2, c2;                                  \
32
    a1 = ENCODE(ZERO, ZEROI, S1, S2);                                   \
33
    CHECK_RES (a1, COPY, S1, S2);                                       \
34
    b1 = ENCODE(ZERO, ZEROI, S3, S4);                                   \
35
    CHECK_RES (b1, COPY, S3, S4);                                       \
36
    c1 = a1 OP b1;                                                      \
37
    CHECK_RES (c1, COPY, SR, SI);                                       \
38
    a2 = ENCODE(ZERO, ZEROI, S1, S2);                                   \
39
    CHECK_RES (a2, COPY, S1, S2);                                       \
40
    b2 = ENCODE(ZERO, ZEROI, S3, S4);                                   \
41
    CHECK_RES (b2, COPY, S3, S4);                                       \
42
    c2 = a2 OP b2;                                                      \
43
    CHECK_RES (c2, COPY, SR, SI);                                       \
44
  } while (0)
45
 
46
#define CHECK_ARITH_RC(TYPE, COPY, ZERO, ZEROI, OP, S1, S3, S4, SR, SI) \
47
  do {                                                                  \
48
    TYPE a1;                                                            \
49
    _Complex TYPE b1, c1;                                               \
50
    volatile TYPE a2;                                                   \
51
    volatile _Complex TYPE b2, c2;                                      \
52
    a1 = S1 ZERO;                                                       \
53
    b1 = ENCODE(ZERO, ZEROI, S3, S4);                                   \
54
    CHECK_RES (b1, COPY, S3, S4);                                       \
55
    c1 = a1 OP b1;                                                      \
56
    CHECK_RES (c1, COPY, SR, SI);                                       \
57
    a2 = S1 ZERO;                                                       \
58
    b2 = ENCODE(ZERO, ZEROI, S3, S4);                                   \
59
    CHECK_RES (b2, COPY, S3, S4);                                       \
60
    c2 = a2 OP b2;                                                      \
61
    CHECK_RES (c2, COPY, SR, SI);                                       \
62
  } while (0)
63
 
64
#define CHECK_ARITH_CR(TYPE, COPY, ZERO, ZEROI, OP, S1, S2, S3, V3, SR, SI) \
65
  do {                                                                  \
66
    _Complex TYPE a1, c1;                                               \
67
    TYPE b1;                                                            \
68
    volatile _Complex TYPE a2, c2;                                      \
69
    volatile TYPE b2;                                                   \
70
    a1 = ENCODE(ZERO, ZEROI, S1, S2);                                   \
71
    CHECK_RES (a1, COPY, S1, S2);                                       \
72
    b1 = S3 V3;                                                         \
73
    c1 = a1 OP b1;                                                      \
74
    CHECK_RES (c1, COPY, SR, SI);                                       \
75
    a2 = ENCODE(ZERO, ZEROI, S1, S2);                                   \
76
    CHECK_RES (a2, COPY, S1, S2);                                       \
77
    b2 = S3 V3;                                                         \
78
    c2 = a2 OP b2;                                                      \
79
    CHECK_RES (c2, COPY, SR, SI);                                       \
80
  } while (0)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.