]>
git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.target/mips/umips-lwp-swp-volatile.c
1 /* { dg-do compile } */
2 /* { dg-options "-mmicromips" } */
4 /* This test ensures that we do not generate microMIPS SWP or LWP
5 instructions when any component of the accessed memory is volatile;
6 they are unsafe for such since they might cause replay of partial
7 accesses if interrupted by an exception. */
9 static void set_csr (volatile void *p
, int v
)
11 *(volatile int *) (p
) = v
;
14 static int get_csr (volatile void *p
)
16 return *(volatile int *) (p
);
21 int i
, q
= 0, p
= 0, r
= 0;
23 for (i
= 0; i
< 20; i
++)
25 set_csr ((volatile void *) 0xbf0100a8, 0xffff0002);
26 set_csr ((volatile void *) 0xbf0100a4, 0x80000008);
29 for (i
= 0; i
< 20; i
++)
32 k
= get_csr ((volatile void *) 0xbf0100b8);
34 j
= get_csr ((volatile void *) 0xbf0100b4);
41 /* { dg-final { scan-assembler-not "\tswp" } } */
42 /* { dg-final { scan-assembler-not "\tlwp" } } */