diff options
author | Andrew Cagney <cagney@redhat.com> | 1997-10-17 03:57:53 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 1997-10-17 03:57:53 +0000 |
commit | afb1dbe851c1395fd46213bb663b349d5768b35d (patch) | |
tree | 0d6a021377e96124a6ed11987a594c2ee1472d33 /sim/testsuite/common/alu-tst.c | |
parent | 9d59cbb13c35d1aa0901428efabc05c2b5fae38a (diff) | |
download | gdb-afb1dbe851c1395fd46213bb663b349d5768b35d.zip gdb-afb1dbe851c1395fd46213bb663b349d5768b35d.tar.gz gdb-afb1dbe851c1395fd46213bb663b349d5768b35d.tar.bz2 |
Preliminary tests for sim-alu module.
Diffstat (limited to 'sim/testsuite/common/alu-tst.c')
-rw-r--r-- | sim/testsuite/common/alu-tst.c | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/sim/testsuite/common/alu-tst.c b/sim/testsuite/common/alu-tst.c new file mode 100644 index 0000000..f03ebd5 --- /dev/null +++ b/sim/testsuite/common/alu-tst.c @@ -0,0 +1,100 @@ +#define WITH_TARGET_WORD_MSB 0 +#define WITH_TARGET_WORD_BITSIZE 64 +#define WITH_HOST_WORD_BITSIZE (sizeof (int) * 8) + +#define ASSERT(EXPRESSION) \ +{ \ + if (!(EXPRESSION)) { \ + fprintf (stderr, "%s:%d: assertion failed - %s\n", \ + __FILE__, __LINE__, #EXPRESSION); \ + abort (); \ + } \ +} + +#define SIM_BITS_INLINE (INCLUDE_MODULE | INCLUDED_BY_MODULE) + +#include "sim-basics.h" +#include "sim-types.h" +#include "sim-bits.h" + +#include "sim-alu.h" + +#include <stdio.h> + + +typedef struct { + char *op; + unsigned64 arg; +} alu_op; + +typedef struct { + unsigned64 begin; + alu_op ops[3]; + unsigned64 result; + int carry; + int overflow; +} alu_test; + +#define MAX_INT16 (32767) +#define MIN_INT16 (32768) + +const alu_test alu16_tests[] = { + /* */ + { MAX_INT16, { { "ADD", 1 }, }, MIN_INT16, 0, 1, }, + { MIN_INT16, { { "ADD", -1 }, }, MAX_INT16, 1, 1, }, + { MAX_INT16, { { "ADD", MIN_INT16 }, }, -1, 0, 0, }, + { MIN_INT16, { { "ADD", MAX_INT16 }, }, -1, 0, 0, }, + { MAX_INT16, { { "ADD", MAX_INT16 }, }, MAX_INT16 * 2, 0, 1, }, + { MIN_INT16, { { "ADD", MIN_INT16 }, }, 0, 1, 1, }, + /* */ + { 0, { { "SUB", MIN_INT16 }, }, MIN_INT16, 0, 1, }, + { MAX_INT16, { { "SUB", MAX_INT16 }, }, 0, 0, 0, }, +}; + + +static void +print_hex (unsigned64 val, int nr_bits) +{ + switch (nr_bits) + { + case 16: + printf ("0x%04lx", (long) (unsigned16) (val)); + break; + case 32: + printf ("0x%08lx", (long) (unsigned32) (val)); + break; + case 64: + printf ("0x%08lx%08lx", + (long) (unsigned32) (val >> 32), + (long) (unsigned32) (val)); + default: + abort (); + } +} + + +int errors = 0; + + +#define N 16 +#include "alu-n-tst.h" +#undef N + +#if 0 +#define N 32 +#include "alu-n-tst.h" +#undef N + +#define N 64 +#include "alu-n-tst.h" +#undef N +#endif + +int +main () +{ + int i; + for (i = 0; i < sizeof (alu16_tests) / sizeof (*alu16_tests); i++) + do_op_16 (alu16_tests + i); + return (errors != 0); +} |