CRIS testsuite, based on the SIM testsuite, by Edgar E. Iglesias.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3365 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
ths 2007-10-08 13:32:20 +00:00
parent 83fa1010ae
commit dd43edf4e1
103 changed files with 7014 additions and 0 deletions

12
tests/cris/.gdbinit Normal file
View file

@ -0,0 +1,12 @@
b main
b _fail
b exit
display /i $pc
display /x $srp
display /x $r0
display /x $r1
display /x $r2
display /x $r3
display /x $r4
display /t $ccs

153
tests/cris/Makefile Normal file
View file

@ -0,0 +1,153 @@
-include ../../config-host.mak
CROSS=crisv32-axis-linux-gnu-
SIM=../../cris-linux-user/qemu-cris -L ./
SIMG=cris-axis-linux-gnu-run --sysroot=./
CC = $(CROSS)gcc
#AS = $(CROSS)as
AS = $(CC) -x assembler-with-cpp
SIZE = $(CROSS)size
LD = $(CC)
OBJCOPY = $(CROSS)objcopy
# we rely on GCC inline:ing the stuff we tell it to in many places here.
CFLAGS = -Winline -Wall -g -O2 -static
NOSTDFLAGS = -nostartfiles -nostdlib
ASFLAGS += -g -Wa,-I,$(SRC_PATH)/tests/cris/
LDLIBS =
NOSTDLIBS = -lgcc
CRT = crt.o
SYS = sys.o
TESTCASES += check_abs.tst
TESTCASES += check_addc.tst
TESTCASES += check_addcm.tst
TESTCASES += check_addo.tst
TESTCASES += check_addoq.tst
TESTCASES += check_addi.tst
TESTCASES += check_addiv32.tst
TESTCASES += check_addm.tst
TESTCASES += check_addr.tst
TESTCASES += check_addq.tst
TESTCASES += check_addxc.tst
TESTCASES += check_addxm.tst
TESTCASES += check_addxr.tst
TESTCASES += check_andc.tst
TESTCASES += check_andm.tst
TESTCASES += check_andr.tst
TESTCASES += check_andq.tst
TESTCASES += check_asr.tst
TESTCASES += check_ba.tst
TESTCASES += check_bas.tst
TESTCASES += check_bcc.tst
TESTCASES += check_bound.tst
TESTCASES += check_boundc.tst
TESTCASES += check_boundr.tst
TESTCASES += check_btst.tst
TESTCASES += check_clearfv32.tst
TESTCASES += check_cmpc.tst
TESTCASES += check_cmpr.tst
TESTCASES += check_cmpq.tst
TESTCASES += check_cmpm.tst
TESTCASES += check_cmpxc.tst
TESTCASES += check_cmpxm.tst
TESTCASES += check_cmp-2.tst
TESTCASES += check_clrjmp1.tst
TESTCASES += check_dstep.tst
TESTCASES += check_int64.tst
# check_jsr is broken.
#TESTCASES += check_jsr.tst
TESTCASES += check_mcp.tst
TESTCASES += check_movei.tst
TESTCASES += check_mover.tst
TESTCASES += check_moverm.tst
TESTCASES += check_moveq.tst
TESTCASES += check_movemr.tst
TESTCASES += check_movemrv32.tst
TESTCASES += check_movecr.tst
TESTCASES += check_movmp.tst
TESTCASES += check_movpr.tst
TESTCASES += check_movprv32.tst
TESTCASES += check_movdelsr1.tst
TESTCASES += check_movpmv32.tst
TESTCASES += check_movsr.tst
TESTCASES += check_movsm.tst
TESTCASES += check_movscr.tst
TESTCASES += check_movur.tst
TESTCASES += check_movum.tst
TESTCASES += check_movucr.tst
TESTCASES += check_mulx.tst
TESTCASES += check_mulv32.tst
TESTCASES += check_neg.tst
TESTCASES += check_not.tst
TESTCASES += check_lz.tst
TESTCASES += check_lapc.tst
TESTCASES += check_lsl.tst
TESTCASES += check_lsr.tst
TESTCASES += check_orc.tst
TESTCASES += check_orm.tst
TESTCASES += check_orr.tst
TESTCASES += check_orq.tst
TESTCASES += check_ret.tst
TESTCASES += check_swap.tst
TESTCASES += check_scc.tst
TESTCASES += check_subc.tst
TESTCASES += check_subq.tst
TESTCASES += check_subr.tst
TESTCASES += check_subm.tst
TESTCASES += check_glibc_kernelversion.tst
TESTCASES += check_xarith.tst
TESTCASES += check_hello.ctst
TESTCASES += check_stat1.ctst
TESTCASES += check_stat2.ctst
TESTCASES += check_stat3.ctst
TESTCASES += check_stat4.ctst
TESTCASES += check_openpf1.ctst
TESTCASES += check_openpf2.ctst
TESTCASES += check_openpf3.ctst
TESTCASES += check_openpf4.ctst
TESTCASES += check_openpf5.ctst
TESTCASES += check_mapbrk.ctst
TESTCASES += check_mmap1.ctst
TESTCASES += check_mmap2.ctst
TESTCASES += check_mmap3.ctst
TESTCASES += check_time1.ctst
TESTCASES += check_time2.ctst
TESTCASES += check_gcctorture_pr28634-1.ctst
#TESTCASES += check_gcctorture_pr28634.ctst
all: build
%.o: $(SRC_PATH)/tests/cris/%.c
$(CC) $(CFLAGS) -c $< -o $@
%.o: $(SRC_PATH)/tests/cris/%.s
$(AS) $(ASFLAGS) -c $< -o $@
%.tst: %.o
$(CC) $(CFLAGS) $(NOSTDFLAGS) $(LDLIBS) $(NOSTDLIBS) $(CRT) $< $(SYS) -o $@
%.ctst: %.o
$(CC) $(CFLAGS) $(LDLIBS) $< -o $@
build: $(CRT) $(SYS) $(TESTCASES)
check: $(CRT) $(SYS) $(TESTCASES)
@echo -e "\nQEMU simulator."
@for case in $(TESTCASES); do \
echo -n "$$case "; \
$(SIM) $$case; \
done
check-g: $(CRT) $(SYS) $(TESTCASES)
@echo -e "\nGDB simulator."
@for case in $(TESTCASES); do \
echo -n "$$case "; \
$(SIMG) $$case; \
done
clean:
$(RM) -fr $(TESTCASES) $(CRT) $(SYS)

2
tests/cris/README Normal file
View file

@ -0,0 +1,2 @@
Test-suite for the cris port. Heavily based on the test-suite for the CRIS port of sim by Hans-Peter Nilsson.

39
tests/cris/check_abs.c Normal file
View file

@ -0,0 +1,39 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "sys.h"
#include "crisutils.h"
extern inline int cris_abs(int n) {
int r;
asm ("abs\t%1, %0\n" : "=r" (r) : "r" (n));
return r;
}
extern inline void
verify_abs(int val, int res,
const int n, const int z, const int v, const int c)
{
int r;
cris_tst_cc_init();
r = cris_abs(val);
cris_tst_cc(n, z, v, c);
if (r != res)
err();
}
int main(void)
{
verify_abs(-1, 1, 0, 0, 0, 0);
verify_abs(0x80000000, 0x80000000, 1, 0, 0, 0);
verify_abs(0x7fffffff, 0x7fffffff, 0, 0, 0, 0);
verify_abs(42, 42, 0, 0, 0, 0);
verify_abs(1, 1, 0, 0, 0, 0);
verify_abs(0xffff, 0xffff, 0, 0, 0, 0);
verify_abs(0xffff, 0xffff, 0, 0, 0, 0);
verify_abs(-31, 0x1f, 0, 0, 0, 0);
verify_abs(0, 0, 0, 1, 0, 0);
pass();
return 0;
}

57
tests/cris/check_addc.c Normal file
View file

@ -0,0 +1,57 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "sys.h"
#include "crisutils.h"
extern inline int cris_addc(int a, const int b) {
asm ("addc\t%1, %0\n" : "+r" (a) : "r" (b));
return a;
}
#define verify_addc(a, b, res, n, z, v, c) \
{ \
int r; \
r = cris_addc((a), (b)); \
cris_tst_cc((n), (z), (v), (c)); \
if (r != (res)) \
err(); \
}
int main(void)
{
cris_tst_cc_init();
asm volatile ("clearf cz");
verify_addc(0, 0, 0, 0, 0, 0, 0);
cris_tst_cc_init();
asm volatile ("setf z");
verify_addc(0, 0, 0, 0, 1, 0, 0);
cris_tst_cc_init();
asm volatile ("setf cz");
verify_addc(0, 0, 1, 0, 0, 0, 0);
cris_tst_cc_init();
asm volatile ("clearf c");
verify_addc(-1, 2, 1, 0, 0, 0, 1);
cris_tst_cc_init();
asm volatile ("clearf nzv");
asm volatile ("setf c");
verify_addc(-1, 2, 2, 0, 0, 0, 1);
cris_tst_cc_init();
asm volatile ("setf c");
verify_addc(0xffff, 0xffff, 0x1ffff, 0, 0, 0, 0);
cris_tst_cc_init();
asm volatile ("clearf nzvc");
verify_addc(-1, -1, 0xfffffffe, 1, 0, 0, 1);
cris_tst_cc_init();
asm volatile ("setf c");
verify_addc(0x78134452, 0x5432f789, 0xcc463bdc, 1, 0, 1, 0);
pass();
return 0;
}

83
tests/cris/check_addcm.c Normal file
View file

@ -0,0 +1,83 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "sys.h"
#include "crisutils.h"
/* need to avoid acr as source here. */
extern inline int cris_addc_m(int a, const int *b) {
asm volatile ("addc [%1], %0\n" : "+r" (a) : "r" (b));
return a;
}
/* 'b' is a crisv32 constrain to avoid postinc with $acr. */
extern inline int cris_addc_pi_m(int a, int **b) {
asm volatile ("addc [%1+], %0\n" : "+r" (a), "+b" (*b));
return a;
}
#define verify_addc_m(a, b, res, n, z, v, c) \
{ \
int r; \
r = cris_addc_m((a), (b)); \
cris_tst_cc((n), (z), (v), (c)); \
if (r != (res)) \
err(); \
}
#define verify_addc_pi_m(a, b, res, n, z, v, c) \
{ \
int r; \
r = cris_addc_pi_m((a), (b)); \
cris_tst_cc((n), (z), (v), (c)); \
if (r != (res)) \
err(); \
}
int x[] = { 0, 0, 2, -1, 0xffff, -1, 0x5432f789};
int main(void)
{
int *p = (void *)&x[0];
#if 1
cris_tst_cc_init();
asm volatile ("clearf cz");
verify_addc_m(0, p, 0, 0, 0, 0, 0);
cris_tst_cc_init();
asm volatile ("setf z");
verify_addc_m(0, p, 0, 0, 1, 0, 0);
cris_tst_cc_init();
asm volatile ("setf c");
verify_addc_m(0, p, 1, 0, 0, 0, 0);
cris_tst_cc_init();
asm volatile ("clearf c");
verify_addc_pi_m(0, &p, 0, 0, 1, 0, 0);
p = &x[1];
cris_tst_cc_init();
asm volatile ("setf c");
verify_addc_pi_m(0, &p, 1, 0, 0, 0, 0);
if (p != &x[2])
err();
cris_tst_cc_init();
asm volatile ("clearf c");
verify_addc_pi_m(-1, &p, 1, 0, 0, 0, 1);
if (p != &x[3])
err();
#endif
p = &x[3];
/* TODO: investigate why this one fails. */
cris_tst_cc_init();
asm volatile ("setf c");
verify_addc_m(2, p, 2, 0, 0, 0, 1);
p += 4;
pass();
return 0;
}

57
tests/cris/check_addi.s Normal file
View file

@ -0,0 +1,57 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 0\n1\n2\n4\nbe02460f\n69d035a6\nc16c14d4\n
.include "testutils.inc"
start
moveq 0,r3
moveq 0,r4
clearf zcvn
addi r4.b,r3
test_cc 0 0 0 0
checkr3 0
moveq 0,r3
moveq 1,r4
setf zcvn
addi r4.b,r3
test_cc 1 1 1 1
checkr3 1
moveq 0,r3
moveq 1,r4
setf cv
clearf zn
addi r4.w,r3
test_cc 0 0 1 1
checkr3 2
moveq 0,r3
moveq 1,r4
clearf cv
setf zn
addi r4.d,r3
test_cc 1 1 0 0
checkr3 4
move.d 0x12345678,r3
move.d 0xabcdef97,r4
clearf cn
setf zv
addi r4.b,r3
test_cc 0 1 1 0
checkr3 be02460f
move.d 0x12345678,r3
move.d 0xabcdef97,r4
setf cn
clearf zv
addi r4.w,r3
test_cc 1 0 0 1
checkr3 69d035a6
move.d 0x12345678,r3
move.d 0xabcdef97,r4
addi r4.d,r3
checkr3 c16c14d4
quit

View file

@ -0,0 +1,62 @@
# mach: crisv32
# output: 4455aa77\n4455aa77\nee19ccff\nff22\n4455aa77\nff224455\n55aa77ff\n
.include "testutils.inc"
.data
x:
.dword 0x55aa77ff
.dword 0xccff2244
.dword 0x88ccee19
start
setf cv
moveq -1,r0
move.d x-32768,r5
move.d 32769,r6
addi r6.b,r5,acr
test_cc 0 0 1 1
move.d [acr],r3
checkr3 4455aa77
addu.w 32771,r5
setf znvc
moveq -1,r8
addi r8.w,r5,acr
test_cc 1 1 1 1
move.d [acr],r3
checkr3 4455aa77
moveq 5,r10
clearf znvc
addi r10.b,acr,acr
test_cc 0 0 0 0
move.d [acr],r3
checkr3 ee19ccff
subq 1,r5
move.d r5,r8
subq 1,r8
moveq 1,r9
addi r9.d,r8,acr
test_cc 0 0 0 0
movu.w [acr],r3
checkr3 ff22
moveq -2,r11
addi r11.w,acr,acr
move.d [acr],r3
checkr3 4455aa77
moveq 5,r9
addi r9.d,acr,acr
subq 18,acr
move.d [acr],r3
checkr3 ff224455
move.d -76789888/4,r12
addi r12.d,r5,acr
add.d 76789886,acr
move.d [acr],r3
checkr3 55aa77ff
quit

96
tests/cris/check_addm.s Normal file
View file

@ -0,0 +1,96 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 1\n1\n1fffe\nfffffffe\ncc463bdb\nffff0001\n1\nfffe\nfedafffe\n78133bdb\nffffff01\n1\nfe\nfeda49fe\n781344db\n781344d0\n
.include "testutils.inc"
.data
x:
.dword 2,-1,0xffff,-1,0x5432f789
.word 2,-1,0xffff,0xf789
.byte 2,0xff,0x89
.byte 0x7e
start
moveq -1,r3
move.d x,r5
add.d [r5+],r3
test_cc 0 0 0 1
checkr3 1
moveq 2,r3
add.d [r5],r3
test_cc 0 0 0 1
addq 4,r5
checkr3 1
move.d 0xffff,r3
add.d [r5+],r3
test_cc 0 0 0 0
checkr3 1fffe
moveq -1,r3
add.d [r5+],r3
test_cc 1 0 0 1
checkr3 fffffffe
move.d 0x78134452,r3
add.d [r5+],r3
test_cc 1 0 1 0
checkr3 cc463bdb
moveq -1,r3
add.w [r5+],r3
test_cc 0 0 0 1
checkr3 ffff0001
moveq 2,r3
add.w [r5+],r3
test_cc 0 0 0 1
checkr3 1
move.d 0xffff,r3
add.w [r5],r3
test_cc 1 0 0 1
checkr3 fffe
move.d 0xfedaffff,r3
add.w [r5+],r3
test_cc 1 0 0 1
checkr3 fedafffe
move.d 0x78134452,r3
add.w [r5+],r3
test_cc 0 0 0 1
checkr3 78133bdb
moveq -1,r3
add.b [r5],r3
test_cc 0 0 0 1
addq 1,r5
checkr3 ffffff01
moveq 2,r3
add.b [r5],r3
test_cc 0 0 0 1
checkr3 1
move.d 0xff,r3
add.b [r5],r3
test_cc 1 0 0 1
checkr3 fe
move.d 0xfeda49ff,r3
add.b [r5+],r3
test_cc 1 0 0 1
checkr3 feda49fe
move.d 0x78134452,r3
add.b [r5+],r3
test_cc 1 0 0 0
checkr3 781344db
move.d 0x78134452,r3
add.b [r5],r3
test_cc 1 0 1 0
checkr3 781344d0
quit

125
tests/cris/check_addo.c Normal file
View file

@ -0,0 +1,125 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "sys.h"
#include "crisutils.h"
/* this would be better to do in asm, it's an orgy in GCC inline asm now. */
#define cris_addo_b(o, v) \
asm volatile ("addo.b\t[%0], %1, $acr\n" : : "r" (o), "r" (v) : "acr");
#define cris_addo_w(o, v) \
asm volatile ("addo.w\t[%0], %1, $acr\n" : : "r" (o), "r" (v) : "acr");
#define cris_addo_d(o, v) \
asm volatile ("addo.d\t[%0], %1, $acr\n" : : "r" (o), "r" (v) : "acr");
#define cris_addo_pi_b(o, v) \
asm volatile ("addo.b\t[%0+], %1, $acr\n" \
: "+b" (o): "r" (v) : "acr");
#define cris_addo_pi_w(o, v) \
asm volatile ("addo.w\t[%0+], %1, $acr\n" \
: "+b" (o): "r" (v) : "acr");
#define cris_addo_pi_d(o, v) \
asm volatile ("addo.d\t[%0+], %1, $acr\n" \
: "+b" (o): "r" (v) : "acr");
struct {
uint32_t v1;
uint16_t v2;
uint32_t v3;
uint8_t v4;
uint8_t v5;
uint16_t v6;
uint32_t v7;
} y = {
32769,
-1,
5,
3, -4,
2,
-76789887
};
static int x[3] = {0x55aa77ff, 0xccff2244, 0x88ccee19};
int main(void)
{
int *r;
unsigned char *t, *p;
/* Note, this test-case will trig an unaligned access, partly
to x[0] and to [x1]. */
t = (unsigned char *)x;
t -= 32768;
p = (unsigned char *) &y.v1;
mb(); /* dont reorder anything beyond here. */
cris_tst_cc_init();
asm volatile ("setf\tzvnc\n");
cris_addo_pi_d(p, t);
cris_tst_cc(1, 1, 1, 1);
asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
if (*r != 0x4455aa77)
err();
t += 32770;
mb(); /* dont reorder anything beyond here. */
cris_tst_cc_init();
asm volatile ("setf\tzvnc\n");
cris_addo_pi_w(p, t);
cris_tst_cc(1, 1, 1, 1);
asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
if (*r != 0x4455aa77)
err();
mb(); /* dont reorder anything beyond here. */
cris_tst_cc_init();
asm volatile ("setf\tzvnc\n");
cris_addo_d(p, r);
cris_tst_cc(1, 1, 1, 1);
p += 4;
asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
if (*r != 0xee19ccff)
err();
mb(); /* dont reorder anything beyond here. */
cris_tst_cc_init();
asm volatile ("setf\tzvnc\n");
cris_addo_pi_b(p, t);
cris_tst_cc(1, 1, 1, 1);
asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
if (*(uint16_t*)r != 0xff22)
err();
mb(); /* dont reorder anything beyond here. */
cris_tst_cc_init();
asm volatile ("setf\tzvnc\n");
cris_addo_b(p, r);
cris_tst_cc(1, 1, 1, 1);
p += 1;
asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
if (*r != 0x4455aa77)
err();
mb(); /* dont reorder anything beyond here. */
cris_tst_cc_init();
asm volatile ("setf\tzvnc\n");
cris_addo_w(p, r);
cris_tst_cc(1, 1, 1, 1);
p += 2;
asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
if (*r != 0xff224455)
err();
mb(); /* dont reorder anything beyond here. */
cris_tst_cc_init();
asm volatile ("setf\tzvnc\n");
cris_addo_pi_d(p, t);
cris_tst_cc(1, 1, 1, 1);
asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
r = (void*)(((char *)r) + 76789885);
if (*r != 0x55aa77ff)
err();
pass();
return 0;
}

