blob: 33bc7a4735168632c7a20b3eb6dab18751219d78 [file] [log] [blame]
/* PR target/48863. */
/* { dg-do run } */
/* { dg-options "-O2" } */
/* Check that Temporary Expression Replacement does not move a
libcall-producing expression across a statement initialising a local
register variable. */
static inline int
dosvc (int fd, unsigned long high, unsigned low)
{
register int r0 asm("r0") = fd;
register int r2 asm("r2") = high;
register int r3 asm("r3") = low;
asm volatile("" : "=r"(r0) : "0"(r0), "r"(r2), "r"(r3));
return r0;
}
struct s
{
int fd;
long long length;
} s = { 2, 0 }, *p = &s;
int
main (void)
{
unsigned low = p->length & 0xffffffff;
unsigned high = p->length / 23;
if (dosvc (p->fd, high, low) != 2)
__builtin_abort ();
return 0;
}