1 /* { dg-compile } */
2 /* { dg-options "-O2" } */
3 
4 static inline unsigned long
lay_uw(unsigned long addr)5 lay_uw(unsigned long addr)
6 {
7   unsigned long result;
8 
9   __asm__ ("lay    %[result],%a[addr]"
10 	   : [result] "=d" (result)
11 	   : [addr] "UW" (addr));
12   return result;
13 }
14 
15 static inline unsigned long
la_u(unsigned long addr)16 la_u(unsigned long addr)
17 {
18   unsigned long result;
19 
20   __asm__ ("la    %[result],%a[addr]"
21 	   : [result] "=d" (result)
22 	   : [addr] "U" (addr));
23   return result;
24 }
25 
26 static inline unsigned long
lay_zqzrzszt(unsigned long addr)27 lay_zqzrzszt(unsigned long addr)
28 {
29   unsigned long result;
30 
31   __asm__ ("lay    %[result],%a[addr]"
32 	   : [result] "=d" (result)
33 	   : [addr] "ZQZRZSZT" (addr));
34   return result;
35 }
36 
37 static inline unsigned long
la_zqzr(unsigned long addr)38 la_zqzr(unsigned long addr)
39 {
40   unsigned long result;
41 
42   __asm__ ("la    %[result],%a[addr]"
43 	   : [result] "=d" (result)
44 	   : [addr] "ZQZR" (addr));
45   return result;
46 }
47 
48 
49 extern unsigned long a[15];
50 
main(void)51 int main(void)
52 {
53   a[1] = lay_uw(3333);
54   a[2] = lay_uw(4444);
55   a[3] = lay_uw(1000000);
56   a[4] = lay_uw(a[0]);
57 
58   a[5] = la_u(2222);
59   a[6] = la_u(5555);
60   a[7] = la_u(a[0]);
61 
62   a[8] = lay_zqzrzszt(3333);
63   a[9] = lay_zqzrzszt(4444);
64   a[10] = lay_zqzrzszt(1000000);
65   a[11] = lay_zqzrzszt(a[0]);
66 
67   a[12] = la_zqzr(2222);
68   a[13] = la_zqzr(5555);
69   a[14] = la_zqzr(a[0]);
70 }
71