44
tests/cris/check_addoq.c Normal file
View file

@ -0,0 +1,44 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "sys.h"
#include "crisutils.h"
/* this would be better to do in asm, it's an orgy in GCC inline asm now. */
/* ACR will be clobbered. */
#define cris_addoq(o, v) \
asm volatile ("addoq\t%1, %0, $acr\n" : : "r" (v), "i" (o) : "acr");
int main(void)
{
int x[3] = {0x55aa77ff, 0xccff2244, 0x88ccee19};
int *p, *t = x + 1;
cris_tst_cc_init();
asm volatile ("setf\tzvnc\n");
cris_addoq(0, t);
cris_tst_cc(1, 1, 1, 1);
asm volatile ("move.d\t$acr, %0\n" : "=r" (p));
if (*p != 0xccff2244)
err();
cris_tst_cc_init();
asm volatile ("setf\tzvnc\n");
cris_addoq(4, t);
cris_tst_cc(1, 1, 1, 1);
asm volatile ("move.d\t$acr, %0\n" : "=r" (p));
if (*p != 0x88ccee19)
err();
cris_tst_cc_init();
asm volatile ("clearf\tzvnc\n");
cris_addoq(-8, t + 1);
cris_tst_cc(0, 0, 0, 0);
asm volatile ("move.d\t$acr, %0\n" : "=r" (p));
if (*p != 0x55aa77ff)
err();
pass();
return 0;
}

47
tests/cris/check_addq.s Normal file
View file

@ -0,0 +1,47 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: ffffffff\n0\n1\n100\n10000\n47\n67\na6\n80000001\n
.include "testutils.inc"
start
moveq -2,r3
addq 1,r3
test_cc 1 0 0 0
checkr3 ffffffff
addq 1,r3
test_cc 0 1 0 1
checkr3 0
addq 1,r3
test_cc 0 0 0 0
checkr3 1
move.d 0xff,r3
addq 1,r3
test_cc 0 0 0 0
checkr3 100
move.d 0xffff,r3
addq 1,r3
test_cc 0 0 0 0
checkr3 10000
move.d 0x42,r3
addq 5,r3
test_cc 0 0 0 0
checkr3 47
addq 32,r3
test_cc 0 0 0 0
checkr3 67
addq 63,r3
test_cc 0 0 0 0
checkr3 a6
move.d 0x7ffffffe,r3
addq 3,r3
test_cc 1 0 1 0
checkr3 80000001
quit

96
tests/cris/check_addr.s Normal file
View file

@ -0,0 +1,96 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 1\n1\n1fffe\nfffffffe\ncc463bdb\nffff0001\n1\nfffe\nfedafffe\n78133bdb\nffffff01\n1\nfe\nfeda49fe\n781344db\n
.include "testutils.inc"
start
moveq -1,r3
moveq 2,r4
add.d r4,r3
test_cc 0 0 0 1
checkr3 1
moveq 2,r3
moveq -1,r4
add.d r4,r3
test_cc 0 0 0 1
checkr3 1
move.d 0xffff,r4
move.d r4,r3
add.d r4,r3
test_cc 0 0 0 0
checkr3 1fffe
moveq -1,r4
move.d r4,r3
add.d r4,r3
test_cc 1 0 0 1
checkr3 fffffffe
move.d 0x5432f789,r4
move.d 0x78134452,r3
add.d r4,r3
test_cc 1 0 1 0
checkr3 cc463bdb
moveq -1,r3
moveq 2,r4
add.w r4,r3
test_cc 0 0 0 1
checkr3 ffff0001
moveq 2,r3
moveq -1,r4
add.w r4,r3
test_cc 0 0 0 1
checkr3 1
move.d 0xffff,r4
move.d r4,r3
add.w r4,r3
test_cc 1 0 0 1
checkr3 fffe
move.d 0xfedaffff,r4
move.d r4,r3
add.w r4,r3
test_cc 1 0 0 1
checkr3 fedafffe
move.d 0x5432f789,r4
move.d 0x78134452,r3
add.w r4,r3
test_cc 0 0 0 1
checkr3 78133bdb
moveq -1,r3
moveq 2,r4
add.b r4,r3
test_cc 0 0 0 1
checkr3 ffffff01
moveq 2,r3
moveq -1,r4
add.b r4,r3
test_cc 0 0 0 1
checkr3 1
move.d 0xff,r4
move.d r4,r3
add.b r4,r3
test_cc 1 0 0 1
checkr3 fe
move.d 0xfeda49ff,r4
move.d r4,r3
add.b r4,r3
test_cc 1 0 0 1
checkr3 feda49fe
move.d 0x5432f789,r4
move.d 0x78134452,r3
add.b r4,r3
test_cc 1 0 0 0
checkr3 781344db
quit

91
tests/cris/check_addxc.s Normal file
View file

@ -0,0 +1,91 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 1\n1\n101\n10001\n100fe\n1fffe\nfffe\nfffe\nfffffffe\nfe\nfffffffe\n781344db\n781343db\n78143bdb\n78133bdb\n800000ed\n0\n
.include "testutils.inc"
start
moveq 2,r3
adds.b 0xff,r3
test_cc 0 0 0 1
checkr3 1
moveq 2,r3
adds.w 0xffff,r3
test_cc 0 0 0 1
checkr3 1
moveq 2,r3
addu.b 0xff,r3
checkr3 101
moveq 2,r3
move.d 0xffffffff,r4
addu.w -1,r3
test_cc 0 0 0 0
checkr3 10001
move.d 0xffff,r3
addu.b -1,r3
test_cc 0 0 0 0
checkr3 100fe
move.d 0xffff,r3
addu.w -1,r3
test_cc 0 0 0 0
checkr3 1fffe
move.d 0xffff,r3
adds.b 0xff,r3
test_cc 0 0 0 1
checkr3 fffe
move.d 0xffff,r3
adds.w 0xffff,r3
test_cc 0 0 0 1
checkr3 fffe
moveq -1,r3
adds.b 0xff,r3
test_cc 1 0 0 1
checkr3 fffffffe
moveq -1,r3
adds.w 0xff,r3
test_cc 0 0 0 1
checkr3 fe
moveq -1,r3
adds.w 0xffff,r3
test_cc 1 0 0 1
checkr3 fffffffe
move.d 0x78134452,r3
addu.b 0x89,r3
test_cc 0 0 0 0
checkr3 781344db
move.d 0x78134452,r3
adds.b 0x89,r3
test_cc 0 0 0 1
checkr3 781343db
move.d 0x78134452,r3
addu.w 0xf789,r3
test_cc 0 0 0 0
checkr3 78143bdb
move.d 0x78134452,r3
adds.w 0xf789,r3
test_cc 0 0 0 1
checkr3 78133bdb
move.d 0x7fffffee,r3
addu.b 0xff,r3
test_cc 1 0 1 0
checkr3 800000ed
move.d 0x1,r3
adds.w 0xffff,r3
test_cc 0 1 0 1
checkr3 0
quit

106
tests/cris/check_addxm.s Normal file
View file

@ -0,0 +1,106 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 1\n1\n101\n10001\n100fe\n1fffe\nfffe\nfffe\nfffffffe\nfe\nfffffffe\n781344db\n781343db\n78143bdb\n78133bdb\n800000ed\n0\n
.include "testutils.inc"
.data
x:
.byte 0xff
.word 0xffff
.word 0xff
.word 0xffff
.byte 0x89
.word 0xf789
.byte 0xff
.word 0xffff
start
moveq 2,r3
move.d x,r5
adds.b [r5+],r3
test_cc 0 0 0 1
checkr3 1
moveq 2,r3
adds.w [r5+],r3
test_cc 0 0 0 1
checkr3 1
moveq 2,r3
subq 3,r5
addu.b [r5+],r3
test_cc 0 0 0 0
checkr3 101
moveq 2,r3
addu.w [r5+],r3
subq 3,r5
test_cc 0 0 0 0
checkr3 10001
move.d 0xffff,r3
addu.b [r5],r3
test_cc 0 0 0 0
checkr3 100fe
move.d 0xffff,r3
addu.w [r5],r3
test_cc 0 0 0 0
checkr3 1fffe
move.d 0xffff,r3
adds.b [r5],r3
test_cc 0 0 0 1
checkr3 fffe
move.d 0xffff,r3
adds.w [r5],r3
test_cc 0 0 0 1
checkr3 fffe
moveq -1,r3
adds.b [r5],r3
test_cc 1 0 0 1
addq 3,r5
checkr3 fffffffe
moveq -1,r3
adds.w [r5+],r3
test_cc 0 0 0 1
checkr3 fe
moveq -1,r3
adds.w [r5+],r3
test_cc 1 0 0 1
checkr3 fffffffe
move.d 0x78134452,r3
addu.b [r5],r3
test_cc 0 0 0 0
checkr3 781344db
move.d 0x78134452,r3
adds.b [r5+],r3
test_cc 0 0 0 1
checkr3 781343db
move.d 0x78134452,r3
addu.w [r5],r3
test_cc 0 0 0 0
checkr3 78143bdb
move.d 0x78134452,r3
adds.w [r5+],r3
test_cc 0 0 0 1
checkr3 78133bdb
move.d 0x7fffffee,r3
addu.b [r5+],r3
test_cc 1 0 1 0
checkr3 800000ed
move.d 0x1,r3
adds.w [r5+],r3
test_cc 0 1 0 1
checkr3 0
quit

96
tests/cris/check_addxr.s Normal file
View file

@ -0,0 +1,96 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 1\n1\n1fffe\nfffffffe\ncc463bdb\nffff0001\n1\nfffe\nfedafffe\n78133bdb\nffffff01\n1\nfe\nfeda49fe\n781344db\n
.include "testutils.inc"
start
moveq -1,r3
moveq 2,r4
add.d r4,r3
test_cc 0 0 0 1
checkr3 1
moveq 2,r3
moveq -1,r4
add.d r4,r3
test_cc 0 0 0 1
checkr3 1
move.d 0xffff,r4
move.d r4,r3
add.d r4,r3
test_cc 0 0 0 0
checkr3 1fffe
moveq -1,r4
move.d r4,r3
add.d r4,r3
test_cc 1 0 0 1
checkr3 fffffffe
move.d 0x5432f789,r4
move.d 0x78134452,r3
add.d r4,r3
test_cc 1 0 1 0
checkr3 cc463bdb
moveq -1,r3
moveq 2,r4
add.w r4,r3
test_cc 0 0 0 1
checkr3 ffff0001
moveq 2,r3
moveq -1,r4
add.w r4,r3
test_cc 0 0 0 1
checkr3 1
move.d 0xffff,r4
move.d r4,r3
add.w r4,r3
test_cc 1 0 0 1
checkr3 fffe
move.d 0xfedaffff,r4
move.d r4,r3
add.w r4,r3
test_cc 1 0 0 1
checkr3 fedafffe
move.d 0x5432f789,r4
move.d 0x78134452,r3
add.w r4,r3
test_cc 0 0 0 1
checkr3 78133bdb
moveq -1,r3
moveq 2,r4
add.b r4,r3
test_cc 0 0 0 1
checkr3 ffffff01
moveq 2,r3
moveq -1,r4
add.b r4,r3
test_cc 0 0 0 1
checkr3 1
move.d 0xff,r4
move.d r4,r3
add.b r4,r3
test_cc 1 0 0 1
checkr3 fe
move.d 0xfeda49ff,r4
move.d r4,r3
add.b r4,r3
test_cc 1 0 0 1
checkr3 feda49fe
move.d 0x5432f789,r4
move.d 0x78134452,r3
add.b r4,r3
test_cc 1 0 0 0
checkr3 781344db
quit

80
tests/cris/check_andc.s Normal file
View file

@ -0,0 +1,80 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 2\n2\nffff\nffffffff\n50124400\nffff0002\n2\nfffff\nfedaff0f\n78134400\nffffff02\n2\nf02\n78134401\n78134400\n
.include "testutils.inc"
start
moveq -1,r3
and.d 2,r3
test_move_cc 0 0 0 0
checkr3 2
moveq 2,r3
and.d -1,r3
test_move_cc 0 0 0 0
checkr3 2
move.d 0xffff,r3
and.d 0xffff,r3
test_move_cc 0 0 0 0
checkr3 ffff
moveq -1,r3
and.d -1,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0x78134452,r3
and.d 0x5432f789,r3
test_move_cc 0 0 0 0
checkr3 50124400
moveq -1,r3
and.w 2,r3
test_move_cc 0 0 0 0
checkr3 ffff0002
moveq 2,r3
and.w -1,r3
test_move_cc 0 0 0 0
checkr3 2
move.d 0xfffff,r3
and.w 0xffff,r3
test_move_cc 1 0 0 0
checkr3 fffff
move.d 0xfedaffaf,r3
and.w 0xff5f,r3
test_move_cc 1 0 0 0
checkr3 fedaff0f
move.d 0x78134452,r3
and.w 0xf789,r3
test_move_cc 0 0 0 0
checkr3 78134400
moveq -1,r3
and.b 2,r3
test_move_cc 0 0 0 0
checkr3 ffffff02
moveq 2,r3
and.b -1,r3
test_move_cc 0 0 0 0
checkr3 2
move.d 0xfa7,r3
and.b 0x5a,r3
test_move_cc 0 0 0 0
checkr3 f02
move.d 0x78134453,r3
and.b 0x89,r3
test_move_cc 0 0 0 0
checkr3 78134401
and.b 0,r3
test_move_cc 0 1 0 0
checkr3 78134400
quit

90
tests/cris/check_andm.s Normal file
View file

@ -0,0 +1,90 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 2\n2\nffff\nffffffff\n50124400\nffff0002\n2\nfffff\nfedaff0f\n78134400\nffffff02\n2\nf02\n78134401\n78134400\n
.include "testutils.inc"
.data
x:
.dword 2,-1,0xffff,-1,0x5432f789
.word 2,-1,0xffff,0xff5f,0xf789
.byte 2,-1,0x5a,0x89,0
start
moveq -1,r3
move.d x,r5
and.d [r5+],r3
test_move_cc 0 0 0 0
checkr3 2
moveq 2,r3
and.d [r5],r3
test_move_cc 0 0 0 0
addq 4,r5
checkr3 2
move.d 0xffff,r3
and.d [r5+],r3
test_move_cc 0 0 0 0
checkr3 ffff
moveq -1,r3
and.d [r5+],r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0x78134452,r3
and.d [r5+],r3
test_move_cc 0 0 0 0
checkr3 50124400
moveq -1,r3
and.w [r5+],r3
test_move_cc 0 0 0 0
checkr3 ffff0002
moveq 2,r3
and.w [r5+],r3
test_move_cc 0 0 0 0
checkr3 2
move.d 0xfffff,r3
and.w [r5],r3
test_move_cc 1 0 0 0
addq 2,r5
checkr3 fffff
move.d 0xfedaffaf,r3
and.w [r5+],r3
test_move_cc 1 0 0 0
checkr3 fedaff0f
move.d 0x78134452,r3
and.w [r5+],r3
test_move_cc 0 0 0 0
checkr3 78134400
moveq -1,r3
and.b [r5],r3
test_move_cc 0 0 0 0
addq 1,r5
checkr3 ffffff02
moveq 2,r3
and.b [r5+],r3
test_move_cc 0 0 0 0
checkr3 2
move.d 0xfa7,r3
and.b [r5+],r3
test_move_cc 0 0 0 0
checkr3 f02
move.d 0x78134453,r3
and.b [r5+],r3
test_move_cc 0 0 0 0
checkr3 78134401
and.b [r5],r3
test_move_cc 0 1 0 0
checkr3 78134400
quit

46
tests/cris/check_andq.s Normal file
View file

@ -0,0 +1,46 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 2\n2\nffff\nffffffff\n1f\nffffffe0\n78134452\n0\n
.include "testutils.inc"
start
moveq -1,r3
andq 2,r3
test_move_cc 0 0 0 0
checkr3 2
moveq 2,r3
andq -1,r3
test_move_cc 0 0 0 0
checkr3 2
move.d 0xffff,r3
andq -1,r3
test_move_cc 0 0 0 0
checkr3 ffff
moveq -1,r3
andq -1,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq -1,r3
andq 31,r3
test_move_cc 0 0 0 0
checkr3 1f
moveq -1,r3
andq -32,r3
test_move_cc 1 0 0 0
checkr3 ffffffe0
move.d 0x78134457,r3
andq -14,r3
test_move_cc 0 0 0 0
checkr3 78134452
moveq 0,r3
andq -14,r3
test_move_cc 0 1 0 0
checkr3 0
quit

95
tests/cris/check_andr.s Normal file
View file

@ -0,0 +1,95 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 2\n2\nffff\nffffffff\n50124400\nffff0002\n2\nfffff\nfedaff0f\n78134400\nffffff02\n2\nf02\n78134401\n78134400\n
.include "testutils.inc"
start
moveq -1,r3
moveq 2,r4
and.d r4,r3
test_move_cc 0 0 0 0
checkr3 2
moveq 2,r3
moveq -1,r4
and.d r4,r3
test_move_cc 0 0 0 0
checkr3 2
move.d 0xffff,r4
move.d r4,r3
and.d r4,r3
test_move_cc 0 0 0 0
checkr3 ffff
moveq -1,r4
move.d r4,r3
and.d r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0x5432f789,r4
move.d 0x78134452,r3
and.d r4,r3
test_move_cc 0 0 0 0
checkr3 50124400
moveq -1,r3
moveq 2,r4
and.w r4,r3
test_move_cc 0 0 0 0
checkr3 ffff0002
moveq 2,r3
moveq -1,r4
and.w r4,r3
test_move_cc 0 0 0 0
checkr3 2
move.d 0xfffff,r3
move.d 0xffff,r4
and.w r4,r3
test_move_cc 1 0 0 0
checkr3 fffff
move.d 0xfedaffaf,r3
move.d 0xff5f,r4
and.w r4,r3
test_move_cc 1 0 0 0
checkr3 fedaff0f
move.d 0x5432f789,r4
move.d 0x78134452,r3
and.w r4,r3
test_move_cc 0 0 0 0
checkr3 78134400
moveq -1,r3
moveq 2,r4
and.b r4,r3
test_move_cc 0 0 0 0
checkr3 ffffff02
moveq 2,r3
moveq -1,r4
and.b r4,r3
test_move_cc 0 0 0 0
checkr3 2
move.d 0x5a,r4
move.d 0xfa7,r3
and.b r4,r3
test_move_cc 0 0 0 0
checkr3 f02
move.d 0x5432f789,r4
move.d 0x78134453,r3
and.b r4,r3
test_move_cc 0 0 0 0
checkr3 78134401
moveq 0,r7
and.b r7,r3
test_move_cc 0 1 0 0
checkr3 78134400
quit

