97 lines
1.6 KiB
C
97 lines
1.6 KiB
C
/* This small program uses all the arithmetic operators that may
|
|
generate calls to library routines which must be implemented in
|
|
port-specific assembly language. */
|
|
/* { dg-do link } */
|
|
|
|
#include <stddef.h>
|
|
|
|
int foo ();
|
|
double dfoo ();
|
|
void discard (int);
|
|
void ddiscard (double);
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
int a = foo (), b = foo ();
|
|
unsigned int au = foo (), bu = foo ();
|
|
float af = dfoo (), bf = dfoo ();
|
|
double ad = dfoo (), bd = dfoo ();
|
|
|
|
discard (a * b);
|
|
discard (a / b);
|
|
discard (a % b);
|
|
|
|
discard (au / bu);
|
|
discard (au % bu);
|
|
|
|
discard (a >> b);
|
|
discard (a << b);
|
|
|
|
discard (au >> bu);
|
|
discard (au << bu);
|
|
|
|
ddiscard (ad + bd);
|
|
ddiscard (ad - bd);
|
|
ddiscard (ad * bd);
|
|
ddiscard (ad / bd);
|
|
ddiscard (-ad);
|
|
|
|
ddiscard (af + bf);
|
|
ddiscard (af - bf);
|
|
ddiscard (af * bf);
|
|
ddiscard (af / bf);
|
|
ddiscard (-af);
|
|
|
|
discard ((int) ad);
|
|
discard ((int) af);
|
|
|
|
ddiscard ((double) a);
|
|
ddiscard ((float) a);
|
|
ddiscard ((float) ad);
|
|
|
|
discard (ad == bd);
|
|
discard (ad < bd);
|
|
discard (ad > bd);
|
|
discard (ad != bd);
|
|
discard (ad <= bd);
|
|
discard (ad >= bd);
|
|
|
|
discard (af == bf);
|
|
discard (af < bf);
|
|
discard (af > bf);
|
|
discard (af != bf);
|
|
discard (af <= bf);
|
|
discard (af >= bf);
|
|
|
|
return 0;
|
|
}
|
|
|
|
void
|
|
discard (x)
|
|
int x __attribute__((__unused__));
|
|
{}
|
|
|
|
void
|
|
ddiscard (x)
|
|
double x __attribute__((__unused__));
|
|
{}
|
|
|
|
int
|
|
foo ()
|
|
{
|
|
static int table[] = {20, 69, 4, 12};
|
|
static int idx;
|
|
|
|
return table[idx++];
|
|
}
|
|
|
|
double
|
|
dfoo ()
|
|
{
|
|
static double table[] = {20.4, 69.96, 4.4, 202.202};
|
|
static int idx;
|
|
|
|
return table[idx++];
|
|
}
|