| /* { dg-do run { target { powerpc*-*-* && htm_hw } } } */ |
| /* { dg-require-effective-target powerpc_htm_ok } */ |
| /* { dg-options "-mhtm" } */ |
| |
| /* Program to test PowerPC HTM instructions. */ |
| |
| #include <stdlib.h> |
| #include <htmintrin.h> |
| |
| int |
| main (void) |
| { |
| long i; |
| unsigned long mask = 0; |
| |
| repeat: |
| if (__builtin_tbegin (0)) |
| { |
| mask++; |
| } |
| else |
| abort(); |
| |
| if (mask == 1) |
| { |
| __builtin_tsuspend (); |
| |
| if (_HTM_STATE (__builtin_tcheck ()) != _HTM_SUSPENDED) |
| abort (); |
| |
| __builtin_tresume (); |
| |
| if (_HTM_STATE (__builtin_tcheck ()) != _HTM_TRANSACTIONAL) |
| abort (); |
| } |
| else |
| mask++; |
| |
| if (_HTM_STATE (__builtin_tendall ()) != _HTM_TRANSACTIONAL) |
| abort (); |
| |
| if (mask == 1) |
| goto repeat; |
| |
| if (_HTM_STATE (__builtin_tendall ()) != _HTM_NONTRANSACTIONAL) |
| abort (); |
| |
| if (mask != 3) |
| abort (); |
| |
| return 0; |
| } |