230
tests/cris/check_asr.s Normal file
View file

@ -0,0 +1,230 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: ffffffff\n1\nffffffff\nffffffff\n5a67f\nffffffff\nffffffff\nffffffff\nf699fc67\nffffffff\n1\nffffffff\nffffffff\n5a67f\nda67ffff\nda67ffff\nda67ffff\nda67fc67\nffffffff\nffffffff\n1\nffffffff\nffffffff\n5a670007\nda67f1ff\nda67f1ff\nda67f1ff\nda67f1e7\nffffffff\nffffffff\n1\nffffffff\nffffffff\nffffffff\n5a67f1ff\n5a67f1f9\n0\n5a670000\n
.include "testutils.inc"
start
moveq -1,r3
asrq 0,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq 2,r3
asrq 1,r3
test_move_cc 0 0 0 0
checkr3 1
moveq -1,r3
asrq 31,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq -1,r3
asrq 15,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0x5a67f19f,r3
asrq 12,r3
test_move_cc 0 0 0 0
checkr3 5a67f
move.d 0xda67f19f,r3
move.d 31,r4
asr.d r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0xda67f19f,r3
move.d 32,r4
asr.d r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0xda67f19f,r3
move.d 33,r4
asr.d r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0xda67f19f,r3
move.d 66,r4
asr.d r4,r3
test_move_cc 1 0 0 0
checkr3 f699fc67
moveq -1,r3
moveq 0,r4
asr.d r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq 2,r3
moveq 1,r4
asr.d r4,r3
test_move_cc 0 0 0 0
checkr3 1
moveq -1,r3
moveq 31,r4
asr.d r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq -1,r3
moveq 15,r4
asr.d r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0x5a67f19f,r3
moveq 12,r4
asr.d r4,r3
test_move_cc 0 0 0 0
checkr3 5a67f
move.d 0xda67f19f,r3
move.d 31,r4
asr.w r4,r3
test_move_cc 1 0 0 0
checkr3 da67ffff
move.d 0xda67f19f,r3
move.d 32,r4
asr.w r4,r3
test_move_cc 1 0 0 0
checkr3 da67ffff
move.d 0xda67f19f,r3
move.d 33,r4
asr.w r4,r3
test_move_cc 1 0 0 0
checkr3 da67ffff
move.d 0xda67f19f,r3
move.d 66,r4
asr.w r4,r3
test_move_cc 1 0 0 0
checkr3 da67fc67
moveq -1,r3
moveq 0,r4
asr.w r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq -1,r3
moveq 1,r4
asr.w r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq 2,r3
moveq 1,r4
asr.w r4,r3
test_move_cc 0 0 0 0
checkr3 1
moveq -1,r3
moveq 31,r4
asr.w r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq -1,r3
moveq 15,r4
asr.w r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0x5a67719f,r3
moveq 12,r4
asr.w r4,r3
test_move_cc 0 0 0 0
checkr3 5a670007
move.d 0xda67f19f,r3
move.d 31,r4
asr.b r4,r3
test_move_cc 1 0 0 0
checkr3 da67f1ff
move.d 0xda67f19f,r3
move.d 32,r4
asr.b r4,r3
test_move_cc 1 0 0 0
checkr3 da67f1ff
move.d 0xda67f19f,r3
move.d 33,r4
asr.b r4,r3
test_move_cc 1 0 0 0
checkr3 da67f1ff
move.d 0xda67f19f,r3
move.d 66,r4
asr.b r4,r3
test_move_cc 1 0 0 0
checkr3 da67f1e7
moveq -1,r3
moveq 0,r4
asr.b r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq -1,r3
moveq 1,r4
asr.b r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq 2,r3
moveq 1,r4
asr.b r4,r3
test_move_cc 0 0 0 0
checkr3 1
moveq -1,r3
moveq 31,r4
asr.b r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq -1,r3
moveq 15,r4
asr.b r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq -1,r3
moveq 7,r4
asr.b r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
; FIXME: was wrong.
move.d 0x5a67f19f,r3
moveq 12,r4
asr.b r4,r3
test_move_cc 1 0 0 0
checkr3 5a67f1ff
; FIXME: was wrong.
move.d 0x5a67f19f,r3
moveq 4,r4
asr.b r4,r3
test_move_cc 1 0 0 0
checkr3 5a67f1f9
move.d 0x5a67f19f,r3
asrq 31,r3
test_move_cc 0 1 0 0
checkr3 0
move.d 0x5a67419f,r3
moveq 16,r4
asr.w r4,r3
test_move_cc 0 1 0 0
checkr3 5a670000
quit

93
tests/cris/check_ba.s Normal file
View file

@ -0,0 +1,93 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: a\n
.set smalloffset,0
.set largeoffset,0
.macro fail
jump _fail
.endm
.global main
main:
moveq 0,$r3
; Short forward branch.
ba 0f
addq 1,$r3
fail
; Max short forward branch.
1:
ba 2f
addq 1,$r3
fail
; Short backward branch.
0:
ba 1b
addq 1,$r3
fail
.space 254-2+smalloffset+1b-.,0
moveq 0,$r3
2:
; Transit branch (long).
ba 3f
addq 1,$r3
fail
moveq 0,$r3
4:
; Long forward branch.
ba 5f
addq 1,$r3
fail
.space 256-2-smalloffset+4b-.,0
moveq 0,$r3
; Max short backward branch.
3:
ba 4b
addq 1,$r3
fail
5:
; Max long forward branch.
ba 6f
addq 1,$r3
fail
.space 32766+largeoffset-2+5b-.,0
moveq 0,$r3
6:
; Transit branch.
ba 7f
addq 1,$r3
fail
moveq 0,$r3
9:
jsr pass
nop
; Transit branch.
moveq 0,$r3
7:
ba 8f
addq 1,$r3
fail
.space 32768-largeoffset+9b-.,0
8:
; Max long backward branch.
ba 9b
addq 1,$r3
fail

102
tests/cris/check_bas.s Normal file
View file

@ -0,0 +1,102 @@
# mach: crisv32
# output: 0\n0\n0\nfb349abc\n0\n12124243\n0\n0\neab5baad\n0\nefb37832\n
.include "testutils.inc"
start
x:
setf zncv
bsr 0f
nop
0:
test_cc 1 1 1 1
move srp,r3
sub.d 0b,r3
checkr3 0
bas 1f,mof
moveq 0,r0
6:
nop
quit
2:
move srp,r3
sub.d 3f,r3
checkr3 0
move srp,r4
subq 4,r4
move.d [r4],r3
checkr3 fb349abc
basc 4f,mof
nop
.dword 0x12124243
7:
nop
quit
8:
move mof,r3
sub.d 7f,r3
checkr3 0
move mof,r4
subq 4,r4
move.d [r4],r3
checkr3 eab5baad
jasc 9f,mof
nop
.dword 0xefb37832
0:
quit
quit
9:
move mof,r3
sub.d 0b,r3
checkr3 0
move mof,r4
subq 4,r4
move.d [r4],r3
checkr3 efb37832
quit
4:
move mof,r3
sub.d 7b,r3
checkr3 0
move mof,r4
subq 4,r4
move.d [r4],r3
checkr3 12124243
basc 5f,bz
moveq 0,r3
.dword 0x7634aeba
quit
.space 32770,0
1:
move mof,r3
sub.d 6b,r3
checkr3 0
bsrc 2b
nop
.dword 0xfb349abc
3:
quit
5:
move mof,r3
sub.d 7b,r3
checkr3 0
move.d 8b,r6
jasc r6,mof
nop
.dword 0xeab5baad
7:
quit

197
tests/cris/check_bcc.s Normal file
View file

@ -0,0 +1,197 @@
.global main
.type main, @function
main:
clearf nzvc
setf nzv
bcc 0f
addq 1, $r3
jump dofail
0:
clearf nzvc
setf nzv
bcs dofail
addq 1,$r3
clearf nzvc
setf ncv
bne 1f
addq 1, $r3
fail:
dofail:
jump _fail
1:
clearf nzvc
setf ncv
beq dofail
addq 1,$r3
clearf nzvc
setf ncz
bvc 2f
addq 1,$r3
jump dofail
2:
clearf nzvc
setf ncz
bvs dofail
addq 1,$r3
clearf nzvc
setf vcz
bpl 3f
addq 1,$r3
jump fail
3:
clearf nzvc
setf vcz
bmi dofail
addq 1,$r3
clearf nzvc
setf nv
bls dofail
addq 1,$r3
clearf nzvc
setf nv
bhi 4f
addq 1,$r3
jump dofail
4:
clearf nzvc
setf zc
bge 5f
addq 1,$r3
jump dofail
5:
clearf nzvc
setf zc
blt dofail
addq 1,$r3
clearf nzvc
setf c
bgt 6f
addq 1,$r3
jump fail
6:
clearf nzvc
setf c
ble dofail
addq 1,$r3
;;;;;;;;;;
setf nzvc
clearf nzv
bcc dofail
addq 1,$r3
setf nzvc
clearf nzv
bcs 0f
addq 1,$r3
jump fail
0:
setf nzvc
clearf ncv
bne dofail
addq 1,$r3
setf nzvc
clearf ncv
beq 1f
addq 1,$r3
jump fail
1:
setf nzvc
clearf ncz
bvc dofail
addq 1,$r3
setf nzvc
clearf ncz
bvs 2f
addq 1,$r3
jump fail
2:
setf nzvc
clearf vcz
bpl dofail
addq 1,$r3
setf nzvc
clearf vcz
bmi 3f
addq 1,$r3
jump fail
3:
setf nzvc
clearf nv
bls 4f
addq 1,$r3
jump fail
4:
setf nzvc
clearf nv
bhi dofail
addq 1,$r3
setf zvc
clearf nzc
bge dofail
addq 1,$r3
setf nzc
clearf vzc
blt 5f
addq 1,$r3
jump fail
5:
setf nzvc
clearf c
bgt dofail
addq 1,$r3
setf nzvc
clearf c
ble 6f
addq 1,$r3
jump fail
6:
; do a forward branch.
ba 2f
nop
.fill 100
1:
ba 3f
nop
.fill 800
2:
ba 1b
nop
.fill 1024
3:
moveq 31, $r0
1: bne 1b
subq 1, $r0
jsr pass
moveq 0, $r10
ret
nop

139
tests/cris/check_bound.c Normal file
View file

@ -0,0 +1,139 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "sys.h"
#include "crisutils.h"
extern inline int cris_bound_b(int v, int b) {
int r = v;
asm ("bound.b\t%1, %0\n" : "+r" (r) : "ri" (b));
return r;
}
extern inline int cris_bound_w(int v, int b) {
int r = v;
asm ("bound.w\t%1, %0\n" : "+r" (r) : "ri" (b));
return r;
}
extern inline int cris_bound_d(int v, int b) {
int r = v;
asm ("bound.d\t%1, %0\n" : "+r" (r) : "ri" (b));
return r;
}
int main(void)
{
int r;
cris_tst_cc_init();
r = cris_bound_d(-1, 2);
cris_tst_cc(0, 0, 0, 0);
if (r != 2)
err();
cris_tst_cc_init();
r = cris_bound_d(2, 0xffffffff);
cris_tst_cc(0, 0, 0, 0);
if (r != 2)
err();
cris_tst_cc_init();
r = cris_bound_d(0xffff, 0xffff);
cris_tst_cc(0, 0, 0, 0);
if (r != 0xffff)
err();
cris_tst_cc_init();
r = cris_bound_d(-1, 0xffffffff);
cris_tst_cc(1, 0, 0, 0);
if (r != 0xffffffff)
err();
cris_tst_cc_init();
r = cris_bound_d(0x78134452, 0x5432f789);
cris_tst_cc(0, 0, 0, 0);
if (r != 0x5432f789)
err();
cris_tst_cc_init();
r = cris_bound_w(-1, 2);
cris_tst_cc(0, 0, 0, 0);
if (r != 2)
err();
cris_tst_cc_init();
r = cris_bound_w(-1, 0xffff);
cris_tst_cc(0, 0, 0, 0);
if (r != 0xffff)
err();
cris_tst_cc_init();
r = cris_bound_w(2, 0xffff);
cris_tst_cc(0, 0, 0, 0);
if (r != 2)
err();
cris_tst_cc_init();
r = cris_bound_w(0xfedaffff, 0xffff);
cris_tst_cc(0, 0, 0, 0);
if (r != 0xffff)
err();
cris_tst_cc_init();
r = cris_bound_w(0x78134452, 0xf789);
cris_tst_cc(0, 0, 0, 0);
if (r != 0xf789)
err();
cris_tst_cc_init();
r = cris_bound_b(-1, 2);
cris_tst_cc(0, 0, 0, 0);
if (r != 2)
err();
cris_tst_cc_init();
r = cris_bound_b(2, 0xff);
cris_tst_cc(0, 0, 0, 0);
if (r != 2)
err();
cris_tst_cc_init();
r = cris_bound_b(-1, 0xff);
cris_tst_cc(0, 0, 0, 0);
if (r != 0xff)
err();
cris_tst_cc_init();
r = cris_bound_b(0xff, 0xff);
cris_tst_cc(0, 0, 0, 0);
if (r != 0xff)
err();
cris_tst_cc_init();
r = cris_bound_b(0xfeda49ff, 0xff);
cris_tst_cc(0, 0, 0, 0);
if (r != 0xff)
err();
cris_tst_cc_init();
r = cris_bound_b(0x78134452, 0x89);
cris_tst_cc(0, 0, 0, 0);
if (r != 0x89)
err();
cris_tst_cc_init();
r = cris_bound_w(0x78134452, 0);
cris_tst_cc(0, 1, 0, 0);
if (r != 0)
err();
cris_tst_cc_init();
r = cris_bound_b(0xffff, -1);
cris_tst_cc(0, 0, 0, 0);
if (r != 0xff)
err();
pass();
return 0;
}

101
tests/cris/check_boundc.s Normal file
View file

@ -0,0 +1,101 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 2\n2\nffff\nffffffff\n5432f789\n2\nffff\n2\nffff\nffff\nf789\n2\n2\nff\nff\nff\n89\n0\nff\n
.include "testutils.inc"
start
moveq -1,r3
moveq 2,r4
bound.d 2,r3
test_move_cc 0 0 0 0
checkr3 2
moveq 2,r3
bound.d 0xffffffff,r3
test_move_cc 0 0 0 0
checkr3 2
move.d 0xffff,r3
bound.d 0xffff,r3
test_move_cc 0 0 0 0
checkr3 ffff
moveq -1,r3
bound.d 0xffffffff,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0x78134452,r3
bound.d 0x5432f789,r3
test_move_cc 0 0 0 0
checkr3 5432f789
moveq -1,r3
bound.w 2,r3
test_move_cc 0 0 0 0
checkr3 2
moveq -1,r3
bound.w 0xffff,r3
test_move_cc 0 0 0 0
checkr3 ffff
moveq 2,r3
bound.w 0xffff,r3
test_move_cc 0 0 0 0
checkr3 2
move.d 0xffff,r3
bound.w 0xffff,r3
test_move_cc 0 0 0 0
checkr3 ffff
move.d 0xfedaffff,r3
bound.w 0xffff,r3
test_move_cc 0 0 0 0
checkr3 ffff
move.d 0x78134452,r3
bound.w 0xf789,r3
test_move_cc 0 0 0 0
checkr3 f789
moveq -1,r3
bound.b 2,r3
test_move_cc 0 0 0 0
checkr3 2
moveq 2,r3
bound.b 0xff,r3
test_move_cc 0 0 0 0
checkr3 2
moveq -1,r3
bound.b 0xff,r3
test_move_cc 0 0 0 0
checkr3 ff
move.d 0xff,r3
bound.b 0xff,r3
test_move_cc 0 0 0 0
checkr3 ff
move.d 0xfeda49ff,r3
bound.b 0xff,r3
test_move_cc 0 0 0 0
checkr3 ff
move.d 0x78134452,r3
bound.b 0x89,r3
test_move_cc 0 0 0 0
checkr3 89
bound.w 0,r3
test_move_cc 0 1 0 0
checkr3 0
move.d 0xffff,r3
bound.b -1,r3
test_move_cc 0 0 0 0
checkr3 ff
quit

125
tests/cris/check_boundr.s Normal file
View file

@ -0,0 +1,125 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 2\n2\nffff\nffffffff\n5432f789\n2\n2\nffff\nffff\nffff\nf789\n2\n2\nff\nff\n89\nfeda4953\nfeda4962\n0\n0\n
.include "testutils.inc"
start
moveq -1,r3
moveq 2,r4
bound.d r4,r3
test_move_cc 0 0 0 0
checkr3 2
moveq 2,r3
moveq -1,r4
bound.d r4,r3
test_move_cc 0 0 0 0
checkr3 2
move.d 0xffff,r4
move.d r4,r3
bound.d r4,r3
test_move_cc 0 0 0 0
checkr3 ffff
moveq -1,r4
move.d r4,r3
bound.d r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0x5432f789,r4
move.d 0x78134452,r3
bound.d r4,r3
test_move_cc 0 0 0 0
checkr3 5432f789
moveq -1,r3
moveq 2,r4
bound.w r4,r3
test_move_cc 0 0 0 0
checkr3 2
moveq 2,r3
moveq -1,r4
bound.w r4,r3
test_move_cc 0 0 0 0
checkr3 2
moveq -1,r3
bound.w r3,r3
test_move_cc 0 0 0 0
checkr3 ffff
move.d 0xffff,r4
move.d r4,r3
bound.w r4,r3
test_move_cc 0 0 0 0
checkr3 ffff
move.d 0xfedaffff,r4
move.d r4,r3
bound.w r4,r3
test_move_cc 0 0 0 0
checkr3 ffff
move.d 0x5432f789,r4
move.d 0x78134452,r3
bound.w r4,r3
test_move_cc 0 0 0 0
checkr3 f789
moveq -1,r3
moveq 2,r4
bound.b r4,r3
test_move_cc 0 0 0 0
checkr3 2
moveq 2,r3
moveq -1,r4
bound.b r4,r3
test_move_cc 0 0 0 0
checkr3 2
move.d 0xff,r4
move.d r4,r3
bound.b r4,r3
test_move_cc 0 0 0 0
checkr3 ff
move.d 0xfeda49ff,r4
move.d r4,r3
bound.b r4,r3
test_move_cc 0 0 0 0
checkr3 ff
move.d 0x5432f789,r4
move.d 0x78134452,r3
bound.b r4,r3
test_move_cc 0 0 0 0
checkr3 89
move.d 0xfeda4956,r3
move.d 0xfeda4953,r4
bound.d r4,r3
test_move_cc 1 0 0 0
checkr3 feda4953
move.d 0xfeda4962,r3
move.d 0xfeda4963,r4
bound.d r4,r3
test_move_cc 1 0 0 0
checkr3 feda4962
move.d 0xfeda4956,r3
move.d 0,r4
bound.d r4,r3
test_move_cc 0 1 0 0
checkr3 0
move.d 0xfeda4956,r4
move.d 0,r3
bound.d r4,r3
test_move_cc 0 1 0 0
checkr3 0
quit

