mirror of
https://github.com/nArnoSNES/tcc-65816.git
synced 2024-06-12 13:29:29 +00:00
69 lines
1.0 KiB
C
69 lines
1.0 KiB
C
/* Copyright (C) 2004 Free Software Foundation.
|
|
|
|
Check that constant folding and RTL simplification of -(x >> y) doesn't
|
|
break anything and produces the expected results.
|
|
|
|
Written by Roger Sayle, 11th March 2004. */
|
|
|
|
extern void abort (void);
|
|
|
|
#define INT_BITS (sizeof(int)*8)
|
|
|
|
int test1(int x)
|
|
{
|
|
return -(x >> (INT_BITS-1));
|
|
}
|
|
|
|
int test2(unsigned int x)
|
|
{
|
|
return -((int)(x >> (INT_BITS-1)));
|
|
}
|
|
|
|
int test3(int x)
|
|
{
|
|
int y;
|
|
y = INT_BITS-1;
|
|
return -(x >> y);
|
|
}
|
|
|
|
int test4(unsigned int x)
|
|
{
|
|
int y;
|
|
y = INT_BITS-1;
|
|
return -((int)(x >> y));
|
|
}
|
|
|
|
int main()
|
|
{
|
|
if (test1(0) != 0)
|
|
abort ();
|
|
if (test1(1) != 0)
|
|
abort ();
|
|
if (test1(-1) != 1)
|
|
abort ();
|
|
|
|
if (test2(0) != 0)
|
|
abort ();
|
|
if (test2(1) != 0)
|
|
abort ();
|
|
if (test2((unsigned int)-1) != -1)
|
|
abort ();
|
|
|
|
if (test3(0) != 0)
|
|
abort ();
|
|
if (test3(1) != 0)
|
|
abort ();
|
|
if (test3(-1) != 1)
|
|
abort ();
|
|
|
|
if (test4(0) != 0)
|
|
abort ();
|
|
if (test4(1) != 0)
|
|
abort ();
|
|
if (test4((unsigned int)-1) != -1)
|
|
abort ();
|
|
|
|
return 0;
|
|
}
|
|
|