#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "sys.h"
#include "crisutils.h"

#define N 8
#define W 4
#define B 2
#define R 1

static always_inline int cris_swap(const int mode, int x)
{
	switch (mode)
	{
		case N: asm ("swapn\t%0\n" : "+r" (x) : "0" (x)); break;
		case W: asm ("swapw\t%0\n" : "+r" (x) : "0" (x)); break;
		case B: asm ("swapb\t%0\n" : "+r" (x) : "0" (x)); break;
		case R: asm ("swapr\t%0\n" : "+r" (x) : "0" (x)); break;
		case B|R: asm ("swapbr\t%0\n" : "+r" (x) : "0" (x)); break;
		case W|R: asm ("swapwr\t%0\n" : "+r" (x) : "0" (x)); break;
		case W|B: asm ("swapwb\t%0\n" : "+r" (x) : "0" (x)); break;
		case W|B|R: asm ("swapwbr\t%0\n" : "+r" (x) : "0" (x)); break;
		case N|R: asm ("swapnr\t%0\n" : "+r" (x) : "0" (x)); break;
		case N|B: asm ("swapnb\t%0\n" : "+r" (x) : "0" (x)); break;
		case N|B|R: asm ("swapnbr\t%0\n" : "+r" (x) : "0" (x)); break;
		case N|W: asm ("swapnw\t%0\n" : "+r" (x) : "0" (x)); break;
		default:
			err();
			break;
	}
	return x;
}

/* Made this a macro to be able to pick up the location of the errors.  */
#define verify_swap(mode, val, expected, n, z)          \
do {                                                    \
        int r;                                          \
        cris_tst_cc_init();                             \
	r = cris_swap(mode, val);                       \
        cris_tst_mov_cc(n, z);                          \
	if (r != expected)                              \
		err();                                  \
} while(0)

void check_swap(void)
{
	/* Some of these numbers are borrowed from GDB's cris sim
	   testsuite.  */
	if (cris_swap(N, 0) != 0xffffffff)
		err();
	if (cris_swap(W, 0x12345678) != 0x56781234)
		err();
	if (cris_swap(B, 0x12345678) != 0x34127856)
		err();

	verify_swap(R, 0x78134452, 0x1ec8224a, 0, 0);
	verify_swap(B, 0x78134452, 0x13785244, 0, 0);
	verify_swap(B|R, 0x78134452, 0xc81e4a22, 1, 0);
	verify_swap(W, 0x78134452, 0x44527813, 0, 0);
	verify_swap(W|R, 0x78134452, 0x224a1ec8, 0, 0);
	verify_swap(W|B|R, 0x78134452, 0x4a22c81e, 0, 0);
	verify_swap(N, 0x78134452, 0x87ecbbad, 1, 0);
	verify_swap(N|R, 0x78134452, 0xe137ddb5, 1, 0);
	verify_swap(N|B, 0x78134452, 0xec87adbb, 1, 0);
	verify_swap(N|B|R, 0x78134452, 0x37e1b5dd, 0, 0);
	verify_swap(N|W, 0x78134452, 0xbbad87ec, 1, 0);
	verify_swap(N|B|R, 0xffffffff, 0, 0, 1);
}

int main(void)
{
	check_swap();
	pass();
	return 0;
}
