mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
254c3783fe
These were written with 32-bit host assumptions baked into it. Simplify the printf formats to use ll length modifier as it's in C11 rather than trying to manually break it up into two, and cleanup some of the casts to stop assuming sizeof(long) is the same as sizeof(int). We also have to add a few more includes for the various funcs used in here. The tests aren't compiled automatically still. We can figure that out later with more work.
106 lines
1.8 KiB
C
106 lines
1.8 KiB
C
#define WITH_TARGET_WORD_MSB 0
|
|
#define WITH_TARGET_WORD_BITSIZE 64
|
|
#define WITH_HOST_WORD_BITSIZE (sizeof (int) * 8)
|
|
#define WITH_TARGET_BYTE_ORDER BIG_ENDIAN /* does not matter */
|
|
|
|
#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 <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#define PACKAGE "sim"
|
|
|
|
#include "sim-basics.h"
|
|
|
|
#include "sim-alu.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
typedef struct {
|
|
char *op;
|
|
unsigned64 arg;
|
|
} alu_op;
|
|
|
|
typedef struct {
|
|
unsigned64 begin;
|
|
alu_op ops[4];
|
|
unsigned64 result;
|
|
int carry_borrow;
|
|
int overflow;
|
|
} alu_test;
|
|
|
|
#define MAX_INT8 UNSIGNED64 (127)
|
|
#define MIN_INT8 UNSIGNED64 (128)
|
|
|
|
#define MAX_INT16 UNSIGNED64 (32767)
|
|
#define MIN_INT16 UNSIGNED64 (32768)
|
|
|
|
#define MAX_INT32 UNSIGNED64 (0x7fffffff)
|
|
#define MIN_INT32 UNSIGNED64 (0x80000000)
|
|
|
|
#define MAX_INT64 UNSIGNED64 (0x7fffffffffffffff)
|
|
#define MIN_INT64 UNSIGNED64 (0x8000000000000000)
|
|
|
|
static void
|
|
print_hex (unsigned64 val, int nr_bits)
|
|
{
|
|
switch (nr_bits)
|
|
{
|
|
case 8:
|
|
printf ("0x%02lx", (long) (unsigned8) (val));
|
|
break;
|
|
case 16:
|
|
printf ("0x%04lx", (long) (unsigned16) (val));
|
|
break;
|
|
case 32:
|
|
printf ("0x%08lx", (long) (unsigned32) (val));
|
|
break;
|
|
case 64:
|
|
printf ("0x%016llx", (long long) (unsigned64) (val));
|
|
break;
|
|
default:
|
|
abort ();
|
|
}
|
|
}
|
|
|
|
|
|
int errors = 0;
|
|
|
|
|
|
#define N 8
|
|
#include "alu-n-tst.h"
|
|
#undef N
|
|
|
|
#define N 16
|
|
#include "alu-n-tst.h"
|
|
#undef N
|
|
|
|
#define N 32
|
|
#include "alu-n-tst.h"
|
|
#undef N
|
|
|
|
#define N 64
|
|
#include "alu-n-tst.h"
|
|
#undef N
|
|
|
|
|
|
|
|
int
|
|
main ()
|
|
{
|
|
do_alu_8_tests ();
|
|
do_alu_16_tests ();
|
|
do_alu_32_tests ();
|
|
do_alu_64_tests ();
|
|
return (errors != 0);
|
|
}
|