87
tests/cris/check_btst.s Normal file
View file

@ -0,0 +1,87 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 1111\n
.include "testutils.inc"
start
clearf nzvc
moveq -1,r3
.if 1 ;..asm.arch.cris.v32
.else
setf vc
.endif
btstq 0,r3
test_cc 1 0 0 0
moveq 2,r3
btstq 1,r3
test_cc 1 0 0 0
moveq 4,r3
btstq 1,r3
test_cc 0 1 0 0
moveq -1,r3
btstq 31,r3
test_cc 1 0 0 0
move.d 0x5a67f19f,r3
btstq 12,r3
test_cc 1 0 0 0
move.d 0xda67f19f,r3
move.d 29,r4
btst r4,r3
test_cc 0 0 0 0
move.d 0xda67f19f,r3
move.d 32,r4
btst r4,r3
test_cc 1 0 0 0
move.d 0xda67f191,r3
move.d 33,r4
btst r4,r3
test_cc 0 0 0 0
moveq -1,r3
moveq 0,r4
btst r4,r3
test_cc 1 0 0 0
moveq 2,r3
moveq 1,r4
btst r4,r3
test_cc 1 0 0 0
moveq -1,r3
moveq 31,r4
btst r4,r3
test_cc 1 0 0 0
moveq 4,r3
btstq 1,r3
test_cc 0 1 0 0
moveq -1,r3
moveq 15,r4
btst r4,r3
test_cc 1 0 0 0
move.d 0x5a67f19f,r3
moveq 12,r4
btst r4,r3
test_cc 1 0 0 0
move.d 0x5a678000,r3
moveq 11,r4
btst r4,r3
test_cc 0 1 0 0
move.d 0x5a67f19f,r3
btst r3,r3
test_cc 0 0 0 0
move.d 0x1111,r3
checkr3 1111
quit

View file

@ -0,0 +1,17 @@
# mach: crisv32
# output: ef\nef\n
; Check that "clearf x" doesn't trivially fail.
.include "testutils.inc"
start
setf puixnzvc
clearf x ; Actually, x would be cleared by almost-all other insns.
move ccs,r3
checkr3 ef
setf puixnzvc
moveq 0, $r3 ; moveq should only clear the xflag.
move ccs,r3
checkr3 ef
quit

View file

@ -0,0 +1,36 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: ffffff00\n
; A bug resulting in a non-effectual clear.b discovered running the GCC
; testsuite; jump actually wrote to p0.
.include "testutils.inc"
start
jump 1f
nop
.p2align 8
1:
move.d y,r4
.if 0 ;0 == ..asm.arch.cris.v32
; There was a bug causing this insn to set special register p0
; (byte-clear) to 8 (low 8 bits of location after insn).
jump [r4+]
.endif
1:
move.d 0f,r4
; The corresponding bug would cause this insn too, to set p0.
jump r4
nop
quit
0:
moveq -1,r3
clear.b r3
checkr3 ffffff00
quit
y:
.dword 1b

15
tests/cris/check_cmp-2.s Normal file
View file

@ -0,0 +1,15 @@
.include "testutils.inc"
start
move.d 4294967283, $r0
move.d $r0, $r10
cmp.d $r0, $r10
beq 1f
move.d $r10, $r3
fail
1:
pass
quit

86
tests/cris/check_cmpc.s Normal file
View file

@ -0,0 +1,86 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: ffffffff\n2\nffff\nffffffff\n78134452\nffffffff\n2\nffff\nfedaffff\n78134452\nffffffff\n2\nff\nfeda49ff\n78134452\n85649282\n
.include "testutils.inc"
start
moveq -1,r3
cmp.d -2,r3
test_cc 0 0 0 0
checkr3 ffffffff
moveq 2,r3
cmp.d 1,r3
test_cc 0 0 0 0
checkr3 2
move.d 0xffff,r3
cmp.d -0xffff,r3
test_cc 0 0 0 1
checkr3 ffff
moveq -1,r3
cmp.d 1,r3
test_cc 1 0 0 0
checkr3 ffffffff
move.d 0x78134452,r3
cmp.d -0x5432f789,r3
test_cc 1 0 1 1
checkr3 78134452
moveq -1,r3
cmp.w -2,r3
test_cc 0 0 0 0
checkr3 ffffffff
moveq 2,r3
cmp.w 1,r3
test_cc 0 0 0 0
checkr3 2
move.d 0xffff,r3
cmp.w 1,r3
test_cc 1 0 0 0
checkr3 ffff
move.d 0xfedaffff,r3
cmp.w 1,r3
test_cc 1 0 0 0
checkr3 fedaffff
move.d 0x78134452,r3
cmp.w 0x877,r3
test_cc 0 0 0 0
checkr3 78134452
moveq -1,r3
cmp.b -2,r3
test_cc 0 0 0 0
checkr3 ffffffff
moveq 2,r3
cmp.b 1,r3
test_cc 0 0 0 0
checkr3 2
move.d 0xff,r3
cmp.b 1,r3
test_cc 1 0 0 0
checkr3 ff
move.d 0xfeda49ff,r3
cmp.b 1,r3
test_cc 1 0 0 0
checkr3 feda49ff
move.d 0x78134452,r3
cmp.b 0x77,r3
test_cc 1 0 0 1
checkr3 78134452
move.d 0x85649282,r3
cmp.b 0x82,r3
test_cc 0 1 0 0
checkr3 85649282
quit

96
tests/cris/check_cmpm.s Normal file
View file

@ -0,0 +1,96 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: ffffffff\n2\nffff\nffffffff\n78134452\nffffffff\n2\nffff\nfedaffff\n78134452\nffffffff\n2\nff\nfeda49ff\n78134452\n85649222\n
.include "testutils.inc"
.data
x:
.dword -2,1,-0xffff,1,-0x5432f789
.word -2,1,1,0x877
.byte -2,1,0x77
.byte 0x22
start
moveq -1,r3
move.d x,r5
cmp.d [r5+],r3
test_cc 0 0 0 0
checkr3 ffffffff
moveq 2,r3
cmp.d [r5],r3
test_cc 0 0 0 0
addq 4,r5
checkr3 2
move.d 0xffff,r3
cmp.d [r5+],r3
test_cc 0 0 0 1
checkr3 ffff
moveq -1,r3
cmp.d [r5+],r3
test_cc 1 0 0 0
checkr3 ffffffff
move.d 0x78134452,r3
cmp.d [r5+],r3
test_cc 1 0 1 1
checkr3 78134452
moveq -1,r3
cmp.w [r5+],r3
test_cc 0 0 0 0
checkr3 ffffffff
moveq 2,r3
cmp.w [r5+],r3
test_cc 0 0 0 0
checkr3 2
move.d 0xffff,r3
cmp.w [r5],r3
test_cc 1 0 0 0
checkr3 ffff
move.d 0xfedaffff,r3
cmp.w [r5+],r3
test_cc 1 0 0 0
checkr3 fedaffff
move.d 0x78134452,r3
cmp.w [r5+],r3
test_cc 0 0 0 0
checkr3 78134452
moveq -1,r3
cmp.b [r5],r3
test_cc 0 0 0 0
addq 1,r5
checkr3 ffffffff
moveq 2,r3
cmp.b [r5],r3
test_cc 0 0 0 0
checkr3 2
move.d 0xff,r3
cmp.b [r5],r3
test_cc 1 0 0 0
checkr3 ff
move.d 0xfeda49ff,r3
cmp.b [r5+],r3
test_cc 1 0 0 0
checkr3 feda49ff
move.d 0x78134452,r3
cmp.b [r5+],r3
test_cc 1 0 0 1
checkr3 78134452
move.d 0x85649222,r3
cmp.b [r5],r3
test_cc 0 1 0 0
checkr3 85649222
quit

75
tests/cris/check_cmpq.s Normal file
View file

@ -0,0 +1,75 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: 1\n1\n1\n1f\n1f\nffffffe1\nffffffe1\nffffffe0\n0\n0\nffffffff\nffffffff\n10000\n100\n5678900\n
.include "testutils.inc"
start
moveq 1,r3
cmpq 1,r3
test_cc 0 1 0 0
checkr3 1
cmpq -1,r3
test_cc 0 0 0 1
checkr3 1
cmpq 31,r3
test_cc 1 0 0 1
checkr3 1
moveq 31,r3
cmpq 31,r3
test_cc 0 1 0 0
checkr3 1f
cmpq -31,r3
test_cc 0 0 0 1
checkr3 1f
movs.b -31,r3
cmpq -31,r3
test_cc 0 1 0 0
checkr3 ffffffe1
cmpq -32,r3
test_cc 0 0 0 0
checkr3 ffffffe1
movs.b -32,r3
cmpq -32,r3
test_cc 0 1 0 0
checkr3 ffffffe0
moveq 0,r3
cmpq 1,r3
test_cc 1 0 0 1
checkr3 0
cmpq -32,r3
test_cc 0 0 0 1
checkr3 0
moveq -1,r3
cmpq 1,r3
test_cc 1 0 0 0
checkr3 ffffffff
cmpq -1,r3
test_cc 0 1 0 0
checkr3 ffffffff
move.d 0x10000,r3
cmpq 1,r3
test_cc 0 0 0 0
checkr3 10000
move.d 0x100,r3
cmpq 1,r3
test_cc 0 0 0 0
checkr3 100
move.d 0x5678900,r3
cmpq 7,r3
test_cc 0 0 0 0
checkr3 5678900
quit

102
tests/cris/check_cmpr.s Normal file
View file

@ -0,0 +1,102 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: ffffffff\n2\nffff\nffffffff\n78134452\nffffffff\n2\nffff\nfedaffff\n78134452\nffffffff\n2\nff\nfeda49ff\n78134452\n85649222\n
.include "testutils.inc"
start
moveq -1,r3
moveq -2,r4
cmp.d r4,r3
test_cc 0 0 0 0
checkr3 ffffffff
moveq 2,r3
moveq 1,r4
cmp.d r4,r3
test_cc 0 0 0 0
checkr3 2
move.d 0xffff,r3
move.d -0xffff,r4
cmp.d r4,r3
test_cc 0 0 0 1
checkr3 ffff
moveq 1,r4
moveq -1,r3
cmp.d r4,r3
test_cc 1 0 0 0
checkr3 ffffffff
move.d -0x5432f789,r4
move.d 0x78134452,r3
cmp.d r4,r3
test_cc 1 0 1 1
checkr3 78134452
moveq -1,r3
moveq -2,r4
cmp.w r4,r3
test_cc 0 0 0 0
checkr3 ffffffff
moveq 2,r3
moveq 1,r4
cmp.w r4,r3
test_cc 0 0 0 0
checkr3 2
move.d 0xffff,r3
move.d -0xffff,r4
cmp.w r4,r3
test_cc 1 0 0 0
checkr3 ffff
move.d 0xfedaffff,r3
move.d -0xfedaffff,r4
cmp.w r4,r3
test_cc 1 0 0 0
checkr3 fedaffff
move.d -0x5432f789,r4
move.d 0x78134452,r3
cmp.w r4,r3
test_cc 0 0 0 0
checkr3 78134452
moveq -1,r3
moveq -2,r4
cmp.b r4,r3
test_cc 0 0 0 0
checkr3 ffffffff
moveq 2,r3
moveq 1,r4
cmp.b r4,r3
test_cc 0 0 0 0
checkr3 2
move.d -0xff,r4
move.d 0xff,r3
cmp.b r4,r3
test_cc 1 0 0 0
checkr3 ff
move.d -0xfeda49ff,r4
move.d 0xfeda49ff,r3
cmp.b r4,r3
test_cc 1 0 0 0
checkr3 feda49ff
move.d -0x5432f789,r4
move.d 0x78134452,r3
cmp.b r4,r3
test_cc 1 0 0 1
checkr3 78134452
move.d 0x85649222,r3
move.d 0x77445622,r4
cmp.b r4,r3
test_cc 0 1 0 0
checkr3 85649222
quit

92
tests/cris/check_cmpxc.s Normal file
View file

@ -0,0 +1,92 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 2\n2\n2\n2\nffff\nffff\nffff\nffff\nffffffff\nffffffff\nffffffff\n78134452\n78134452\n78134452\n78134452\n4452\n80000032\n
.include "testutils.inc"
start
moveq 2,r3
cmps.b 0xff,r3
test_cc 0 0 0 1
checkr3 2
moveq 2,r3
cmps.w 0xffff,r3
test_cc 0 0 0 1
checkr3 2
moveq 2,r3
cmpu.b 0xff,r3
test_cc 1 0 0 1
checkr3 2
moveq 2,r3
move.d 0xffffffff,r4
cmpu.w -1,r3
test_cc 1 0 0 1
checkr3 2
move.d 0xffff,r3
cmpu.b -1,r3
test_cc 0 0 0 0
checkr3 ffff
move.d 0xffff,r3
cmpu.w -1,r3
test_cc 0 1 0 0
checkr3 ffff
move.d 0xffff,r3
cmps.b 0xff,r3
test_cc 0 0 0 1
checkr3 ffff
move.d 0xffff,r3
cmps.w 0xffff,r3
test_cc 0 0 0 1
checkr3 ffff
moveq -1,r3
cmps.b 0xff,r3
test_cc 0 1 0 0
checkr3 ffffffff
moveq -1,r3
cmps.w 0xff,r3
test_cc 1 0 0 0
checkr3 ffffffff
moveq -1,r3
cmps.w 0xffff,r3
test_cc 0 1 0 0
checkr3 ffffffff
move.d 0x78134452,r3
cmpu.b 0x89,r3
test_cc 0 0 0 0
checkr3 78134452
move.d 0x78134452,r3
cmps.b 0x89,r3
test_cc 0 0 0 1
checkr3 78134452
move.d 0x78134452,r3
cmpu.w 0xf789,r3
test_cc 0 0 0 0
checkr3 78134452
move.d 0x78134452,r3
cmps.w 0xf789,r3
test_cc 0 0 0 1
checkr3 78134452
move.d 0x4452,r3
cmps.w 0x8002,r3
test_cc 0 0 0 1
checkr3 4452
move.d 0x80000032,r3
cmpu.w 0x764,r3
test_cc 0 0 1 0
checkr3 80000032
quit

106
tests/cris/check_cmpxm.s Normal file
View file

@ -0,0 +1,106 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 2\n2\n2\n2\nffff\nffff\nffff\nffff\nffffffff\nffffffff\nffffffff\n78134452\n78134452\n78134452\n78134452\n4452\n80000032\n
.include "testutils.inc"
.data
x:
.byte 0xff
.word 0xffff
.word 0xff
.word 0xffff
.byte 0x89
.word 0xf789
.word 0x8002
.word 0x764
start
moveq 2,r3
move.d x,r5
cmps.b [r5+],r3
test_cc 0 0 0 1
checkr3 2
moveq 2,r3
cmps.w [r5+],r3
test_cc 0 0 0 1
checkr3 2
moveq 2,r3
subq 3,r5
cmpu.b [r5+],r3
test_cc 1 0 0 1
checkr3 2
moveq 2,r3
cmpu.w [r5+],r3
test_cc 1 0 0 1
subq 3,r5
checkr3 2
move.d 0xffff,r3
cmpu.b [r5],r3
test_cc 0 0 0 0
checkr3 ffff
move.d 0xffff,r3
cmpu.w [r5],r3
test_cc 0 1 0 0
checkr3 ffff
move.d 0xffff,r3
cmps.b [r5],r3
test_cc 0 0 0 1
checkr3 ffff
move.d 0xffff,r3
cmps.w [r5],r3
test_cc 0 0 0 1
checkr3 ffff
moveq -1,r3
cmps.b [r5],r3
test_cc 0 1 0 0
addq 3,r5
checkr3 ffffffff
moveq -1,r3
cmps.w [r5+],r3
test_cc 1 0 0 0
checkr3 ffffffff
moveq -1,r3
cmps.w [r5+],r3
test_cc 0 1 0 0
checkr3 ffffffff
move.d 0x78134452,r3
cmpu.b [r5],r3
test_cc 0 0 0 0
checkr3 78134452
move.d 0x78134452,r3
cmps.b [r5+],r3
test_cc 0 0 0 1
checkr3 78134452
move.d 0x78134452,r3
cmpu.w [r5],r3
test_cc 0 0 0 0
checkr3 78134452
move.d 0x78134452,r3
cmps.w [r5+],r3
test_cc 0 0 0 1
checkr3 78134452
move.d 0x4452,r3
cmps.w [r5+],r3
test_cc 0 0 0 1
checkr3 4452
move.d 0x80000032,r3
cmpu.w [r5+],r3
test_cc 0 0 1 0
checkr3 80000032
quit

42
tests/cris/check_dstep.s Normal file
View file

@ -0,0 +1,42 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: fffffffc\n4\nffff\nfffffffe\n9bf3911b\n0\n
.include "testutils.inc"
start
moveq -1,r3
moveq 2,r4
dstep r4,r3
test_move_cc 1 0 0 0
checkr3 fffffffc
moveq 2,r3
moveq -1,r4
dstep r4,r3
test_move_cc 0 0 0 0
checkr3 4
move.d 0xffff,r4
move.d r4,r3
dstep r4,r3
test_move_cc 0 0 0 0
checkr3 ffff
moveq -1,r4
move.d r4,r3
dstep r4,r3
test_move_cc 1 0 0 0
checkr3 fffffffe
move.d 0x5432f789,r4
move.d 0x78134452,r3
dstep r4,r3
test_move_cc 1 0 0 0
checkr3 9bf3911b
move.d 0xffff,r3
move.d 0x1fffe,r4
dstep r4,r3
test_move_cc 0 1 0 0
checkr3 0
quit

View file

@ -0,0 +1,15 @@
/* PR rtl-optimization/28634. On targets with delayed branches,
dbr_schedule could do the next iteration's addition in the
branch delay slot, then subtract the value again if the branch
wasn't taken. This can lead to rounding errors. */
int x = -1;
int y = 1;
int
main (void)
{
while (y > 0)
y += x;
if (y != x + 1)
abort ();
exit (0);
}

View file

@ -0,0 +1,15 @@
/* PR rtl-optimization/28634. On targets with delayed branches,
dbr_schedule could do the next iteration's addition in the
branch delay slot, then subtract the value again if the branch
wasn't taken. This can lead to rounding errors. */
double x = -0x1.0p53;
double y = 1;
int
main (void)
{
while (y > 0)
y += x;
if (y != x + 1)
abort ();
exit (0);
}

View file

