1 /* { dg-do compile } */
2 /* { dg-options "-O -fdump-ipa-modref" } */
3 #define sysreg_read(regname) \
4 ({ \
5 unsigned long __sr_val; \
6 asm volatile(""); \
7 \
8 __sr_val; \
9 })
10
11 #define sysreg_write(regname, __sw_val) \
12 do { \
13 asm volatile(""); \
14 } while (0)
15
16 #define isb() \
17 do { \
18 asm volatile( \
19 "isb" \
20 : \
21 : \
22 : "memory"); \
23 } while (0)
24
25 static unsigned long sctlr_read(void)
26 {
27 return sysreg_read(sctlr_el1);
28 }
29
30 static void sctlr_write(unsigned long val)
31 {
32 sysreg_write(sctlr_el1, val);
33 }
34
35 static void sctlr_rmw(void)
36 {
37 unsigned long val;
38
39 val = sctlr_read();
40 val |= 1UL << 7;
41 sctlr_write(val);
42 }
43
44 void sctlr_read_multiple(void)
45 {
46 sctlr_read();
47 sctlr_read();
48 sctlr_read();
49 sctlr_read();
50 }
51
52 void sctlr_write_multiple(void)
53 {
54 sctlr_write(0);
55 sctlr_write(0);
56 sctlr_write(0);
57 sctlr_write(0);
58 sctlr_write(0);
59 }
60
61 void sctlr_rmw_multiple(void)
62 {
63 sctlr_rmw();
64 sctlr_rmw();
65 sctlr_rmw();
66 sctlr_rmw();
67 }
68
69 void function(void)
70 {
71 sctlr_read_multiple();
72 sctlr_write_multiple();
73 sctlr_rmw_multiple();
74
75 isb();
76 }
77 /* { dg-final { scan-ipa-dump-not "Function found to be const" "modref" } } */