aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.target/s390/addr-constraints-1.c
blob: fbb48f282b3b4b6305569115d8394f34b172aee9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/* { dg-compile } */
/* { dg-options "-O2" } */

static inline unsigned long
lay_uw(unsigned long addr)
{
  unsigned long result;

  __asm__ ("lay    %[result],%a[addr]"
	   : [result] "=d" (result)
	   : [addr] "UW" (addr));
  return result;
}

static inline unsigned long
la_u(unsigned long addr)
{
  unsigned long result;

  __asm__ ("la    %[result],%a[addr]"
	   : [result] "=d" (result)
	   : [addr] "U" (addr));
  return result;
}

static inline unsigned long
lay_zqzrzszt(unsigned long addr)
{
  unsigned long result;

  __asm__ ("lay    %[result],%a[addr]"
	   : [result] "=d" (result)
	   : [addr] "ZQZRZSZT" (addr));
  return result;
}

static inline unsigned long
la_zqzr(unsigned long addr)
{
  unsigned long result;

  __asm__ ("la    %[result],%a[addr]"
	   : [result] "=d" (result)
	   : [addr] "ZQZR" (addr));
  return result;
}


extern unsigned long a[15];

int main(void)
{
  a[1] = lay_uw(3333);
  a[2] = lay_uw(4444);
  a[3] = lay_uw(1000000);
  a[4] = lay_uw(a[0]);

  a[5] = la_u(2222);
  a[6] = la_u(5555);
  a[7] = la_u(a[0]);

  a[8] = lay_zqzrzszt(3333);
  a[9] = lay_zqzrzszt(4444);
  a[10] = lay_zqzrzszt(1000000);
  a[11] = lay_zqzrzszt(a[0]);

  a[12] = la_zqzr(2222);
  a[13] = la_zqzr(5555);
  a[14] = la_zqzr(a[0]);
}