@ -0,0 +1,116 @@
/*
* Check the lz insn.
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "sys.h"
#define __LINUX_KERNEL_VERSION 131584
#define DL_SYSDEP_OSCHECK(FATAL) \
do { \
/* Test whether the kernel is new enough. This test is only \
performed if the library is not compiled to run on all \
kernels. */ \
if (__LINUX_KERNEL_VERSION > 0) \
{ \
char bufmem[64]; \
char *buf = bufmem; \
unsigned int version; \
int parts; \
char *cp; \
struct utsname uts; \
\
/* Try the uname syscall */ \
if (__uname (&uts)) \
{ \
/* This was not successful. Now try reading the /proc \
filesystem. */ \
ssize_t reslen; \
int fd = __open ("/proc/sys/kernel/osrelease", O_RDONLY); \
if (fd == -1 \
|| (reslen = __read (fd, bufmem, sizeof (bufmem))) <= 0) \
/* This also didn't work. We give up since we cannot \
make sure the library can actually work. */ \
FATAL ("FATAL: cannot determine library version\n"); \
__close (fd); \
buf[MIN (reslen, (ssize_t) sizeof (bufmem) - 1)] = '\0'; \
} \
else \
buf = uts.release; \
\
/* Now convert it into a number. The string consists of at most \
three parts. */ \
version = 0; \
parts = 0; \
cp = buf; \
while ((*cp >= '0') && (*cp <= '9')) \
{ \
unsigned int here = *cp++ - '0'; \
\
while ((*cp >= '0') && (*cp <= '9')) \
{ \
here *= 10; \
here += *cp++ - '0'; \
} \
\
++parts; \
version <<= 8; \
version |= here; \
\
if (*cp++ != '.') \
/* Another part following? */ \
break; \
} \
\
if (parts < 3) \
version <<= 8 * (3 - parts); \
\
/* Now we can test with the required version. */ \
if (version < __LINUX_KERNEL_VERSION) \
/* Not sufficent. */ \
FATAL ("FATAL: kernel too old\n"); \
\
_dl_osversion = version; \
} \
} while (0)
int main(void)
{
char bufmem[64] = "2.6.22";
char *buf = bufmem;
unsigned int version;
int parts;
char *cp;
version = 0;
parts = 0;
cp = buf;
while ((*cp >= '0') && (*cp <= '9'))
{
unsigned int here = *cp++ - '0';
while ((*cp >= '0') && (*cp <= '9'))
{
here *= 10;
here += *cp++ - '0';
}
++parts;
version <<= 8;
version |= here;
if (*cp++ != '.')
/* Another part following? */
break;
}
if (parts < 3)
version <<= 8 * (3 - parts);
if (version < __LINUX_KERNEL_VERSION)
err();
pass();
exit(0);
}

7
tests/cris/check_hello.c Normal file
View file

@ -0,0 +1,7 @@
#include <stdio.h>
#include <stdlib.h>
int main ()
{
printf ("pass\n");
exit (0);
}

45
tests/cris/check_int64.c Normal file
View file

@ -0,0 +1,45 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "sys.h"
#include "crisutils.h"
extern inline int64_t add64(const int64_t a, const int64_t b) {
return a + b;
}
extern inline int64_t sub64(const int64_t a, const int64_t b) {
return a - b;
}
int main(void)
{
int64_t a = 1;
int64_t b = 2;
/* FIXME: add some tests. */
a = add64(a, b);
if (a != 3)
err();
a = sub64(a, b);
if (a != 1)
err();
a = add64(a, -4);
if (a != -3)
err();
a = add64(a, 3);
if (a != 0)
err();
a = 0;
a = sub64(a, 1);
if (a != -1)
err();
pass();
return 0;
}

85
tests/cris/check_jsr.s Normal file
View file

@ -0,0 +1,85 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: 0\n0\n0\n0\n0\n0\n
# Test that jsr Rn and jsr [PC+] work.
.include "testutils.inc"
start
x:
move.d 0f,r6
setf nzvc
jsr r6
.if 1; ..asm.arch.cris.v32
nop
.endif
0:
test_move_cc 1 1 1 1
move srp,r3
sub.d 0b,r3
checkr3 0
move.d 1f,r0
setf nzvc
jsr r0
.if 1 ; ..asm.arch.cris.v32
moveq 0,r0
.endif
6:
nop
quit
2:
test_move_cc 0 0 0 0
move srp,r3
sub.d 3f,r3
checkr3 0
jsr 4f
.if 1 ; ..asm.arch.cris.v32
nop
.endif
7:
nop
quit
8:
move srp,r3
sub.d 7b,r3
checkr3 0
quit
4:
move srp,r3
sub.d 7b,r3
checkr3 0
move.d 5f,r3
jump r3
.if 1; ..asm.arch.cris.v32
moveq 0,r3
.endif
quit
.space 32770,0
1:
test_move_cc 1 1 1 1
move srp,r3
sub.d 6b,r3
checkr3 0
clearf cznv
jsr 2b
.if 1; ..asm.arch.cris.v32
nop
.endif
3:
quit
5:
move srp,r3
sub.d 7b,r3
checkr3 0
jump 8b
.if 1 ; ..asm.arch.cris.v32
nop
.endif
quit

78
tests/cris/check_lapc.s Normal file
View file

@ -0,0 +1,78 @@
# mach: crisv32
# output: 0\n0\nfffffffa\nfffffffe\nffffffda\n1e\n1e\n0\n
.include "testutils.inc"
; To accommodate dumpr3 with more than one instruction, keep it
; out of lapc operand ranges and difference calculations.
start
lapc.d 0f,r3
0:
sub.d .,r3
checkr3 0
lapcq 0f,r3
0:
sub.d .,r3
checkr3 0
lapc.d .,r3
sub.d .,r3
checkr3 fffffffa
lapcq .,r3
sub.d .,r3
checkr3 fffffffe
0:
.rept 16
nop
.endr
lapc.d 0b,r3
sub.d .,r3
checkr3 ffffffda
setf zcvn
lapc.d 0f,r3
test_cc 1 1 1 1
sub.d .,r3
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
0:
checkr3 1e
0:
lapcq 0f,r3
sub.d 0b,r3
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
0:
checkr3 1e
clearf cn
setf zv
1:
lapcq .,r3
test_cc 0 1 1 0
sub.d 1b,r3
checkr3 0
quit

217
tests/cris/check_lsl.s Normal file
View file

@ -0,0 +1,217 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: ffffffff\n4\n80000000\nffff8000\n7f19f000\n80000000\n0\n0\n699fc67c\nffffffff\n4\n80000000\nffff8000\n7f19f000\nda670000\nda670000\nda670000\nda67c67c\nffffffff\nfffafffe\n4\nffff0000\nffff8000\n5a67f000\nda67f100\nda67f100\nda67f100\nda67f17c\nfff3faff\nfff3fafe\n4\nffffff00\nffffff00\nffffff80\n5a67f100\n5a67f1f0\n
.include "testutils.inc"
start
moveq -1,r3
lslq 0,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq 2,r3
lslq 1,r3
test_move_cc 0 0 0 0
checkr3 4
moveq -1,r3
lslq 31,r3
test_move_cc 1 0 0 0
checkr3 80000000
moveq -1,r3
lslq 15,r3
test_move_cc 1 0 0 0
checkr3 ffff8000
move.d 0x5a67f19f,r3
lslq 12,r3
test_move_cc 0 0 0 0
checkr3 7f19f000
move.d 0xda67f19f,r3
move.d 31,r4
lsl.d r4,r3
test_move_cc 1 0 0 0
checkr3 80000000
move.d 0xda67f19f,r3
move.d 32,r4
lsl.d r4,r3
test_move_cc 0 1 0 0
checkr3 0
move.d 0xda67f19f,r3
move.d 33,r4
lsl.d r4,r3
test_move_cc 0 1 0 0
checkr3 0
move.d 0xda67f19f,r3
move.d 66,r4
lsl.d r4,r3
test_move_cc 0 0 0 0
checkr3 699fc67c
moveq -1,r3
moveq 0,r4
lsl.d r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq 2,r3
moveq 1,r4
lsl.d r4,r3
test_move_cc 0 0 0 0
checkr3 4
moveq -1,r3
moveq 31,r4
lsl.d r4,r3
test_move_cc 1 0 0 0
checkr3 80000000
moveq -1,r3
moveq 15,r4
lsl.d r4,r3
test_move_cc 1 0 0 0
checkr3 ffff8000
move.d 0x5a67f19f,r3
moveq 12,r4
lsl.d r4,r3
test_move_cc 0 0 0 0
checkr3 7f19f000
move.d 0xda67f19f,r3
move.d 31,r4
lsl.w r4,r3
test_move_cc 0 1 0 0
checkr3 da670000
move.d 0xda67f19f,r3
move.d 32,r4
lsl.w r4,r3
test_move_cc 0 1 0 0
checkr3 da670000
move.d 0xda67f19f,r3
move.d 33,r4
lsl.w r4,r3
test_move_cc 0 1 0 0
checkr3 da670000
move.d 0xda67f19f,r3
move.d 66,r4
lsl.w r4,r3
test_move_cc 1 0 0 0
checkr3 da67c67c
moveq -1,r3
moveq 0,r4
lsl.w r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0xfffaffff,r3
moveq 1,r4
lsl.w r4,r3
test_move_cc 1 0 0 0
checkr3 fffafffe
moveq 2,r3
moveq 1,r4
lsl.w r4,r3
test_move_cc 0 0 0 0
checkr3 4
moveq -1,r3
moveq 31,r4
lsl.w r4,r3
test_move_cc 0 1 0 0
checkr3 ffff0000
moveq -1,r3
moveq 15,r4
lsl.w r4,r3
test_move_cc 1 0 0 0
checkr3 ffff8000
move.d 0x5a67f19f,r3
moveq 12,r4
lsl.w r4,r3
test_move_cc 1 0 0 0
checkr3 5a67f000
move.d 0xda67f19f,r3
move.d 31,r4
lsl.b r4,r3
test_move_cc 0 1 0 0
checkr3 da67f100
move.d 0xda67f19f,r3
move.d 32,r4
lsl.b r4,r3
test_move_cc 0 1 0 0
checkr3 da67f100
move.d 0xda67f19f,r3
move.d 33,r4
lsl.b r4,r3
test_move_cc 0 1 0 0
checkr3 da67f100
move.d 0xda67f19f,r3
move.d 66,r4
lsl.b r4,r3
test_move_cc 0 0 0 0
checkr3 da67f17c
move.d 0xfff3faff,r3
moveq 0,r4
lsl.b r4,r3
test_move_cc 1 0 0 0
checkr3 fff3faff
move.d 0xfff3faff,r3
moveq 1,r4
lsl.b r4,r3
test_move_cc 1 0 0 0
checkr3 fff3fafe
moveq 2,r3
moveq 1,r4
lsl.b r4,r3
test_move_cc 0 0 0 0
checkr3 4
moveq -1,r3
moveq 31,r4
lsl.b r4,r3
test_move_cc 0 1 0 0
checkr3 ffffff00
moveq -1,r3
moveq 15,r4
lsl.b r4,r3
test_move_cc 0 1 0 0
checkr3 ffffff00
moveq -1,r3
moveq 7,r4
lsl.b r4,r3
test_move_cc 1 0 0 0
checkr3 ffffff80
move.d 0x5a67f19f,r3
moveq 12,r4
lsl.b r4,r3
test_move_cc 0 1 0 0
checkr3 5a67f100
move.d 0x5a67f19f,r3
moveq 4,r4
lsl.b r4,r3
test_move_cc 1 0 0 0
checkr3 5a67f1f0
quit

218
tests/cris/check_lsr.s Normal file
View file

@ -0,0 +1,218 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: ffffffff\n1\n1\n1ffff\n5a67f\n1\n0\n0\n3699fc67\nffffffff\n1\n1\n1ffff\n5a67f\nda670000\nda670000\nda670000\nda673c67\nffffffff\nffff7fff\n1\nffff0000\nffff0001\n5a67000f\nda67f100\nda67f100\nda67f100\nda67f127\nffffffff\nffffff7f\n1\nffffff00\nffffff00\nffffff01\n5a67f100\n5a67f109\n
.include "testutils.inc"
start
moveq -1,r3
lsrq 0,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq 2,r3
lsrq 1,r3
test_move_cc 0 0 0 0
checkr3 1
moveq -1,r3
lsrq 31,r3
test_move_cc 0 0 0 0
checkr3 1
moveq -1,r3
lsrq 15,r3
test_move_cc 0 0 0 0
checkr3 1ffff
move.d 0x5a67f19f,r3
lsrq 12,r3
test_move_cc 0 0 0 0
checkr3 5a67f
move.d 0xda67f19f,r3
move.d 31,r4
lsr.d r4,r3
test_move_cc 0 0 0 0
checkr3 1
move.d 0xda67f19f,r3
move.d 32,r4
lsr.d r4,r3
test_move_cc 0 1 0 0
checkr3 0
move.d 0xda67f19f,r3
move.d 33,r4
lsr.d r4,r3
test_move_cc 0 1 0 0
checkr3 0
move.d 0xda67f19f,r3
move.d 66,r4
lsr.d r4,r3
test_move_cc 0 0 0 0
checkr3 3699fc67
moveq -1,r3
moveq 0,r4
lsr.d r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq 2,r3
moveq 1,r4
lsr.d r4,r3
test_move_cc 0 0 0 0
checkr3 1
moveq -1,r3
moveq 31,r4
lsr.d r4,r3
test_move_cc 0 0 0 0
checkr3 1
moveq -1,r3
moveq 15,r4
lsr.d r4,r3
test_move_cc 0 0 0 0
checkr3 1ffff
move.d 0x5a67f19f,r3
moveq 12,r4
lsr.d r4,r3
test_move_cc 0 0 0 0
checkr3 5a67f
move.d 0xda67f19f,r3
move.d 31,r4
lsr.w r4,r3
test_move_cc 0 1 0 0
checkr3 da670000
move.d 0xda67f19f,r3
move.d 32,r4
lsr.w r4,r3
test_move_cc 0 1 0 0
checkr3 da670000
move.d 0xda67f19f,r3
move.d 33,r4
lsr.w r4,r3
test_move_cc 0 1 0 0
checkr3 da670000
move.d 0xda67f19f,r3
move.d 66,r4
lsr.w r4,r3
test_move_cc 0 0 0 0
checkr3 da673c67
moveq -1,r3
moveq 0,r4
lsr.w r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq -1,r3
moveq 1,r4
lsr.w r4,r3
test_move_cc 0 0 0 0
checkr3 ffff7fff
moveq 2,r3
moveq 1,r4
lsr.w r4,r3
test_move_cc 0 0 0 0
checkr3 1
;; FIXME: this was wrong. Z should be set.
moveq -1,r3
moveq 31,r4
lsr.w r4,r3
test_move_cc 0 1 0 0
checkr3 ffff0000
moveq -1,r3
moveq 15,r4
lsr.w r4,r3
test_move_cc 0 0 0 0
checkr3 ffff0001
move.d 0x5a67f19f,r3
moveq 12,r4
lsr.w r4,r3
test_move_cc 0 0 0 0
checkr3 5a67000f
move.d 0xda67f19f,r3
move.d 31,r4
lsr.b r4,r3
test_move_cc 0 1 0 0
checkr3 da67f100
move.d 0xda67f19f,r3
move.d 32,r4
lsr.b r4,r3
test_move_cc 0 1 0 0
checkr3 da67f100
move.d 0xda67f19f,r3
move.d 33,r4
lsr.b r4,r3
test_move_cc 0 1 0 0
checkr3 da67f100
move.d 0xda67f19f,r3
move.d 66,r4
lsr.b r4,r3
test_move_cc 0 0 0 0
checkr3 da67f127
moveq -1,r3
moveq 0,r4
lsr.b r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq -1,r3
moveq 1,r4
lsr.b r4,r3
test_move_cc 0 0 0 0
checkr3 ffffff7f
moveq 2,r3
moveq 1,r4
lsr.b r4,r3
test_move_cc 0 0 0 0
checkr3 1
moveq -1,r3
moveq 31,r4
lsr.b r4,r3
test_move_cc 0 1 0 0
checkr3 ffffff00
moveq -1,r3
moveq 15,r4
lsr.b r4,r3
test_move_cc 0 1 0 0
checkr3 ffffff00
moveq -1,r3
moveq 7,r4
lsr.b r4,r3
test_move_cc 0 0 0 0
checkr3 ffffff01
move.d 0x5a67f19f,r3
moveq 12,r4
lsr.b r4,r3
test_move_cc 0 1 0 0
checkr3 5a67f100
move.d 0x5a67f19f,r3
moveq 4,r4
lsr.b r4,r3
test_move_cc 0 0 0 0
checkr3 5a67f109
quit

49
tests/cris/check_lz.c Normal file
View file

@ -0,0 +1,49 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "sys.h"
extern inline int cris_lz(int x)
{
int r;
asm ("lz\t%1, %0\n" : "=r" (r) : "r" (x));
return r;
}
void check_lz(void)
{
int i;
if (cris_lz(0) != 32)
err();
if (cris_lz(1) != 31)
err();
if (cris_lz(2) != 30)
err();
if (cris_lz(4) != 29)
err();
if (cris_lz(8) != 28)
err();
/* try all positions with a single bit. */
for (i = 1; i < 32; i++) {
if (cris_lz(1 << (i-1)) != (32 - i))
err();
}
/* try all positions with all bits. */
for (i = 1; i < 32; i++) {
/* split up this computation to clarify it. */
uint32_t val;
val = (unsigned int)-1 >> (32 - i);
if (cris_lz(val) != (32 - i))
err();
}
}
int main(void)
{
check_lz();
pass();
exit(0);
}

39
tests/cris/check_mapbrk.c Normal file
View file

@ -0,0 +1,39 @@
#include <stdio.h>
#include <stdlib.h>
/* Basic sanity check that syscalls to implement malloc (brk, mmap2,
munmap) are trivially functional. */
int main ()
{
void *p1, *p2, *p3, *p4, *p5, *p6;
if ((p1 = malloc (8100)) == NULL
|| (p2 = malloc (16300)) == NULL
|| (p3 = malloc (4000)) == NULL
|| (p4 = malloc (500)) == NULL
|| (p5 = malloc (1023*1024)) == NULL
|| (p6 = malloc (8191*1024)) == NULL)
{
printf ("fail\n");
exit (1);
}
free (p1);
free (p2);
free (p3);
free (p4);
free (p5);
free (p6);
p1 = malloc (64000);
if (p1 == NULL)
{
printf ("fail\n");
exit (1);
}
free (p1);
printf ("pass\n");
exit (0);
}

49
tests/cris/check_mcp.s Normal file
View file

@ -0,0 +1,49 @@
# mach: crisv32
# output: fffffffe\n1\n1ffff\nfffffffe\ncc463bdc\n4c463bdc\n0\n
.include "testutils.inc"
start
; Set R, clear C.
move 0x100,ccs
moveq -5,r3
move 2,mof
mcp mof,r3
test_cc 1 0 0 0
checkr3 fffffffe
moveq 2,r3
move -1,srp
mcp srp,r3
test_cc 0 0 0 0
checkr3 1
move 0xffff,srp
move srp,r3
mcp srp,r3
test_cc 0 0 0 0
checkr3 1ffff
move -1,mof
move mof,r3
mcp mof,r3
test_cc 1 0 0 0
checkr3 fffffffe
move 0x5432f789,mof
move.d 0x78134452,r3
mcp mof,r3
test_cc 1 0 1 0
checkr3 cc463bdc
move 0x80000000,srp
mcp srp,r3
test_cc 0 0 1 0
checkr3 4c463bdc
move 0xb3b9c423,srp
mcp srp,r3
test_cc 0 1 0 0
checkr3 0
quit

48
tests/cris/check_mmap1.c Normal file
View file

