mirror of https://gitee.com/openkylin/qemu.git
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:
parent
83fa1010ae
commit
dd43edf4e1
|
@ -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
|
||||
|
|
@ -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)
|
|
@ -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.
|
||||
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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;
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
int main ()
|
||||
{
|
||||
printf ("pass\n");
|
||||
exit (0);
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
}
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
/* Basic file operations, now *with* sysroot.
|
||||
#sim: --sysroot=@exedir@
|
||||
*/
|
||||
#define PREFIX "/"
|
||||
#include "check_openpf3.c"
|
|
@ -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);
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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();
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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
|
|
@ -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));
|
||||
}
|
|
@ -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
Loading…
Reference in New Issue