re PR target/13256 (strict_low_part mistreated in delay slots)
PR target/13256 * gcc.c-torture/execute/20031201-1.c: New test. From-SVN: r74329
This commit is contained in:
parent
73fb6466a4
commit
64ed86c718
|
@ -1,3 +1,8 @@
|
|||
2003-12-05 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
PR target/13256
|
||||
* gcc.c-torture/execute/20031201-1.c: New test.
|
||||
|
||||
2003-12-05 Arnaud Charlet <charlet@act-europe.fr>
|
||||
|
||||
* ada/acats/run_acats: Add checks against missing gnatlib/gnattools.
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
/* Copyright (C) 2003 Free Software Foundation.
|
||||
PR target/13256
|
||||
STRICT_LOW_PART was handled incorrectly in delay slots.
|
||||
Origin: Hans-Peter Nilsson. */
|
||||
|
||||
typedef struct { unsigned int e0 : 16; unsigned int e1 : 16; } s1;
|
||||
typedef struct { unsigned int e0 : 16; unsigned int e1 : 16; } s2;
|
||||
typedef struct { s1 i12; s2 i16; } io;
|
||||
static int test_length = 2;
|
||||
static io *i;
|
||||
static int m = 1;
|
||||
static int d = 1;
|
||||
static unsigned long test_t0;
|
||||
static unsigned long test_t1;
|
||||
void test(void) __attribute__ ((__noinline__));
|
||||
extern int f1 (void *port) __attribute__ ((__noinline__));
|
||||
extern void f0 (void) __attribute__ ((__noinline__));
|
||||
int
|
||||
f1 (void *port)
|
||||
{
|
||||
int fail_count = 0;
|
||||
unsigned long tlen;
|
||||
s1 x0 = {0};
|
||||
s2 x1 = {0};
|
||||
|
||||
i = port;
|
||||
x0.e0 = x1.e0 = 32;
|
||||
i->i12 = x0;
|
||||
i->i16 = x1;
|
||||
do f0(); while (test_t1);
|
||||
x0.e0 = x1.e0 = 8;
|
||||
i->i12 = x0;
|
||||
i->i16 = x1;
|
||||
test ();
|
||||
if (m)
|
||||
{
|
||||
unsigned long e = 1000000000 / 460800 * test_length;
|
||||
tlen = test_t1 - test_t0;
|
||||
if (((tlen-e) & 0x7FFFFFFF) > 1000)
|
||||
f0();
|
||||
}
|
||||
if (d)
|
||||
{
|
||||
unsigned long e = 1000000000 / 460800 * test_length;
|
||||
tlen = test_t1 - test_t0;
|
||||
if (((tlen - e) & 0x7FFFFFFF) > 1000)
|
||||
f0();
|
||||
}
|
||||
return fail_count != 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
io io0;
|
||||
f1 (&io0);
|
||||
abort ();
|
||||
}
|
||||
|
||||
void
|
||||
test (void)
|
||||
{
|
||||
io *iop = i;
|
||||
if (iop->i12.e0 != 8 || iop->i16.e0 != 8)
|
||||
abort ();
|
||||
exit (0);
|
||||
}
|
||||
|
||||
void
|
||||
f0 (void)
|
||||
{
|
||||
static int washere = 0;
|
||||
io *iop = i;
|
||||
if (washere++ || iop->i12.e0 != 32 || iop->i16.e0 != 32)
|
||||
abort ();
|
||||
}
|
Loading…
Reference in New Issue