@ -0,0 +1,48 @@
/*
#notarget: cris*-*-elf
*/
#define _GNU_SOURCE
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
int main (int argc, char *argv[])
{
int fd = open (argv[0], O_RDONLY);
struct stat sb;
int size;
void *a;
const char *str = "a string you'll only find in the program";
if (fd == -1)
{
perror ("open");
abort ();
}
if (fstat (fd, &sb) < 0)
{
perror ("fstat");
abort ();
}
size = sb.st_size;
/* We want to test mmapping a size that isn't exactly a page. */
if ((size & 8191) == 0)
size--;
a = mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);
if (memmem (a, size, str, strlen (str) + 1) == NULL)
abort ();
printf ("pass\n");
exit (0);
}

48
tests/cris/check_mmap2.c Normal file
View file

@ -0,0 +1,48 @@
/*
#notarget: cris*-*-elf
*/
#define _GNU_SOURCE
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
int main (int argc, char *argv[])
{
int fd = open (argv[0], O_RDONLY);
struct stat sb;
int size;
void *a;
const char *str = "a string you'll only find in the program";
if (fd == -1)
{
perror ("open");
abort ();
}
if (fstat (fd, &sb) < 0)
{
perror ("fstat");
abort ();
}
size = sb.st_size;
/* We want to test mmapping a size that isn't exactly a page. */
if ((size & 8191) == 0)
size--;
a = mmap (NULL, size, PROT_READ, MAP_SHARED, fd, 0);
if (memmem (a, size, str, strlen (str) + 1) == NULL)
abort ();
printf ("pass\n");
exit (0);
}

33
tests/cris/check_mmap3.c Normal file
View file

@ -0,0 +1,33 @@
/*
#notarget: cris*-*-elf
*/
#define _GNU_SOURCE
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/mman.h>
int main (int argc, char *argv[])
{
volatile unsigned char *a;
/* Check that we can map a non-multiple of a page and still get a full page. */
a = mmap (NULL, 0x4c, PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (a == NULL || a == (unsigned char *) -1)
abort ();
a[0] = 0xbe;
a[8191] = 0xef;
memset ((char *) a + 1, 0, 8190);
if (a[0] != 0xbe || a[8191] != 0xef)
abort ();
printf ("pass\n");
exit (0);
}

View file

@ -0,0 +1,33 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: aa117acd\n
# output: eeaabb42\n
; Bug with move to special register in delay slot, due to
; special flush-insn-cache simulator use. Ordinary move worked;
; special register caused branch to fail.
.include "testutils.inc"
start
move -1,srp
move.d 0xaa117acd,r1
moveq 3,r9
cmpq 1,r9
bhi 0f
move.d r1,r3
fail
0:
checkr3 aa117acd
move.d 0xeeaabb42,r1
moveq 3,r9
cmpq 1,r9
bhi 0f
move r1,srp
fail
0:
move srp,r3
checkr3 eeaabb42
quit

37
tests/cris/check_movecr.s Normal file
View file

@ -0,0 +1,37 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: ffffff42\n94\nffff4321\n9234\n76543210\n76540000\n
; Move constant byte, word, dword to register. Check that no extension is
; performed, that only part of the register is set.
.include "testutils.inc"
startnostack
moveq -1,r3
move.b 0x42,r3
test_move_cc 0 0 0 0
checkr3 ffffff42
moveq 0,r3
move.b 0x94,r3
test_move_cc 1 0 0 0
checkr3 94
moveq -1,r3
move.w 0x4321,r3
test_move_cc 0 0 0 0
checkr3 ffff4321
moveq 0,r3
move.w 0x9234,r3
test_move_cc 1 0 0 0
checkr3 9234
move.d 0x76543210,r3
test_move_cc 0 0 0 0
checkr3 76543210
move.w 0,r3
test_move_cc 0 1 0 0
checkr3 76540000
quit

47
tests/cris/check_movei.s Normal file
View file

@ -0,0 +1,47 @@
# mach: crisv32
# output: fffffffe\n
# output: fffffffe\n
; Check basic integral-write semantics regarding flags.
.include "testutils.inc"
start
; A write that works. Check that flags are set correspondingly.
move.d d,r4
moveq -2,r5
setf c
clearf p
move.d [r4],r3
ax
move.d r5,[r4]
move.d [r4],r3
bcc 0f
nop
fail
0:
checkr3 fffffffe
; A write that fails; check flags too.
move.d d,r4
moveq 23,r5
setf p
clearf c
move.d [r4],r3
ax
move.d r5,[r4]
move.d [r4],r3
bcs 0f
nop
fail
0:
checkr3 fffffffe
quit
.data
d:
.dword 42424242

79
tests/cris/check_movemr.s Normal file
View file

@ -0,0 +1,79 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: 12345678\n10234567\n12345678\n12344567\n12344523\n76543210\nffffffaa\naa\n9911\nffff9911\n78\n56\n3456\n6712\n
.include "testutils.inc"
start
.data
mem1:
.dword 0x12345678
mem2:
.word 0x4567
mem3:
.byte 0x23
.dword 0x76543210
.byte 0xaa,0x11,0x99
.text
move.d mem1,r2
move.d [r2],r3
test_move_cc 0 0 0 0
checkr3 12345678
move.d mem2,r3
move.d [r3],r3
test_move_cc 0 0 0 0
checkr3 10234567
move.d mem1,r2
move.d [r2+],r3
test_move_cc 0 0 0 0
checkr3 12345678
move.w [r2+],r3
test_move_cc 0 0 0 0
checkr3 12344567
move.b [r2+],r3
test_move_cc 0 0 0 0
checkr3 12344523
move.d [r2+],r3
test_move_cc 0 0 0 0
checkr3 76543210
movs.b [r2],r3
test_move_cc 1 0 0 0
checkr3 ffffffaa
movu.b [r2+],r3
test_move_cc 0 0 0 0
checkr3 aa
movu.w [r2],r3
test_move_cc 0 0 0 0
checkr3 9911
movs.w [r2+],r3
test_move_cc 1 0 0 0
checkr3 ffff9911
move.d mem1,r13
movs.b [r13+],r3
test_move_cc 0 0 0 0
checkr3 78
movu.b [r13],r3
test_move_cc 0 0 0 0
checkr3 56
movs.w [r13+],r3
test_move_cc 0 0 0 0
checkr3 3456
movu.w [r13+],r3
test_move_cc 0 0 0 0
checkr3 6712
quit

View file

@ -0,0 +1,97 @@
# mach: crisv32
# output: 15\n7\n2\nffff1234\nb\n16\nf\n2\nffffffef\nf\nffff1234\nf\nfffffff4\nd\nfffffff2\n10\nfffffff2\nd\n
.include "testutils.inc"
.data
x:
.dword 8,9,10,11
y:
.dword -12,13,-14,15,16
start
moveq 7,r0
moveq 2,r1
move.d 0xffff1234,r2
moveq 21,r3
move.d x,r4
setf zcvn
movem r2,[r4+]
test_cc 1 1 1 1
subq 12,r4
checkr3 15
move.d [r4+],r3
checkr3 7
move.d [r4+],r3
checkr3 2
move.d [r4+],r3
checkr3 ffff1234
move.d [r4+],r3
checkr3 b
subq 16,r4
moveq 22,r0
moveq 15,r1
clearf zcvn
movem r0,[r4]
test_cc 0 0 0 0
move.d [r4+],r3
checkr3 16
move.d r1,r3
checkr3 f
move.d [r4+],r3
checkr3 2
subq 8,r4
moveq 10,r2
moveq -17,r0
clearf zc
setf vn
movem r1,[r4]
test_cc 1 0 1 0
move.d [r4+],r3
checkr3 ffffffef
move.d [r4+],r3
checkr3 f
move.d [r4+],r3
checkr3 ffff1234
move.d y,r4
setf zc
clearf vn
movem [r4+],r3
test_cc 0 1 0 1
checkr3 f
move.d r0,r3
checkr3 fffffff4
move.d r1,r3
checkr3 d
move.d r2,r3
checkr3 fffffff2
move.d [r4],r3
checkr3 10
subq 8,r4
setf zcvn
movem [r4+],r0
test_cc 1 1 1 1
move.d r0,r3
checkr3 fffffff2
move.d r1,r3
checkr3 d
quit

51
tests/cris/check_moveq.c Normal file
View file

@ -0,0 +1,51 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "sys.h"
#include "crisutils.h"
#define cris_moveq(dst, src) \
asm volatile ("moveq %1, %0\n" : "=r" (dst) : "i" (src));
int main(void)
{
int t;
cris_tst_cc_init();
asm volatile ("setf\tzvnc\n");
cris_moveq(t, 10);
cris_tst_cc(1, 1, 1, 1);
if (t != 10)
err();
/* make sure moveq doesnt clobber the zflag. */
cris_tst_cc_init();
asm volatile ("setf vnc\n");
asm volatile ("clearf z\n");
cris_moveq(t, 0);
cris_tst_cc(1, 0, 1, 1);
if (t != 0)
err();
/* make sure moveq doesnt clobber the nflag.
Also check large immediates */
cris_tst_cc_init();
asm volatile ("setf zvc\n");
asm volatile ("clearf n\n");
cris_moveq(t, -31);
cris_tst_cc(0, 1, 1, 1);
if (t != -31)
err();
cris_tst_cc_init();
asm volatile ("setf nzvc\n");
cris_moveq(t, 31);
cris_tst_cc(1, 1, 1, 1);
if (t != 31)
err();
pass();
return 0;
}

29
tests/cris/check_mover.s Normal file
View file

@ -0,0 +1,29 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: ffffff05\nffff0005\n5\nffffff00\n
; Move between registers. Check that just the subreg is copied.
.include "testutils.inc"
startnostack
moveq -30,r3
moveq 5,r4
move.b r4,r3
test_move_cc 0 0 0 0 ; FIXME
checkr3 ffffff05
move.w r4,r3
test_move_cc 0 0 0 0
checkr3 ffff0005
move.d r4,r3
test_move_cc 0 0 0 0
checkr3 5
moveq -1,r3
moveq 0,r4
move.b r4,r3
test_move_cc 0 1 0 0
checkr3 ffffff00
quit

45
tests/cris/check_moverm.s Normal file
View file

@ -0,0 +1,45 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: 7823fec2\n10231879\n102318fe\n
.include "testutils.inc"
start
.data
mem1:
.dword 0x12345678
mem2:
.word 0x4567
mem3:
.byte 0x23
.dword 0x76543210
.byte 0xaa,0x11,0x99
.text
move.d mem1,r2
move.d 0x7823fec2,r4
setf nzvc
move.d r4,[r2+]
test_cc 1 1 1 1
subq 4,r2
move.d [r2],r3
checkr3 7823fec2
move.d mem2,r3
move.d 0x45231879,r4
clearf nzvc
move.w r4,[r3]
test_cc 0 0 0 0
move.d [r3],r3
checkr3 10231879
move.d mem2,r2
moveq -2,r4
clearf nc
setf zv
move.b r4,[r2+]
test_cc 0 1 1 0
subq 1,r2
move.d [r2],r3
checkr3 102318ff
quit

131
tests/cris/check_movmp.s Normal file
View file

@ -0,0 +1,131 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: ffffff00\nffff0000\n0\nffffff00\nffff0000\n0\nffffff00\nffff0000\n0\nbb113344\n664433aa\ncc557788\nabcde012\nabcde000\n77880000\n0\n
# Test generic "move Ps,[]" and "move [],Pd" insns; the ones with
# functionality common to all models.
.include "testutils.inc"
start
.data
filler:
.byte 0xaa
.word 0x4433
.dword 0x55778866
.byte 0xcc
.text
; Test that writing to zero-registers is a nop
.if 0
; We used to just ignore the writes, but now an error is emitted. We
; keep the test-code but disabled, in case we need to change this again.
move 0xaa,p0
move 0x4433,p4
move 0x55774433,p8
.endif
moveq -1,r3
setf zcvn
clear.b r3
test_cc 1 1 1 1
checkr3 ffffff00
moveq -1,r3
clearf zcvn
clear.w r3
test_cc 0 0 0 0
checkr3 ffff0000
moveq -1,r3
clear.d r3
checkr3 0
; "Write" using ordinary memory references too.
.if 0 ; See ".if 0" above.
move.d filler,r6
move [r6],p0
move [r6],p4
move [r6],p8
.endif
# ffffff00\nffff0000\n0\nffffff00\nffff0000\n0\nbb113344\n664433aa\ncc557788\nabcde012\nabcde000\n77880000\n0\n
moveq -1,r3
clear.b r3
checkr3 ffffff00
moveq -1,r3
clear.w r3
checkr3 ffff0000
moveq -1,r3
clear.d r3
checkr3 0
; And postincremented.
.if 0 ; See ".if 0" above.
move [r6+],p0
move [r6+],p4
move [r6+],p8
.endif
# ffffff00\nffff0000\n0\nbb113344\n664433aa\ncc557788\nabcde012\nabcde000\n77880000\n0\n
moveq -1,r3
clear.b r3
checkr3 ffffff00
moveq -1,r3
clear.w r3
checkr3 ffff0000
moveq -1,r3
clear.d r3
checkr3 0
; Now see that we can write to the registers too.
# bb113344\n664433aa\ncc557788\nabcde012\nabcde000\n77880000\n0\n
; [PC+]
move.d filler,r9
move 0xbb113344,srp
move srp,r3
checkr3 bb113344
; [R+]
move [r9+],srp
move srp,r3
checkr3 664433aa
; [R]
move [r9],srp
move srp,r3
checkr3 cc557788
; And check writing to memory, clear and srp.
move.d filler,r9
move 0xabcde012,srp
setf zcvn
move srp,[r9+]
test_cc 1 1 1 1
subq 4,r9
move.d [r9],r3
checkr3 abcde012
clearf zcvn
clear.b [r9]
test_cc 0 0 0 0
move.d [r9],r3
checkr3 abcde000
addq 2,r9
clear.w [r9+]
subq 2,r9
move.d [r9],r3
checkr3 77880000
clear.d [r9]
move.d [r9],r3
checkr3 0
quit

View file

@ -0,0 +1,35 @@
# mach: crisv32
# output: 11223320\nbb113344\naa557711\n
# Test v32-specific special registers. FIXME: more registers.
.include "testutils.inc"
start
.data
store:
.dword 0x11223344
.dword 0x77665544
.text
moveq -1,r3
move.d store,r4
move vr,[r4]
move [r4+],mof
move mof,r3
checkr3 11223320
moveq -1,r3
clearf zcvn
move 0xbb113344,mof
test_cc 0 0 0 0
move mof,r3
checkr3 bb113344
setf zcvn
move 0xaa557711,mof
test_cc 1 1 1 1
move mof,[r4]
move.d [r4],r3
checkr3 aa557711
quit

28
tests/cris/check_movpr.s Normal file
View file

@ -0,0 +1,28 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: ffffff00\nffff0000\n0\nbb113344\n
# Test generic "move Ps,Rd" and "move Rs,Pd" insns; the ones with
# functionality common to all models.
.include "testutils.inc"
start
moveq -1,r3
clear.b r3
checkr3 ffffff00
moveq -1,r3
clear.w r3
checkr3 ffff0000
moveq -1,r3
clear.d r3
checkr3 0
moveq -1,r3
move.d 0xbb113344,r4
setf zcvn
move r4,srp
move srp,r3
test_cc 1 1 1 1
checkr3 bb113344
quit

View file

@ -0,0 +1,21 @@
# mach: crisv32
# output: ffffff20\nbb113344\n
# Test v32-specific special registers. FIXME: more registers.
.include "testutils.inc"
start
moveq -1,r3
setf zcvn
move vr,r3
test_cc 1 1 1 1
checkr3 ffffff20
moveq -1,r3
move.d 0xbb113344,r4
clearf cvnz
move r4,mof
test_cc 0 0 0 0
move mof,r3
checkr3 bb113344
quit

29
tests/cris/check_movscr.s Normal file
View file

@ -0,0 +1,29 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: 42\nffffff85\n7685\nffff8765\n0\n
; Move constant byte, word, dword to register. Check that sign-extension
; is performed.
.include "testutils.inc"
start
moveq -1,r3
movs.b 0x42,r3
checkr3 42
movs.b 0x85,r3
test_move_cc 1 0 0 0
checkr3 ffffff85
movs.w 0x7685,r3
test_move_cc 0 0 0 0
checkr3 7685
movs.w 0x8765,r3
test_move_cc 1 0 0 0
checkr3 ffff8765
movs.w 0,r3
test_move_cc 0 1 0 0
checkr3 0
quit

44
tests/cris/check_movsm.s Normal file
View file

@ -0,0 +1,44 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: 5\nfffffff5\n5\nfffffff5\n0\n
; Movs between registers. Check that sign-extension is performed and the
; full register is set.
.include "testutils.inc"
.data
x:
.byte 5,-11
.word 5,-11
.word 0
start
move.d x,r5
moveq -1,r3
movs.b [r5+],r3
test_move_cc 0 0 0 0
checkr3 5
moveq 0,r3
movs.b [r5],r3
test_move_cc 1 0 0 0
addq 1,r5
checkr3 fffffff5
moveq -1,r3
movs.w [r5+],r3
test_move_cc 0 0 0 0
checkr3 5
moveq 0,r3
movs.w [r5],r3
test_move_cc 1 0 0 0
addq 2,r5
checkr3 fffffff5
movs.w [r5],r3
test_move_cc 0 1 0 0
checkr3 0
quit

46
tests/cris/check_movsr.s Normal file
View file

@ -0,0 +1,46 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: 5\nfffffff5\n5\nfffffff5\n0\n
; Movs between registers. Check that sign-extension is performed and the
; full register is set.
.include "testutils.inc"
start
moveq -1,r5
moveq 5,r4
move.b r4,r5
moveq -1,r3
movs.b r5,r3
test_move_cc 0 0 0 0
checkr3 5
moveq 0,r5
moveq -11,r4
move.b r4,r5
moveq 0,r3
movs.b r5,r3
test_move_cc 1 0 0 0
checkr3 fffffff5
moveq -1,r5
moveq 5,r4
move.w r4,r5
moveq -1,r3
movs.w r5,r3
test_move_cc 0 0 0 0
checkr3 5
moveq 0,r5
moveq -11,r4
move.w r4,r5
moveq 0,r3
movs.w r5,r3
test_move_cc 1 0 0 0
checkr3 fffffff5
moveq 0,r5
movs.b r5,r3
test_move_cc 0 1 0 0
checkr3 0
quit

33
tests/cris/check_movucr.s Normal file
View file

@ -0,0 +1,33 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: 42\n85\n7685\n8765\n0\n
; Move constant byte, word, dword to register. Check that zero-extension
; is performed.
.include "testutils.inc"
start
moveq -1,r3
movu.b 0x42,r3
test_move_cc 0 0 0 0
checkr3 42
moveq -1,r3
movu.b 0x85,r3
test_move_cc 0 0 0 0
checkr3 85
moveq -1,r3
movu.w 0x7685,r3
test_move_cc 0 0 0 0
checkr3 7685
moveq -1,r3
movu.w 0x8765,r3
test_move_cc 0 0 0 0
checkr3 8765
movu.b 0,r3
test_move_cc 0 1 0 0
checkr3 0
quit

40
tests/cris/check_movum.s Normal file
View file

@ -0,0 +1,40 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: 5\nf5\n5\nfff5\n0\n
; Movu between registers. Check that zero-extension is performed and the
; full register is set.
.include "testutils.inc"
.data
x:
.byte 5,-11
.word 5,-11
.word 0
start
move.d x,r5
movu.b [r5+],r3
test_move_cc 0 0 0 0
checkr3 5
movu.b [r5],r3
test_move_cc 0 0 0 0
addq 1,r5
checkr3 f5
movu.w [r5+],r3
test_move_cc 0 0 0 0
checkr3 5
movu.w [r5],r3
test_move_cc 0 0 0 0
addq 2,r5
checkr3 fff5
movu.w [r5],r3
test_move_cc 0 1 0 0
checkr3 0
quit

45
tests/cris/check_movur.s Normal file
View file

@ -0,0 +1,45 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: 5\nf5\n5\nfff5\n0\n
; Movu between registers. Check that zero-extension is performed and the
; full register is set.
.include "testutils.inc"
start
moveq -1,r5
moveq 5,r4
move.b r4,r5
moveq -1,r3
movu.b r5,r3
test_move_cc 0 0 0 0
checkr3 5
moveq 0,r5
moveq -11,r4
move.b r4,r5
moveq -1,r3
movu.b r5,r3
test_move_cc 0 0 0 0
checkr3 f5
moveq -1,r5
moveq 5,r4
move.w r4,r5
moveq -1,r3
movu.w r5,r3
test_move_cc 0 0 0 0
checkr3 5
moveq 0,r5
moveq -11,r4
move.w r4,r5
moveq -1,r3
movu.w r5,r3
test_move_cc 0 0 0 0
checkr3 fff5
movu.w 0,r3
test_move_cc 0 1 0 0
checkr3 0
quit

51
tests/cris/check_mulv32.s Normal file
View file

@ -0,0 +1,51 @@
# mach: crisv32
# output: fffffffe\n
# output: ffffffff\n
# output: fffffffe\n
# output: 1\n
# output: fffffffe\n
# output: ffffffff\n
# output: fffffffe\n
# output: 1\n
; Check that carry is not modified on v32.
.include "testutils.inc"
start
moveq -1,r3
moveq 2,r4
setf c
muls.d r4,r3
test_cc 1 0 0 1
checkr3 fffffffe
move mof,r3
checkr3 ffffffff
moveq -1,r3
moveq 2,r4
setf c
mulu.d r4,r3
test_cc 0 0 1 1
checkr3 fffffffe
move mof,r3
checkr3 1
moveq -1,r3
moveq 2,r4
clearf c
muls.d r4,r3
test_cc 1 0 0 0
checkr3 fffffffe
move mof,r3
checkr3 ffffffff
moveq -1,r3
moveq 2,r4
clearf c
mulu.d r4,r3
test_cc 0 0 1 0
checkr3 fffffffe
move mof,r3
checkr3 1
quit

246
tests/cris/check_mulx.s Normal file
View file

@ -0,0 +1,246 @@
# mach: crisv10 crisv32
# output: fffffffe\nffffffff\nfffffffe\n1\nfffffffe\nffffffff\nfffffffe\n1\nfffe0001\n0\nfffe0001\n0\n1\n0\n1\nfffffffe\n193eade2\n277e3a49\n193eade2\n277e3a49\nfffffffe\nffffffff\n1fffe\n0\nfffffffe\nffffffff\n1fffe\n0\n1\n0\nfffe0001\n0\nfdbdade2\nffffffff\n420fade2\n0\nfffffffe\nffffffff\n1fe\n0\nfffffffe\nffffffff\n1fe\n0\n1\n0\nfe01\n0\n1\n0\nfe01\n0\nffffd9e2\nffffffff\n2be2\n0\n0\n0\n0\n0\n
.include "testutils.inc"
start
moveq -1,r3
moveq 2,r4
muls.d r4,r3
test_cc 1 0 0 0
checkr3 fffffffe
move mof,r3
checkr3 ffffffff
moveq -1,r3
moveq 2,r4
mulu.d r4,r3
test_cc 0 0 1 0
checkr3 fffffffe
move mof,r3
checkr3 1
moveq 2,r3
moveq -1,r4
muls.d r4,r3
test_cc 1 0 0 0
checkr3 fffffffe
move mof,r3
checkr3 ffffffff
moveq 2,r3
moveq -1,r4
mulu.d r4,r3
test_cc 0 0 1 0
checkr3 fffffffe
move mof,r3
checkr3 1
move.d 0xffff,r4
move.d r4,r3
muls.d r4,r3
test_cc 0 0 1 0
checkr3 fffe0001
move mof,r3
checkr3 0
move.d 0xffff,r4
move.d r4,r3
mulu.d r4,r3
test_cc 0 0 0 0
checkr3 fffe0001
move mof,r3
checkr3 0
moveq -1,r4
move.d r4,r3
muls.d r4,r3
test_cc 0 0 0 0
checkr3 1
move mof,r3
checkr3 0
moveq -1,r4
move.d r4,r3
mulu.d r4,r3
test_cc 1 0 1 0
checkr3 1
move mof,r3
checkr3 fffffffe
move.d 0x5432f789,r4
move.d 0x78134452,r3
muls.d r4,r3
test_cc 0 0 1 0
checkr3 193eade2
move mof,r3
checkr3 277e3a49
move.d 0x5432f789,r4
move.d 0x78134452,r3
mulu.d r4,r3
test_cc 0 0 1 0
checkr3 193eade2
move mof,r3
checkr3 277e3a49
move.d 0xffff,r3
moveq 2,r4
muls.w r4,r3
test_cc 1 0 0 0
checkr3 fffffffe
move mof,r3
checkr3 ffffffff
moveq -1,r3
moveq 2,r4
mulu.w r4,r3
test_cc 0 0 0 0
checkr3 1fffe
move mof,r3
checkr3 0
moveq 2,r3
move.d 0xffff,r4
muls.w r4,r3
test_cc 1 0 0 0
checkr3 fffffffe
move mof,r3
checkr3 ffffffff
moveq 2,r3
moveq -1,r4
mulu.w r4,r3
test_cc 0 0 0 0
checkr3 1fffe
move mof,r3
checkr3 0
move.d 0xffff,r4
move.d r4,r3
muls.w r4,r3
test_cc 0 0 0 0
checkr3 1
move mof,r3
checkr3 0
moveq -1,r4
move.d r4,r3
mulu.w r4,r3
test_cc 0 0 0 0
checkr3 fffe0001
move mof,r3
checkr3 0
move.d 0x5432f789,r4
move.d 0x78134452,r3
muls.w r4,r3
test_cc 1 0 0 0
checkr3 fdbdade2
move mof,r3
checkr3 ffffffff
move.d 0x5432f789,r4
move.d 0x78134452,r3
mulu.w r4,r3
test_cc 0 0 0 0
checkr3 420fade2
move mof,r3
checkr3 0
move.d 0xff,r3
moveq 2,r4
muls.b r4,r3
test_cc 1 0 0 0
checkr3 fffffffe
move mof,r3
checkr3 ffffffff
moveq -1,r3
moveq 2,r4
mulu.b r4,r3
test_cc 0 0 0 0
checkr3 1fe
move mof,r3
checkr3 0
moveq 2,r3
moveq -1,r4
muls.b r4,r3
test_cc 1 0 0 0
checkr3 fffffffe
move mof,r3
checkr3 ffffffff
moveq 2,r3
moveq -1,r4
mulu.b r4,r3
test_cc 0 0 0 0
checkr3 1fe
move mof,r3
checkr3 0
move.d 0xff,r4
move.d r4,r3
muls.b r4,r3
test_cc 0 0 0 0
checkr3 1
move mof,r3
checkr3 0
moveq -1,r4
move.d r4,r3
mulu.b r4,r3
test_cc 0 0 0 0
checkr3 fe01
move mof,r3
checkr3 0
move.d 0xfeda49ff,r4
move.d r4,r3
muls.b r4,r3
test_cc 0 0 0 0
checkr3 1
move mof,r3
checkr3 0
move.d 0xfeda49ff,r4
move.d r4,r3
mulu.b r4,r3
test_cc 0 0 0 0
checkr3 fe01
move mof,r3
checkr3 0
move.d 0x5432f789,r4
move.d 0x78134452,r3
muls.b r4,r3
test_cc 1 0 0 0
checkr3 ffffd9e2
move mof,r3
checkr3 ffffffff
move.d 0x5432f789,r4
move.d 0x78134452,r3
mulu.b r4,r3
test_cc 0 0 0 0
checkr3 2be2
move mof,r3
checkr3 0
moveq 0,r3
move.d 0xf87f4aeb,r4
muls.d r4,r3
test_cc 0 1 0 0
checkr3 0
move mof,r3
checkr3 0
move.d 0xf87f4aeb,r3
moveq 0,r4
mulu.d r4,r3
test_cc 0 1 0 0
checkr3 0
move mof,r3
checkr3 0
quit

104
tests/cris/check_neg.s Normal file
View file

@ -0,0 +1,104 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: ffffffff\nffffffff\n0\n80000000\n1\nba987655\nffff\nffff\n0\n89ab8000\nffff0001\n45677655\nff\nff\n0\n89abae80\nffffff01\n45678955\n
.include "testutils.inc"
start
moveq 0,r3
moveq 1,r4
neg.d r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq 1,r3
moveq 0,r4
neg.d r3,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
;; FIXME: this was wrong.
moveq 0,r3
neg.d r3,r3
test_move_cc 0 1 0 0
checkr3 0
move.d 0x80000000,r3
neg.d r3,r3
test_move_cc 1 0 0 0
checkr3 80000000
moveq -1,r3
neg.d r3,r3
test_move_cc 0 0 0 0
checkr3 1
move.d 0x456789ab,r3
neg.d r3,r3
test_move_cc 1 0 0 0
checkr3 ba987655
moveq 0,r3
moveq 1,r4
neg.w r4,r3
test_move_cc 1 0 0 0
checkr3 ffff
moveq 1,r3
moveq 0,r4
neg.w r3,r3
test_move_cc 1 0 0 0
checkr3 ffff
moveq 0,r3
neg.w r3,r3
test_move_cc 0 1 0 0
checkr3 0
move.d 0x89ab8000,r3
neg.w r3,r3
test_move_cc 1 0 0 0
checkr3 89ab8000
moveq -1,r3
neg.w r3,r3
test_move_cc 0 0 0 0
checkr3 ffff0001
move.d 0x456789ab,r3
neg.w r3,r3
test_move_cc 0 0 0 0
checkr3 45677655
moveq 0,r3
moveq 1,r4
neg.b r4,r3
test_move_cc 1 0 0 0
checkr3 ff
moveq 1,r3
moveq 0,r4
neg.b r3,r3
test_move_cc 1 0 0 0
checkr3 ff
moveq 0,r3
neg.b r3,r3
test_move_cc 0 1 0 0
checkr3 0
;; FIXME: was wrong.
move.d 0x89abae80,r3
neg.b r3,r3
test_move_cc 1 0 0 1
checkr3 89abae80
moveq -1,r3
neg.b r3,r3
test_move_cc 0 0 0 0
checkr3 ffffff01
move.d 0x456789ab,r3
neg.b r3,r3
test_move_cc 0 0 0 0
checkr3 45678955
quit

31
tests/cris/check_not.s Normal file
View file

@ -0,0 +1,31 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: fffffffe\nfffffffd\nffff0f00\n0\n87ecbbad\n
.include "testutils.inc"
start
moveq 1,r3
not r3
test_move_cc 1 0 0 0
checkr3 fffffffe
moveq 2,r3
not r3
test_move_cc 1 0 0 0
checkr3 fffffffd
move.d 0xf0ff,r3
not r3
test_move_cc 1 0 0 0
checkr3 ffff0f00
moveq -1,r3
not r3
test_move_cc 0 1 0 0
checkr3 0
move.d 0x78134452,r3
not r3
test_move_cc 1 0 0 0
checkr3 87ecbbad
quit

View file

@ -0,0 +1,38 @@
/* Check that --sysroot is applied to open(2).
#sim: --sysroot=@exedir@
We assume, with EXE being the name of the executable:
- The simulator executes with cwd the same directory where the executable
is located (so argv[0] contains a plain filename without directory
components).
- There's no /EXE on the host file system. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main (int argc, char *argv[])
{
char *fnam = argv[0];
FILE *f;
if (argv[0][0] != '/')
{
fnam = malloc (strlen (argv[0]) + 2);
if (fnam == NULL)
abort ();
strcpy (fnam, "/");
strcat (fnam, argv[0]);
}
f = fopen (fnam, "rb");
if (f == NULL)
abort ();
close (f);
/* Cover another execution path. */
if (fopen ("/nonexistent", "rb") != NULL
|| errno != ENOENT)
abort ();
printf ("pass\n");
return 0;
}

