1 /* { dg-do run { target { powerpc*-*-linux* && { lp64 && p9vector_hw } } } } */
2 /* { dg-require-effective-target powerpc_p9vector_ok } */
3 /* { dg-options "-O2 -mpower9-vector -mpower9-misc" } */
9 /* Test whether the ISA 3.0 amo (atomic memory operations) functions perform as
13 static uint32_t u32_ld
[4] = {
20 static uint32_t u32_st
[4] = {
27 static uint32_t u32_result
[4];
29 static uint32_t u32_update
[4] = {
36 static uint32_t u32_prev
[4] = {
44 static uint64_t u64_ld
[4] = {
51 static uint64_t u64_st
[4] = {
58 static uint64_t u64_result
[4];
60 static uint64_t u64_update
[4] = {
67 static uint64_t u64_prev
[4] = {
79 u32_result
[0] = amo_lwat_add (&u32_ld
[0], 1);
80 u32_result
[1] = amo_lwat_xor (&u32_ld
[1], 1);
81 u32_result
[2] = amo_lwat_ior (&u32_ld
[2], 1);
82 u32_result
[3] = amo_lwat_and (&u32_ld
[3], 1);
84 u64_result
[0] = amo_ldat_add (&u64_ld
[0], 1);
85 u64_result
[1] = amo_ldat_xor (&u64_ld
[1], 1);
86 u64_result
[2] = amo_ldat_ior (&u64_ld
[2], 1);
87 u64_result
[3] = amo_ldat_and (&u64_ld
[3], 1);
89 amo_stwat_add (&u32_st
[0], 1);
90 amo_stwat_xor (&u32_st
[1], 1);
91 amo_stwat_ior (&u32_st
[2], 1);
92 amo_stwat_and (&u32_st
[3], 1);
94 amo_stdat_add (&u64_st
[0], 1);
95 amo_stdat_xor (&u64_st
[1], 1);
96 amo_stdat_ior (&u64_st
[2], 1);
97 amo_stdat_and (&u64_st
[3], 1);
99 for (i
= 0; i
< 4; i
++)
101 if (u32_result
[i
] != u32_prev
[i
])
104 if (u32_ld
[i
] != u32_update
[i
])
107 if (u32_st
[i
] != u32_update
[i
])
110 if (u64_result
[i
] != u64_prev
[i
])
113 if (u64_ld
[i
] != u64_update
[i
])
116 if (u64_st
[i
] != u64_update
[i
])