[PATCH, GCC/ARM, 6/10] Clear GPRs inline when calling nscall function
[official-gcc.git] / gcc / testsuite / gcc.target / arm / pr48863.c
blob33bc7a4735168632c7a20b3eb6dab18751219d78
1 /* PR target/48863. */
2 /* { dg-do run } */
3 /* { dg-options "-O2" } */
5 /* Check that Temporary Expression Replacement does not move a
6 libcall-producing expression across a statement initialising a local
7 register variable. */
9 static inline int
10 dosvc (int fd, unsigned long high, unsigned low)
12 register int r0 asm("r0") = fd;
13 register int r2 asm("r2") = high;
14 register int r3 asm("r3") = low;
16 asm volatile("" : "=r"(r0) : "0"(r0), "r"(r2), "r"(r3));
17 return r0;
20 struct s
22 int fd;
23 long long length;
24 } s = { 2, 0 }, *p = &s;
26 int
27 main (void)
29 unsigned low = p->length & 0xffffffff;
30 unsigned high = p->length / 23;
32 if (dosvc (p->fd, high, low) != 2)
33 __builtin_abort ();
34 return 0;