View file

@ -0,0 +1,16 @@
/* Check that the simulator has chdir:ed to the --sysroot argument
#sim: --sysroot=@srcdir@
(or that --sysroot is applied to relative file paths). */
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main (int argc, char *argv[])
{
FILE *f = fopen ("check_openpf2.c", "rb");
if (f == NULL)
abort ();
close (f);
printf ("pass\n");
return 0;
}

View file

@ -0,0 +1,49 @@
/* Basic file operations (rename, unlink); once without sysroot. We
also test that the simulator has chdir:ed to PREFIX, when defined. */
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#ifndef PREFIX
#define PREFIX
#endif
void err (const char *s)
{
perror (s);
abort ();
}
int main (int argc, char *argv[])
{
FILE *f;
struct stat buf;
unlink (PREFIX "testfoo2.tmp");
f = fopen ("testfoo1.tmp", "w");
if (f == NULL)
err ("open");
fclose (f);
if (rename (PREFIX "testfoo1.tmp", PREFIX "testfoo2.tmp") != 0)
err ("rename");
if (stat (PREFIX "testfoo2.tmp", &buf) != 0
|| !S_ISREG (buf.st_mode))
err ("stat 1");
if (stat ("testfoo2.tmp", &buf) != 0
|| !S_ISREG (buf.st_mode))
err ("stat 2");
if (unlink (PREFIX "testfoo2.tmp") != 0)
err ("unlink");
printf ("pass\n");
return 0;
}

View file

@ -0,0 +1,5 @@
/* Basic file operations, now *with* sysroot.
#sim: --sysroot=@exedir@
*/
#define PREFIX "/"
#include "check_openpf3.c"

View file

@ -0,0 +1,56 @@
/* Check that TRT happens when error on too many opened files.
#notarget: cris*-*-elf
#sim: --sysroot=@exedir@
*/
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
int main (int argc, char *argv[])
{
int i;
int filemax;
#ifdef OPEN_MAX
filemax = OPEN_MAX;
#else
filemax = sysconf (_SC_OPEN_MAX);
#endif
char *fn = malloc (strlen (argv[0]) + 2);
if (fn == NULL)
abort ();
strcpy (fn, "/");
strcat (fn, argv[0]);
for (i = 0; i < filemax + 1; i++)
{
if (open (fn, O_RDONLY) < 0)
{
/* Shouldn't happen too early. */
if (i < filemax - 3 - 1)
{
fprintf (stderr, "i: %d\n", i);
abort ();
}
if (errno != EMFILE)
{
perror ("open");
abort ();
}
goto ok;
}
}
abort ();
ok:
printf ("pass\n");
exit (0);
}

71
tests/cris/check_orc.s Normal file
View file

@ -0,0 +1,71 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 3\n3\nffff\nffffffff\n7c33f7db\nffff0003\n3\nfedaffff\n7813f7db\n3\n3\nfeb\n781344db\n
.include "testutils.inc"
start
moveq 1,r3
or.d 2,r3
test_move_cc 0 0 0 0
checkr3 3
moveq 2,r3
or.d 1,r3
test_move_cc 0 0 0 0
checkr3 3
move.d 0xf0ff,r3
or.d 0xff0f,r3
test_move_cc 0 0 0 0
checkr3 ffff
moveq -1,r3
or.d -1,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0x78134452,r3
or.d 0x5432f789,r3
test_move_cc 0 0 0 0
checkr3 7c33f7db
move.d 0xffff0001,r3
or.w 2,r3
test_move_cc 0 0 0 0
checkr3 ffff0003
moveq 2,r3
or.w 1,r3
test_move_cc 0 0 0 0
checkr3 3
move.d 0xfedaffaf,r3
or.w 0xff5f,r3
test_move_cc 1 0 0 0
checkr3 fedaffff
move.d 0x78134452,r3
or.w 0xf789,r3
test_move_cc 1 0 0 0
checkr3 7813f7db
moveq 1,r3
or.b 2,r3
test_move_cc 0 0 0 0
checkr3 3
moveq 2,r3
or.b 1,r3
test_move_cc 0 0 0 0
checkr3 3
move.d 0xfa3,r3
or.b 0x4a,r3
test_move_cc 1 0 0 0
checkr3 feb
move.d 0x78134453,r3
or.b 0x89,r3
test_move_cc 1 0 0 0
checkr3 781344db
quit

75
tests/cris/check_orm.s Normal file
View file

@ -0,0 +1,75 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 3\n3\nffff\nffffffff\n7c33f7db\nffff0003\n3\nfedaffff\n7813f7db\n3\n3\nfeb\n781344db\n
.include "testutils.inc"
.data
x:
.dword 2,1,0xff0f,-1,0x5432f789
.word 2,1,0xff5f,0xf789
.byte 2,1,0x4a,0x89
start
moveq 1,r3
move.d x,r5
or.d [r5+],r3
checkr3 3
moveq 2,r3
or.d [r5],r3
addq 4,r5
checkr3 3
move.d 0xf0ff,r3
or.d [r5+],r3
checkr3 ffff
moveq -1,r3
or.d [r5+],r3
checkr3 ffffffff
move.d 0x78134452,r3
or.d [r5+],r3
checkr3 7c33f7db
move.d 0xffff0001,r3
or.w [r5+],r3
checkr3 ffff0003
moveq 2,r3
or.w [r5],r3
addq 2,r5
test_move_cc 0 0 0 0
checkr3 3
move.d 0xfedaffaf,r3
or.w [r5+],r3
test_move_cc 1 0 0 0
checkr3 fedaffff
move.d 0x78134452,r3
or.w [r5+],r3
test_move_cc 1 0 0 0
checkr3 7813f7db
moveq 1,r3
or.b [r5+],r3
test_move_cc 0 0 0 0
checkr3 3
moveq 2,r3
or.b [r5],r3
addq 1,r5
test_move_cc 0 0 0 0
checkr3 3
move.d 0xfa3,r3
or.b [r5+],r3
test_move_cc 1 0 0 0
checkr3 feb
move.d 0x78134453,r3
or.b [r5],r3
test_move_cc 1 0 0 0
checkr3 781344db
quit

41
tests/cris/check_orq.s Normal file
View file

@ -0,0 +1,41 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 3\n3\nffffffff\nffffffff\n1f\nffffffe0\n7813445e\n
.include "testutils.inc"
start
moveq 1,r3
orq 2,r3
test_move_cc 0 0 0 0
checkr3 3
moveq 2,r3
orq 1,r3
test_move_cc 0 0 0 0
checkr3 3
move.d 0xf0ff,r3
orq -1,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq 0,r3
orq -1,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
moveq 0,r3
orq 31,r3
test_move_cc 0 0 0 0
checkr3 1f
moveq 0,r3
orq -32,r3
test_move_cc 1 0 0 0
checkr3 ffffffe0
move.d 0x78134452,r3
orq 12,r3
test_move_cc 0 0 0 0
checkr3 7813445e
quit

