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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [testsuite/] [gcc.dg/] [ia64-sync-2.c] - Blame information for rev 816

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 149 jeremybenn
/* { dg-do run } */
2
/* { dg-require-effective-target sync_int_long } */
3
/* { dg-options } */
4
/* { dg-options "-march=i486" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
5
/* { dg-options "-mcpu=v9" { target sparc*-*-* } } */
6
 
7
/* Test basic functionality of the intrinsics.  */
8
 
9
extern void abort (void);
10
extern void *memcpy (void *, const void *, __SIZE_TYPE__);
11
 
12
static int AI[18];
13
static int init_si[18] = { 0,0,0,1,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0 };
14
static int test_si[18] = { 1,1,1,1,1,4,22,-12,7,8,9,7,1,-12,7,8,9,7 };
15
 
16
static void
17
do_si (void)
18
{
19
  if (__sync_val_compare_and_swap(AI+0, 0, 1) != 0)
20
    abort ();
21
  if (__sync_val_compare_and_swap(AI+0, 0, 1) != 1)
22
    abort ();
23
  if (__sync_bool_compare_and_swap(AI+1, 0, 1) != 1)
24
    abort ();
25
  if (__sync_bool_compare_and_swap(AI+1, 0, 1) != 0)
26
    abort ();
27
 
28
  if (__sync_lock_test_and_set(AI+2, 1) != 0)
29
    abort ();
30
 
31
  if (__sync_fetch_and_add(AI+4, 1) != 0)
32
    abort ();
33
  if (__sync_fetch_and_add(AI+5, 4) != 0)
34
    abort ();
35
  if (__sync_fetch_and_add(AI+6, 22) != 0)
36
    abort ();
37
  if (__sync_fetch_and_sub(AI+7, 12) != 0)
38
    abort ();
39
  if (__sync_fetch_and_and(AI+8, 7) != -1)
40
    abort ();
41
  if (__sync_fetch_and_or(AI+9, 8) != 0)
42
    abort ();
43
  if (__sync_fetch_and_xor(AI+10, 9) != 0)
44
    abort ();
45
  if (__sync_fetch_and_nand(AI+11, 7) != 0)
46
    abort ();
47
 
48
  if (__sync_add_and_fetch(AI+12, 1) != 1)
49
    abort ();
50
  if (__sync_sub_and_fetch(AI+13, 12) != -12)
51
    abort ();
52
  if (__sync_and_and_fetch(AI+14, 7) != 7)
53
    abort ();
54
  if (__sync_or_and_fetch(AI+15, 8) != 8)
55
    abort ();
56
  if (__sync_xor_and_fetch(AI+16, 9) != 9)
57
    abort ();
58
  if (__sync_nand_and_fetch(AI+17, 7) != 7)
59
    abort ();
60
}
61
 
62
static long AL[18];
63
static long init_di[18] = { 0,0,0,1,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0 };
64
static long test_di[18] = { 1,1,1,1,1,4,22,-12,7,8,9,7,1,-12,7,8,9,7 };
65
 
66
static void
67
do_di (void)
68
{
69
  if (__sync_val_compare_and_swap(AL+0, 0, 1) != 0)
70
    abort ();
71
  if (__sync_val_compare_and_swap(AL+0, 0, 1) != 1)
72
    abort ();
73
  if (__sync_bool_compare_and_swap(AL+1, 0, 1) != 1)
74
    abort ();
75
  if (__sync_bool_compare_and_swap(AL+1, 0, 1) != 0)
76
    abort ();
77
 
78
  if (__sync_lock_test_and_set(AL+2, 1) != 0)
79
    abort ();
80
 
81
  if (__sync_fetch_and_add(AL+4, 1) != 0)
82
    abort ();
83
  if (__sync_fetch_and_add(AL+5, 4) != 0)
84
    abort ();
85
  if (__sync_fetch_and_add(AL+6, 22) != 0)
86
    abort ();
87
  if (__sync_fetch_and_sub(AL+7, 12) != 0)
88
    abort ();
89
  if (__sync_fetch_and_and(AL+8, 7) != -1)
90
    abort ();
91
  if (__sync_fetch_and_or(AL+9, 8) != 0)
92
    abort ();
93
  if (__sync_fetch_and_xor(AL+10, 9) != 0)
94
    abort ();
95
  if (__sync_fetch_and_nand(AL+11, 7) != 0)
96
    abort ();
97
 
98
  if (__sync_add_and_fetch(AL+12, 1) != 1)
99
    abort ();
100
  if (__sync_sub_and_fetch(AL+13, 12) != -12)
101
    abort ();
102
  if (__sync_and_and_fetch(AL+14, 7) != 7)
103
    abort ();
104
  if (__sync_or_and_fetch(AL+15, 8) != 8)
105
    abort ();
106
  if (__sync_xor_and_fetch(AL+16, 9) != 9)
107
    abort ();
108
  if (__sync_nand_and_fetch(AL+17, 7) != 7)
109
    abort ();
110
}
111
 
112
int main()
113
{
114
  memcpy(AI, init_si, sizeof(init_si));
115
  memcpy(AL, init_di, sizeof(init_di));
116
 
117
  do_si ();
118
  do_di ();
119
 
120
  if (memcmp (AI, test_si, sizeof(test_si)))
121
    abort ();
122
  if (memcmp (AL, test_di, sizeof(test_di)))
123
    abort ();
124
 
125
  return 0;
126
}

powered by: WebSVN 2.1.0

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