Browse Source
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3365 c046a42c-6fe2-441c-8c8c-71466251a162stable-0.10
103 changed files with 7014 additions and 0 deletions
@ -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 changed in this diff
Loading…
Reference in new issue