84
tests/cris/check_orr.s Normal file
View file

@ -0,0 +1,84 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 3\n3\nffff\nffffffff\n7c33f7db\nffff0003\n3\nfedaffff\n7813f7db\n3\n3\nfeb\n781344db\n
.include "testutils.inc"
start
moveq 1,r3
moveq 2,r4
or.d r4,r3
test_move_cc 0 0 0 0
checkr3 3
moveq 2,r3
moveq 1,r4
or.d r4,r3
test_move_cc 0 0 0 0
checkr3 3
move.d 0xff0f,r4
move.d 0xf0ff,r3
or.d r4,r3
test_move_cc 0 0 0 0
checkr3 ffff
moveq -1,r4
move.d r4,r3
or.d r4,r3
test_move_cc 1 0 0 0
checkr3 ffffffff
move.d 0x5432f789,r4
move.d 0x78134452,r3
or.d r4,r3
test_move_cc 0 0 0 0
checkr3 7c33f7db
move.d 0xffff0001,r3
moveq 2,r4
or.w r4,r3
test_move_cc 0 0 0 0
checkr3 ffff0003
moveq 2,r3
move.d 0xffff0001,r4
or.w r4,r3
test_move_cc 0 0 0 0
checkr3 3
move.d 0xfedaffaf,r3
move.d 0xffffff5f,r4
or.w r4,r3
test_move_cc 1 0 0 0
checkr3 fedaffff
move.d 0x5432f789,r4
move.d 0x78134452,r3
or.w r4,r3
test_move_cc 1 0 0 0
checkr3 7813f7db
moveq 1,r3
move.d 0xffffff02,r4
or.b r4,r3
test_move_cc 0 0 0 0
checkr3 3
moveq 2,r3
moveq 1,r4
or.b r4,r3
test_move_cc 0 0 0 0
checkr3 3
move.d 0x4a,r4
move.d 0xfa3,r3
or.b r4,r3
test_move_cc 1 0 0 0
checkr3 feb
move.d 0x5432f789,r4
move.d 0x78134453,r3
or.b r4,r3
test_move_cc 1 0 0 0
checkr3 781344db
quit

25
tests/cris/check_ret.s Normal file
View file

@ -0,0 +1,25 @@
# mach: crisv3 crisv8 crisv10
# output: 3\n
# Test that ret works.
.include "testutils.inc"
start
x:
moveq 0,r3
jsr z
w:
quit
y:
addq 1,r3
checkr3 3
quit
z:
addq 1,r3
move srp,r2
add.d y-w,r2
move r2,srp
ret
addq 1,r3
quit

95
tests/cris/check_scc.s Normal file
View file

@ -0,0 +1,95 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 1\n0\n1\n0\n1\n0\n1\n0\n0\n1\n1\n0\n1\n0\n1\n0\n1\n0\n0\n1\n0\n1\n1\n0\n1\n0\n0\n1\n1\n0\n1\n1\n0\n
.include "testutils.inc"
.macro lcheckr3 v
move $ccs, $r9
checkr3 \v
move $r9, $ccs
.endm
start
clearf nzvc
scc r3
lcheckr3 1
scs r3
lcheckr3 0
sne r3
lcheckr3 1
seq r3
lcheckr3 0
svc r3
lcheckr3 1
svs r3
lcheckr3 0
spl r3
lcheckr3 1
smi r3
lcheckr3 0
sls r3
lcheckr3 0
shi r3
lcheckr3 1
sge r3
lcheckr3 1
slt r3
lcheckr3 0
sgt r3
lcheckr3 1
sle r3
lcheckr3 0
sa r3
lcheckr3 1
setf nzvc
scc r3
lcheckr3 0
scs r3
lcheckr3 1
sne r3
lcheckr3 0
svc r3
lcheckr3 0
svs r3
lcheckr3 1
spl r3
lcheckr3 0
smi r3
lcheckr3 1
sls r3
lcheckr3 1
shi r3
lcheckr3 0
sge r3
lcheckr3 1
slt r3
lcheckr3 0
sgt r3
lcheckr3 0
sle r3
lcheckr3 1
sa r3
lcheckr3 1
clearf n
sge r3
lcheckr3 0
slt r3
lcheckr3 1
.if 1 ;..asm.arch.cris.v32
setf p
ssb r3
.else
moveq 1,r3
.endif
lcheckr3 1
.if 1 ;..asm.arch.cris.v32
clearf p
ssb r3
.else
moveq 0,r3
.endif
lcheckr3 0
quit

16
tests/cris/check_stat1.c Normal file
View file

@ -0,0 +1,16 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
struct stat buf;
if (stat (".", &buf) != 0
|| !S_ISDIR (buf.st_mode))
abort ();
printf ("pass\n");
exit (0);
}

20
tests/cris/check_stat2.c Normal file
View file

@ -0,0 +1,20 @@
/*
#notarget: cris*-*-elf
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
struct stat buf;
if (lstat (".", &buf) != 0
|| !S_ISDIR (buf.st_mode))
abort ();
printf ("pass\n");
exit (0);
}

26
tests/cris/check_stat3.c Normal file
View file

@ -0,0 +1,26 @@
/* Simulator options:
#sim: --sysroot=@exedir@
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
char path[1024] = "/";
struct stat buf;
strcat (path, argv[0]);
if (stat (".", &buf) != 0
|| !S_ISDIR (buf.st_mode))
abort ();
if (stat (path, &buf) != 0
|| !S_ISREG (buf.st_mode))
abort ();
printf ("pass\n");
exit (0);
}

28
tests/cris/check_stat4.c Normal file
View file

@ -0,0 +1,28 @@
/* Simulator options:
#notarget: cris*-*-elf
#sim: --sysroot=@exedir@
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
char path[1024] = "/";
struct stat buf;
strcat (path, argv[0]);
if (lstat (".", &buf) != 0
|| !S_ISDIR (buf.st_mode))
abort ();
if (lstat (path, &buf) != 0
|| !S_ISREG (buf.st_mode))
abort ();
printf ("pass\n");
exit (0);
}

87
tests/cris/check_subc.s Normal file
View file

@ -0,0 +1,87 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 1\n1\n1fffe\nfffffffe\ncc463bdb\nffff0001\n1\nfffe\nfedafffe\n78133bdb\nffffff01\n1\nfe\nfeda49fe\n781344db\n85649200\n
.include "testutils.inc"
start
moveq -1,r3
sub.d -2,r3
test_cc 0 0 0 0
checkr3 1
moveq 2,r3
sub.d 1,r3
test_cc 0 0 0 0
checkr3 1
move.d 0xffff,r3
sub.d -0xffff,r3
test_cc 0 0 0 1
checkr3 1fffe
moveq -1,r3
sub.d 1,r3
test_cc 1 0 0 0
checkr3 fffffffe
move.d 0x78134452,r3
sub.d -0x5432f789,r3
test_cc 1 0 1 1
checkr3 cc463bdb
moveq -1,r3
sub.w -2,r3
test_cc 0 0 0 0
checkr3 ffff0001
moveq 2,r3
sub.w 1,r3
test_cc 0 0 0 0
checkr3 1
move.d 0xffff,r3
sub.w 1,r3
test_cc 1 0 0 0
checkr3 fffe
move.d 0xfedaffff,r3
sub.w 1,r3
test_cc 1 0 0 0
checkr3 fedafffe
move.d 0x78134452,r3
sub.w 0x877,r3
test_cc 0 0 0 0
checkr3 78133bdb
moveq -1,r3
sub.b -2,r3
test_cc 0 0 0 0
checkr3 ffffff01
moveq 2,r3
sub.b 1,r3
test_cc 0 0 0 0
checkr3 1
move.d 0xff,r3
sub.b 1,r3
test_cc 1 0 0 0
checkr3 fe
move.d 0xfeda49ff,r3
sub.b 1,r3
test_cc 1 0 0 0
checkr3 feda49fe
move.d 0x78134452,r3
sub.b 0x77,r3
test_cc 1 0 0 1
checkr3 781344db
move.d 0x85649282,r3
sub.b 0x82,r3
test_cc 0 1 0 0
checkr3 85649200
quit

96
tests/cris/check_subm.s Normal file
View file

@ -0,0 +1,96 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 1\n1\n1fffe\nfffffffe\ncc463bdb\nffff0001\n1\nfffe\nfedafffe\n78133bdb\nffffff01\n1\nfe\nfeda49fe\n781344db\n85649200\n
.include "testutils.inc"
.data
x:
.dword -2,1,-0xffff,1,-0x5432f789
.word -2,1,1,0x877
.byte -2,1,0x77
.byte 0x22
start
moveq -1,r3
move.d x,r5
sub.d [r5+],r3
test_cc 0 0 0 0
checkr3 1
moveq 2,r3
sub.d [r5],r3
test_cc 0 0 0 0
addq 4,r5
checkr3 1
move.d 0xffff,r3
sub.d [r5+],r3
test_cc 0 0 0 1
checkr3 1fffe
moveq -1,r3
sub.d [r5+],r3
test_cc 1 0 0 0
checkr3 fffffffe
move.d 0x78134452,r3
sub.d [r5+],r3
test_cc 1 0 1 1
checkr3 cc463bdb
moveq -1,r3
sub.w [r5+],r3
test_cc 0 0 0 0
checkr3 ffff0001
moveq 2,r3
sub.w [r5+],r3
test_cc 0 0 0 0
checkr3 1
move.d 0xffff,r3
sub.w [r5],r3
test_cc 1 0 0 0
checkr3 fffe
move.d 0xfedaffff,r3
sub.w [r5+],r3
test_cc 1 0 0 0
checkr3 fedafffe
move.d 0x78134452,r3
sub.w [r5+],r3
test_cc 0 0 0 0
checkr3 78133bdb
moveq -1,r3
sub.b [r5],r3
test_cc 0 0 0 0
addq 1,r5
checkr3 ffffff01
moveq 2,r3
sub.b [r5],r3
test_cc 0 0 0 0
checkr3 1
move.d 0xff,r3
sub.b [r5],r3
test_cc 1 0 0 0
checkr3 fe
move.d 0xfeda49ff,r3
sub.b [r5+],r3
test_cc 1 0 0 0
checkr3 feda49fe
move.d 0x78134452,r3
sub.b [r5+],r3
test_cc 1 0 0 1
checkr3 781344db
move.d 0x85649222,r3
sub.b [r5],r3
test_cc 0 1 0 0
checkr3 85649200
quit

52
tests/cris/check_subq.s Normal file
View file

@ -0,0 +1,52 @@
# mach: crisv3 crisv8 crisv10 crisv32
# output: 0\nffffffff\nfffffffe\nffff\nff\n56788f9\n56788d9\n567889a\n0\n7ffffffc\n
.include "testutils.inc"
start
moveq 1,r3
subq 1,r3
test_cc 0 1 0 0
checkr3 0
subq 1,r3
test_cc 1 0 0 1
checkr3 ffffffff
subq 1,r3
test_cc 1 0 0 0
checkr3 fffffffe
move.d 0x10000,r3
subq 1,r3
test_cc 0 0 0 0
checkr3 ffff
move.d 0x100,r3
subq 1,r3
test_cc 0 0 0 0
checkr3 ff
move.d 0x5678900,r3
subq 7,r3
test_cc 0 0 0 0
checkr3 56788f9
subq 32,r3
test_cc 0 0 0 0
checkr3 56788d9
subq 63,r3
test_cc 0 0 0 0
checkr3 567889a
move.d 34,r3
subq 34,r3
test_cc 0 1 0 0
checkr3 0
move.d 0x80000024,r3
subq 40,r3
test_cc 0 0 1 0
checkr3 7ffffffc
quit

102
tests/cris/check_subr.s Normal file
View file

@ -0,0 +1,102 @@
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
# output: 1\n1\n1fffe\nfffffffe\ncc463bdb\nffff0001\n1\nfffe\nfedafffe\n78133bdb\nffffff01\n1\nfe\nfeda49fe\n781344db\n85649200\n
.include "testutils.inc"
start
moveq -1,r3
moveq -2,r4
sub.d r4,r3
test_cc 0 0 0 0
checkr3 1
moveq 2,r3
moveq 1,r4
sub.d r4,r3
test_cc 0 0 0 0
checkr3 1
move.d 0xffff,r3
move.d -0xffff,r4
sub.d r4,r3
test_cc 0 0 0 1
checkr3 1fffe
moveq 1,r4
moveq -1,r3
sub.d r4,r3
test_cc 1 0 0 0
checkr3 fffffffe
move.d -0x5432f789,r4
move.d 0x78134452,r3
sub.d r4,r3
test_cc 1 0 1 1
checkr3 cc463bdb
moveq -1,r3
moveq -2,r4
sub.w r4,r3
test_cc 0 0 0 0
checkr3 ffff0001
moveq 2,r3
moveq 1,r4
sub.w r4,r3
test_cc 0 0 0 0
checkr3 1
move.d 0xffff,r3
move.d -0xffff,r4
sub.w r4,r3
test_cc 1 0 0 0
checkr3 fffe
move.d 0xfedaffff,r3
move.d -0xfedaffff,r4
sub.w r4,r3
test_cc 1 0 0 0
checkr3 fedafffe
move.d -0x5432f789,r4
move.d 0x78134452,r3
sub.w r4,r3
test_cc 0 0 0 0
checkr3 78133bdb
moveq -1,r3
moveq -2,r4
sub.b r4,r3
test_cc 0 0 0 0
checkr3 ffffff01
moveq 2,r3
moveq 1,r4
sub.b r4,r3
test_cc 0 0 0 0
checkr3 1
move.d -0xff,r4
move.d 0xff,r3
sub.b r4,r3
test_cc 1 0 0 0
checkr3 fe
move.d -0xfeda49ff,r4
move.d 0xfeda49ff,r3
sub.b r4,r3
test_cc 1 0 0 0
checkr3 feda49fe
move.d -0x5432f789,r4
move.d 0x78134452,r3
sub.b r4,r3
test_cc 1 0 0 1
checkr3 781344db
move.d 0x85649222,r3
move.d 0x77445622,r4
sub.b r4,r3
test_cc 0 1 0 0
checkr3 85649200
quit

75
tests/cris/check_swap.c Normal file
View file

@ -0,0 +1,75 @@
#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
extern 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();
}

46
tests/cris/check_time1.c Normal file
View file

@ -0,0 +1,46 @@
/* Basic time functionality test: check that milliseconds are
incremented for each syscall (does not work on host). */
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <string.h>
#include <stdlib.h>
void err (const char *s)
{
perror (s);
abort ();
}
int
main (void)
{
struct timeval t_m = {0, 0};
struct timezone t_z = {0, 0};
struct timeval t_m1 = {0, 0};
int i;
if (gettimeofday (&t_m, &t_z) != 0)
err ("gettimeofday");
for (i = 1; i < 10000; i++)
if (gettimeofday (&t_m1, NULL) != 0)
err ("gettimeofday 1");
else
if (t_m1.tv_sec * 1000000 + t_m1.tv_usec
!= (t_m.tv_sec * 1000000 + t_m.tv_usec + i * 1000))
{
fprintf (stderr, "t0 (%ld, %ld), i %d, t1 (%ld, %ld)\n",
t_m.tv_sec, t_m.tv_usec, i, t_m1.tv_sec, t_m1.tv_usec);
abort ();
}
if (time (NULL) != t_m1.tv_sec)
{
fprintf (stderr, "time != gettod\n");
abort ();
}
printf ("pass\n");
exit (0);
}

18
tests/cris/check_time2.c Normal file
View file

@ -0,0 +1,18 @@
/* CB_SYS_time doesn't implement the Linux time syscall; the return
value isn't written to the argument. */
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int
main (void)
{
time_t x = (time_t) -1;
time_t t = time (&x);
if (t == (time_t) -1 || t != x)
abort ();
printf ("pass\n");
exit (0);
}

46
tests/cris/check_xarith.s Normal file
View file

@ -0,0 +1,46 @@
.include "testutils.inc"
start
moveq -1, $r0
moveq 0, $r1
addq 1, $r0
ax
addq 0, $r1
move.d $r0, $r3
checkr3 0
move.d $r1, $r3
checkr3 1
move.d 0, $r0
moveq -1, $r1
subq 1, $r0
ax
subq 0, $r1
move.d $r0, $r3
checkr3 ffffffff
move.d $r1, $r3
checkr3 fffffffe
moveq -1, $r0
moveq -1, $r1
cmpq -1, $r0
ax
cmpq -1, $r1
beq 1f
nop
fail
1:
cmpq 0, $r0
ax
cmpq -1, $r1
bne 1f
nop
fail
1:
pass
quit

71
tests/cris/crisutils.h Normal file
View file

@ -0,0 +1,71 @@
static char *tst_cc_loc = NULL;
#define cris_tst_cc_init() \
do { tst_cc_loc = "test_cc failed at " CURRENT_LOCATION; } while(0)
/* We need a real symbol to signal error. */
static void _err(void) {
if (!tst_cc_loc)
tst_cc_loc = "tst_cc_failed\n";
_fail(tst_cc_loc);
}
extern inline void cris_tst_cc_n1(void)
{
asm volatile ("bpl _err\n"
"nop\n");
}
extern inline void cris_tst_cc_n0(void)
{
asm volatile ("bmi _err\n"
"nop\n");
}
extern inline void cris_tst_cc_z1(void)
{
asm volatile ("bne _err\n"
"nop\n");
}
extern inline void cris_tst_cc_z0(void)
{
asm volatile ("beq _err\n"
"nop\n");
}
extern inline void cris_tst_cc_v1(void)
{
asm volatile ("bvc _err\n"
"nop\n");
}
extern inline void cris_tst_cc_v0(void)
{
asm volatile ("bvs _err\n"
"nop\n");
}
extern inline void cris_tst_cc_c1(void)
{
asm volatile ("bcc _err\n"
"nop\n");
}
extern inline void cris_tst_cc_c0(void)
{
asm volatile ("bcs _err\n"
"nop\n");
}
extern inline void cris_tst_mov_cc(int n, int z)
{
if (n) cris_tst_cc_n1(); else cris_tst_cc_n0();
if (z) cris_tst_cc_z1(); else cris_tst_cc_z0();
asm volatile ("" : : "g" (_err));
}
extern inline void cris_tst_cc(const int n, const int z,
const int v, const int c)
{
if (n) cris_tst_cc_n1(); else cris_tst_cc_n0();
if (z) cris_tst_cc_z1(); else cris_tst_cc_z0();
if (v) cris_tst_cc_v1(); else cris_tst_cc_v0();
if (c) cris_tst_cc_c1(); else cris_tst_cc_c0();
asm volatile ("" : : "g" (_err));
}

13
tests/cris/crt.s Normal file
View file

@ -0,0 +1,13 @@
.data
_stack_start:
.space 8192, 0
_stack_end:
.text
.global _start
_start:
move.d _stack_end, $sp
jsr main
nop
moveq 0, $r10
jump exit
nop

Some files were not shown because too many files have changed in this diff Show more