Revision dd43edf4

b/tests/cris/.gdbinit
1
b main
2
b _fail
3
b exit
4
display /i $pc
5
display /x $srp
6
display /x $r0
7
display /x $r1
8
display /x $r2
9
display /x $r3
10
display /x $r4
11
display /t $ccs
12

  
b/tests/cris/Makefile
1
-include ../../config-host.mak
2

  
3
CROSS=crisv32-axis-linux-gnu-
4
SIM=../../cris-linux-user/qemu-cris -L ./
5
SIMG=cris-axis-linux-gnu-run --sysroot=./
6

  
7
CC      = $(CROSS)gcc
8
#AS      = $(CROSS)as
9
AS	= $(CC) -x assembler-with-cpp
10
SIZE    = $(CROSS)size
11
LD      = $(CC)
12
OBJCOPY = $(CROSS)objcopy
13

  
14
# we rely on GCC inline:ing the stuff we tell it to in many places here.
15
CFLAGS  = -Winline -Wall -g -O2 -static
16
NOSTDFLAGS = -nostartfiles -nostdlib
17
ASFLAGS += -g -Wa,-I,$(SRC_PATH)/tests/cris/
18
LDLIBS  =
19
NOSTDLIBS = -lgcc
20

  
21
CRT        = crt.o
22
SYS        = sys.o
23
TESTCASES += check_abs.tst
24
TESTCASES += check_addc.tst
25
TESTCASES += check_addcm.tst
26
TESTCASES += check_addo.tst
27
TESTCASES += check_addoq.tst
28
TESTCASES += check_addi.tst
29
TESTCASES += check_addiv32.tst
30
TESTCASES += check_addm.tst
31
TESTCASES += check_addr.tst
32
TESTCASES += check_addq.tst
33
TESTCASES += check_addxc.tst
34
TESTCASES += check_addxm.tst
35
TESTCASES += check_addxr.tst
36
TESTCASES += check_andc.tst
37
TESTCASES += check_andm.tst
38
TESTCASES += check_andr.tst
39
TESTCASES += check_andq.tst
40
TESTCASES += check_asr.tst
41
TESTCASES += check_ba.tst
42
TESTCASES += check_bas.tst
43
TESTCASES += check_bcc.tst
44
TESTCASES += check_bound.tst
45
TESTCASES += check_boundc.tst
46
TESTCASES += check_boundr.tst
47
TESTCASES += check_btst.tst
48
TESTCASES += check_clearfv32.tst
49
TESTCASES += check_cmpc.tst
50
TESTCASES += check_cmpr.tst
51
TESTCASES += check_cmpq.tst
52
TESTCASES += check_cmpm.tst
53
TESTCASES += check_cmpxc.tst
54
TESTCASES += check_cmpxm.tst
55
TESTCASES += check_cmp-2.tst
56
TESTCASES += check_clrjmp1.tst
57
TESTCASES += check_dstep.tst
58
TESTCASES += check_int64.tst
59
# check_jsr is broken.
60
#TESTCASES += check_jsr.tst
61
TESTCASES += check_mcp.tst
62
TESTCASES += check_movei.tst
63
TESTCASES += check_mover.tst
64
TESTCASES += check_moverm.tst
65
TESTCASES += check_moveq.tst
66
TESTCASES += check_movemr.tst
67
TESTCASES += check_movemrv32.tst
68
TESTCASES += check_movecr.tst
69
TESTCASES += check_movmp.tst
70
TESTCASES += check_movpr.tst
71
TESTCASES += check_movprv32.tst
72
TESTCASES += check_movdelsr1.tst
73
TESTCASES += check_movpmv32.tst
74
TESTCASES += check_movsr.tst
75
TESTCASES += check_movsm.tst
76
TESTCASES += check_movscr.tst
77
TESTCASES += check_movur.tst
78
TESTCASES += check_movum.tst
79
TESTCASES += check_movucr.tst
80
TESTCASES += check_mulx.tst
81
TESTCASES += check_mulv32.tst
82
TESTCASES += check_neg.tst
83
TESTCASES += check_not.tst
84
TESTCASES += check_lz.tst
85
TESTCASES += check_lapc.tst
86
TESTCASES += check_lsl.tst
87
TESTCASES += check_lsr.tst
88
TESTCASES += check_orc.tst
89
TESTCASES += check_orm.tst
90
TESTCASES += check_orr.tst
91
TESTCASES += check_orq.tst
92
TESTCASES += check_ret.tst
93
TESTCASES += check_swap.tst
94
TESTCASES += check_scc.tst
95
TESTCASES += check_subc.tst
96
TESTCASES += check_subq.tst
97
TESTCASES += check_subr.tst
98
TESTCASES += check_subm.tst
99
TESTCASES += check_glibc_kernelversion.tst
100
TESTCASES += check_xarith.tst
101

  
102
TESTCASES += check_hello.ctst
103
TESTCASES += check_stat1.ctst
104
TESTCASES += check_stat2.ctst
105
TESTCASES += check_stat3.ctst
106
TESTCASES += check_stat4.ctst
107
TESTCASES += check_openpf1.ctst
108
TESTCASES += check_openpf2.ctst
109
TESTCASES += check_openpf3.ctst
110
TESTCASES += check_openpf4.ctst
111
TESTCASES += check_openpf5.ctst
112
TESTCASES += check_mapbrk.ctst
113
TESTCASES += check_mmap1.ctst
114
TESTCASES += check_mmap2.ctst
115
TESTCASES += check_mmap3.ctst
116
TESTCASES += check_time1.ctst
117
TESTCASES += check_time2.ctst
118

  
119

  
120
TESTCASES += check_gcctorture_pr28634-1.ctst
121
#TESTCASES += check_gcctorture_pr28634.ctst
122

  
123
all: build
124

  
125
%.o: $(SRC_PATH)/tests/cris/%.c
126
	$(CC) $(CFLAGS) -c $< -o $@
127

  
128
%.o: $(SRC_PATH)/tests/cris/%.s
129
	$(AS) $(ASFLAGS) -c $< -o $@
130

  
131
%.tst: %.o
132
	$(CC) $(CFLAGS) $(NOSTDFLAGS) $(LDLIBS) $(NOSTDLIBS) $(CRT) $< $(SYS) -o $@
133

  
134
%.ctst: %.o
135
	$(CC) $(CFLAGS) $(LDLIBS) $< -o $@
136

  
137
build: $(CRT) $(SYS) $(TESTCASES)
138

  
139
check: $(CRT) $(SYS) $(TESTCASES)
140
	@echo -e "\nQEMU simulator."
141
	@for case in $(TESTCASES); do \
142
		echo -n "$$case "; \
143
		$(SIM) $$case; \
144
	done
145
check-g: $(CRT) $(SYS) $(TESTCASES)
146
	@echo -e "\nGDB simulator."
147
	@for case in $(TESTCASES); do \
148
		echo -n "$$case "; \
149
		$(SIMG) $$case; \
150
	done
151

  
152
clean:
153
	$(RM) -fr $(TESTCASES) $(CRT) $(SYS)
b/tests/cris/README
1
Test-suite for the cris port. Heavily based on the test-suite for the CRIS port of sim by Hans-Peter Nilsson.
2

  
b/tests/cris/check_abs.c
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <stdint.h>
4
#include "sys.h"
5
#include "crisutils.h"
6

  
7
extern inline int cris_abs(int n) {
8
	int r;
9
	asm ("abs\t%1, %0\n" : "=r" (r) : "r" (n));
10
	return r;
11
}
12

  
13
extern inline void
14
verify_abs(int val, int res,
15
	   const int n, const int z, const int v, const int c)
16
{
17
	int r;
18

  
19
	cris_tst_cc_init();
20
	r = cris_abs(val);
21
	cris_tst_cc(n, z, v, c);
22
	if (r != res)
23
		err();
24
}
25

  
26
int main(void)
27
{
28
	verify_abs(-1, 1, 0, 0, 0, 0);
29
	verify_abs(0x80000000, 0x80000000, 1, 0, 0, 0);
30
	verify_abs(0x7fffffff, 0x7fffffff, 0, 0, 0, 0);
31
	verify_abs(42, 42, 0, 0, 0, 0);
32
	verify_abs(1, 1, 0, 0, 0, 0);
33
	verify_abs(0xffff, 0xffff, 0, 0, 0, 0);
34
	verify_abs(0xffff, 0xffff, 0, 0, 0, 0);
35
	verify_abs(-31, 0x1f, 0, 0, 0, 0);
36
	verify_abs(0, 0, 0, 1, 0, 0);
37
	pass();
38
	return 0;
39
}
b/tests/cris/check_addc.c
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <stdint.h>
4
#include "sys.h"
5
#include "crisutils.h"
6

  
7
extern inline int cris_addc(int a, const int b) {
8
	asm ("addc\t%1, %0\n" : "+r" (a) : "r" (b));
9
	return a;
10
}
11

  
12
#define verify_addc(a, b, res, n, z, v, c)  \
13
{                                           \
14
	int r;                              \
15
	r = cris_addc((a), (b));            \
16
	cris_tst_cc((n), (z), (v), (c));    \
17
	if (r != (res))                     \
18
		err();                      \
19
}
20

  
21
int main(void)
22
{
23
	cris_tst_cc_init();
24
	asm volatile ("clearf cz");
25
	verify_addc(0, 0, 0, 0, 0, 0, 0);
26

  
27
	cris_tst_cc_init();
28
	asm volatile ("setf z");
29
	verify_addc(0, 0, 0, 0, 1, 0, 0);
30

  
31
	cris_tst_cc_init();
32
	asm volatile ("setf cz");
33
	verify_addc(0, 0, 1, 0, 0, 0, 0);
34
	cris_tst_cc_init();
35
	asm volatile ("clearf c");
36
	verify_addc(-1, 2, 1, 0, 0, 0, 1);
37

  
38
	cris_tst_cc_init();
39
	asm volatile ("clearf nzv");
40
	asm volatile ("setf c");
41
	verify_addc(-1, 2, 2, 0, 0, 0, 1);
42

  
43
	cris_tst_cc_init();
44
	asm volatile ("setf c");
45
	verify_addc(0xffff, 0xffff, 0x1ffff, 0, 0, 0, 0);
46

  
47
	cris_tst_cc_init();
48
	asm volatile ("clearf nzvc");
49
	verify_addc(-1, -1, 0xfffffffe, 1, 0, 0, 1);
50

  
51
	cris_tst_cc_init();
52
	asm volatile ("setf c");
53
	verify_addc(0x78134452, 0x5432f789, 0xcc463bdc, 1, 0, 1, 0);
54

  
55
	pass();
56
	return 0;
57
}
b/tests/cris/check_addcm.c
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <stdint.h>
4
#include "sys.h"
5
#include "crisutils.h"
6

  
7
/* need to avoid acr as source here.  */
8
extern inline int cris_addc_m(int a, const int *b) {
9
	asm volatile ("addc [%1], %0\n" : "+r" (a) : "r" (b));
10
	return a;
11
}
12

  
13
/* 'b' is a crisv32 constrain to avoid postinc with $acr.  */
14
extern inline int cris_addc_pi_m(int a, int **b) {
15
	asm volatile ("addc [%1+], %0\n" : "+r" (a), "+b" (*b));
16
	return a;
17
}
18

  
19
#define verify_addc_m(a, b, res, n, z, v, c)  \
20
{                                           \
21
	int r;                              \
22
	r = cris_addc_m((a), (b));            \
23
	cris_tst_cc((n), (z), (v), (c));    \
24
	if (r != (res))                     \
25
		err();                      \
26
}
27

  
28
#define verify_addc_pi_m(a, b, res, n, z, v, c)  \
29
{                                           \
30
	int r;                              \
31
	r = cris_addc_pi_m((a), (b));            \
32
	cris_tst_cc((n), (z), (v), (c));    \
33
	if (r != (res))                     \
34
		err();                      \
35
}
36

  
37
int x[] = { 0, 0, 2, -1, 0xffff, -1, 0x5432f789};
38

  
39
int main(void)
40
{
41
	int *p = (void *)&x[0];
42
#if 1
43
	cris_tst_cc_init();
44
	asm volatile ("clearf cz");
45
	verify_addc_m(0, p, 0, 0, 0, 0, 0);
46

  
47
	cris_tst_cc_init();
48
	asm volatile ("setf z");
49
	verify_addc_m(0, p, 0, 0, 1, 0, 0);
50

  
51
	cris_tst_cc_init();
52
	asm volatile ("setf c");
53
	verify_addc_m(0, p, 1, 0, 0, 0, 0);
54

  
55
	cris_tst_cc_init();
56
	asm volatile ("clearf c");
57
	verify_addc_pi_m(0, &p, 0, 0, 1, 0, 0);
58

  
59
	p = &x[1];
60
	cris_tst_cc_init();
61
	asm volatile ("setf c");
62
	verify_addc_pi_m(0, &p, 1, 0, 0, 0, 0);
63

  
64
	if (p != &x[2])
65
		err();
66

  
67
	cris_tst_cc_init();
68
	asm volatile ("clearf c");
69
	verify_addc_pi_m(-1, &p, 1, 0, 0, 0, 1);
70

  
71
	if (p != &x[3])
72
		err();
73
#endif
74
	p = &x[3];
75
	/* TODO: investigate why this one fails.  */
76
	cris_tst_cc_init();
77
	asm volatile ("setf c");
78
	verify_addc_m(2, p, 2, 0, 0, 0, 1);
79
	p += 4;
80

  
81
	pass();
82
	return 0;
83
}
b/tests/cris/check_addi.s
1
# mach:  crisv0 crisv3 crisv8 crisv10 crisv32
2
# output: 0\n1\n2\n4\nbe02460f\n69d035a6\nc16c14d4\n
3

  
4
 .include "testutils.inc"
5
 start
6
 moveq 0,r3
7
 moveq 0,r4
8
 clearf zcvn
9
 addi r4.b,r3
10
 test_cc 0 0 0 0
11
 checkr3 0
12

  
13
 moveq 0,r3
14
 moveq 1,r4
15
 setf zcvn
16
 addi r4.b,r3
17
 test_cc 1 1 1 1
18
 checkr3 1
19

  
20
 moveq 0,r3
21
 moveq 1,r4
22
 setf cv
23
 clearf zn
24
 addi r4.w,r3
25
 test_cc 0 0 1 1
26
 checkr3 2
27

  
28
 moveq 0,r3
29
 moveq 1,r4
30
 clearf cv
31
 setf zn
32
 addi r4.d,r3
33
 test_cc 1 1 0 0
34
 checkr3 4
35

  
36
 move.d 0x12345678,r3
37
 move.d 0xabcdef97,r4
38
 clearf cn
39
 setf zv
40
 addi r4.b,r3
41
 test_cc 0 1 1 0
42
 checkr3 be02460f
43

  
44
 move.d 0x12345678,r3
45
 move.d 0xabcdef97,r4
46
 setf cn
47
 clearf zv
48
 addi r4.w,r3
49
 test_cc 1 0 0 1
50
 checkr3 69d035a6
51

  
52
 move.d 0x12345678,r3
53
 move.d 0xabcdef97,r4
54
 addi r4.d,r3
55
 checkr3 c16c14d4
56

  
57
 quit
b/tests/cris/check_addiv32.s
1
# mach: crisv32
2
# output: 4455aa77\n4455aa77\nee19ccff\nff22\n4455aa77\nff224455\n55aa77ff\n
3

  
4
 .include "testutils.inc"
5
 .data
6
x:
7
 .dword 0x55aa77ff
8
 .dword 0xccff2244
9
 .dword 0x88ccee19
10

  
11
 start
12
 setf cv
13
 moveq -1,r0
14
 move.d x-32768,r5
15
 move.d 32769,r6
16
 addi r6.b,r5,acr
17
 test_cc 0 0 1 1
18
 move.d [acr],r3
19
 checkr3 4455aa77
20

  
21
 addu.w 32771,r5
22
 setf znvc
23
 moveq -1,r8
24
 addi r8.w,r5,acr
25
 test_cc 1 1 1 1
26
 move.d [acr],r3
27
 checkr3 4455aa77
28

  
29
 moveq 5,r10
30
 clearf znvc
31
 addi r10.b,acr,acr
32
 test_cc 0 0 0 0
33
 move.d [acr],r3
34
 checkr3 ee19ccff
35

  
36
 subq 1,r5
37
 move.d r5,r8
38
 subq 1,r8
39
 moveq 1,r9
40
 addi r9.d,r8,acr
41
 test_cc 0 0 0 0
42
 movu.w [acr],r3
43
 checkr3 ff22
44

  
45
 moveq -2,r11
46
 addi r11.w,acr,acr
47
 move.d [acr],r3
48
 checkr3 4455aa77
49

  
50
 moveq 5,r9
51
 addi r9.d,acr,acr
52
 subq 18,acr
53
 move.d [acr],r3
54
 checkr3 ff224455
55

  
56
 move.d -76789888/4,r12
57
 addi r12.d,r5,acr
58
 add.d 76789886,acr
59
 move.d [acr],r3
60
 checkr3 55aa77ff
61

  
62
 quit
b/tests/cris/check_addm.s
1
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
2
# output: 1\n1\n1fffe\nfffffffe\ncc463bdb\nffff0001\n1\nfffe\nfedafffe\n78133bdb\nffffff01\n1\nfe\nfeda49fe\n781344db\n781344d0\n
3

  
4
 .include "testutils.inc"
5
 .data
6
x:
7
 .dword 2,-1,0xffff,-1,0x5432f789
8
 .word 2,-1,0xffff,0xf789
9
 .byte 2,0xff,0x89
10
 .byte 0x7e
11

  
12
 start
13
 moveq -1,r3
14
 move.d x,r5
15
 add.d [r5+],r3
16
 test_cc 0 0 0 1
17
 checkr3 1
18

  
19
 moveq 2,r3
20
 add.d [r5],r3
21
 test_cc 0 0 0 1
22
 addq 4,r5
23
 checkr3 1
24

  
25
 move.d 0xffff,r3
26
 add.d [r5+],r3
27
 test_cc 0 0 0 0
28
 checkr3 1fffe
29

  
30
 moveq -1,r3
31
 add.d [r5+],r3
32
 test_cc 1 0 0 1
33
 checkr3 fffffffe
34

  
35
 move.d 0x78134452,r3
36
 add.d [r5+],r3
37
 test_cc 1 0 1 0
38
 checkr3 cc463bdb
39

  
40
 moveq -1,r3
41
 add.w [r5+],r3
42
 test_cc 0 0 0 1
43
 checkr3 ffff0001
44

  
45
 moveq 2,r3
46
 add.w [r5+],r3
47
 test_cc 0 0 0 1
48
 checkr3 1
49

  
50
 move.d 0xffff,r3
51
 add.w [r5],r3
52
 test_cc 1 0 0 1
53
 checkr3 fffe
54

  
55
 move.d 0xfedaffff,r3
56
 add.w [r5+],r3
57
 test_cc 1 0 0 1
58
 checkr3 fedafffe
59

  
60
 move.d 0x78134452,r3
61
 add.w [r5+],r3
62
 test_cc 0 0 0 1
63
 checkr3 78133bdb
64

  
65
 moveq -1,r3
66
 add.b [r5],r3
67
 test_cc 0 0 0 1
68
 addq 1,r5
69
 checkr3 ffffff01
70

  
71
 moveq 2,r3
72
 add.b [r5],r3
73
 test_cc 0 0 0 1
74
 checkr3 1
75

  
76
 move.d 0xff,r3
77
 add.b [r5],r3
78
 test_cc 1 0 0 1
79
 checkr3 fe
80

  
81
 move.d 0xfeda49ff,r3
82
 add.b [r5+],r3
83
 test_cc 1 0 0 1
84
 checkr3 feda49fe
85

  
86
 move.d 0x78134452,r3
87
 add.b [r5+],r3
88
 test_cc 1 0 0 0
89
 checkr3 781344db
90

  
91
 move.d 0x78134452,r3
92
 add.b [r5],r3
93
 test_cc 1 0 1 0
94
 checkr3 781344d0
95

  
96
 quit
b/tests/cris/check_addo.c
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <stdint.h>
4
#include "sys.h"
5
#include "crisutils.h"
6

  
7
/* this would be better to do in asm, it's an orgy in GCC inline asm now.  */
8

  
9
#define cris_addo_b(o, v) \
10
	asm volatile ("addo.b\t[%0], %1, $acr\n" : : "r" (o), "r" (v) : "acr");
11
#define cris_addo_w(o, v) \
12
	asm volatile ("addo.w\t[%0], %1, $acr\n" : : "r" (o), "r" (v) : "acr");
13
#define cris_addo_d(o, v) \
14
	asm volatile ("addo.d\t[%0], %1, $acr\n" : : "r" (o), "r" (v) : "acr");
15
#define cris_addo_pi_b(o, v) \
16
	asm volatile ("addo.b\t[%0+], %1, $acr\n" \
17
                         : "+b" (o): "r" (v) : "acr");
18
#define cris_addo_pi_w(o, v) \
19
	asm volatile ("addo.w\t[%0+], %1, $acr\n" \
20
                         : "+b" (o): "r" (v) : "acr");
21
#define cris_addo_pi_d(o, v) \
22
	asm volatile ("addo.d\t[%0+], %1, $acr\n" \
23
                         : "+b" (o): "r" (v) : "acr");
24

  
25
struct {
26
	uint32_t v1;
27
	uint16_t v2;
28
	uint32_t v3;
29
	uint8_t v4;
30
	uint8_t v5;
31
	uint16_t v6;
32
	uint32_t v7;
33
} y = {
34
	32769,
35
	-1,
36
	5,
37
	3, -4,
38
	2,
39
	-76789887
40
};
41

  
42
static int x[3] = {0x55aa77ff, 0xccff2244, 0x88ccee19};
43

  
44
int main(void)
45
{
46
	int *r;
47
	unsigned char *t, *p;
48

  
49
	/* Note, this test-case will trig an unaligned access, partly
50
	   to x[0] and to [x1].  */
51
	t = (unsigned char *)x;
52
	t -= 32768;
53
	p = (unsigned char *) &y.v1;
54
	mb(); /* dont reorder anything beyond here.  */
55
	cris_tst_cc_init();
56
	asm volatile ("setf\tzvnc\n");
57
	cris_addo_pi_d(p, t);
58
	cris_tst_cc(1, 1, 1, 1);
59
	asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
60
	if (*r != 0x4455aa77)
61
		err();
62

  
63

  
64
	t += 32770;
65
	mb(); /* dont reorder anything beyond here.  */
66
	cris_tst_cc_init();
67
	asm volatile ("setf\tzvnc\n");
68
	cris_addo_pi_w(p, t);
69
	cris_tst_cc(1, 1, 1, 1);
70
	asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
71
	if (*r != 0x4455aa77)
72
		err();
73

  
74
	mb(); /* dont reorder anything beyond here.  */
75
	cris_tst_cc_init();
76
	asm volatile ("setf\tzvnc\n");
77
	cris_addo_d(p, r);
78
	cris_tst_cc(1, 1, 1, 1);
79
	p += 4;
80
	asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
81
	if (*r != 0xee19ccff)
82
		err();
83

  
84
	mb(); /* dont reorder anything beyond here.  */
85
	cris_tst_cc_init();
86
	asm volatile ("setf\tzvnc\n");
87
	cris_addo_pi_b(p, t);
88
	cris_tst_cc(1, 1, 1, 1);
89
	asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
90
	if (*(uint16_t*)r != 0xff22)
91
		err();
92

  
93
	mb(); /* dont reorder anything beyond here.  */
94
	cris_tst_cc_init();
95
	asm volatile ("setf\tzvnc\n");
96
	cris_addo_b(p, r);
97
	cris_tst_cc(1, 1, 1, 1);
98
	p += 1;
99
	asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
100
	if (*r != 0x4455aa77)
101
		err();
102

  
103
	mb(); /* dont reorder anything beyond here.  */
104
	cris_tst_cc_init();
105
	asm volatile ("setf\tzvnc\n");
106
	cris_addo_w(p, r);
107
	cris_tst_cc(1, 1, 1, 1);
108
	p += 2;
109
	asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
110
	if (*r != 0xff224455)
111
		err();
112

  
113
	mb(); /* dont reorder anything beyond here.  */
114
	cris_tst_cc_init();
115
	asm volatile ("setf\tzvnc\n");
116
	cris_addo_pi_d(p, t);
117
	cris_tst_cc(1, 1, 1, 1);
118
	asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
119
	r = (void*)(((char *)r) + 76789885);
120
	if (*r != 0x55aa77ff)
121
		err();
122

  
123
	pass();
124
	return 0;
125
}
b/tests/cris/check_addoq.c
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <stdint.h>
4
#include "sys.h"
5
#include "crisutils.h"
6

  
7
/* this would be better to do in asm, it's an orgy in GCC inline asm now.  */
8

  
9
/* ACR will be clobbered.  */
10
#define cris_addoq(o, v) \
11
	asm volatile ("addoq\t%1, %0, $acr\n" : : "r" (v), "i" (o) : "acr");
12

  
13

  
14
int main(void)
15
{
16
	int x[3] = {0x55aa77ff, 0xccff2244, 0x88ccee19};
17
	int *p, *t = x + 1;
18

  
19
	cris_tst_cc_init();
20
	asm volatile ("setf\tzvnc\n");
21
	cris_addoq(0, t);
22
	cris_tst_cc(1, 1, 1, 1);
23
	asm volatile ("move.d\t$acr, %0\n" : "=r" (p));
24
	if (*p != 0xccff2244)
25
		err();
26

  
27
	cris_tst_cc_init();
28
	asm volatile ("setf\tzvnc\n");
29
	cris_addoq(4, t);
30
	cris_tst_cc(1, 1, 1, 1);
31
	asm volatile ("move.d\t$acr, %0\n" : "=r" (p));
32
	if (*p != 0x88ccee19)
33
		err();
34

  
35
	cris_tst_cc_init();
36
	asm volatile ("clearf\tzvnc\n");
37
	cris_addoq(-8, t + 1);
38
	cris_tst_cc(0, 0, 0, 0);
39
	asm volatile ("move.d\t$acr, %0\n" : "=r" (p));
40
	if (*p != 0x55aa77ff)
41
		err();
42
	pass();
43
	return 0;
44
}
b/tests/cris/check_addq.s
1
# mach: crisv3 crisv8 crisv10 crisv32
2
# output: ffffffff\n0\n1\n100\n10000\n47\n67\na6\n80000001\n
3

  
4
 .include "testutils.inc"
5
 start
6
 moveq -2,r3
7
 addq 1,r3
8
 test_cc 1 0 0 0
9
 checkr3 ffffffff
10

  
11
 addq 1,r3
12
 test_cc 0 1 0 1
13
 checkr3 0
14

  
15
 addq 1,r3
16
 test_cc 0 0 0 0
17
 checkr3 1
18

  
19
 move.d 0xff,r3
20
 addq 1,r3
21
 test_cc 0 0 0 0
22
 checkr3 100
23

  
24
 move.d 0xffff,r3
25
 addq 1,r3
26
 test_cc 0 0 0 0
27
 checkr3 10000
28

  
29
 move.d 0x42,r3
30
 addq 5,r3
31
 test_cc 0 0 0 0
32
 checkr3 47
33

  
34
 addq 32,r3
35
 test_cc 0 0 0 0
36
 checkr3 67
37

  
38
 addq 63,r3
39
 test_cc 0 0 0 0
40
 checkr3 a6
41

  
42
 move.d 0x7ffffffe,r3
43
 addq 3,r3
44
 test_cc 1 0 1 0
45
 checkr3 80000001
46

  
47
 quit
b/tests/cris/check_addr.s
1
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
2
# output: 1\n1\n1fffe\nfffffffe\ncc463bdb\nffff0001\n1\nfffe\nfedafffe\n78133bdb\nffffff01\n1\nfe\nfeda49fe\n781344db\n
3

  
4
 .include "testutils.inc"
5
 start
6
 moveq -1,r3
7
 moveq 2,r4
8
 add.d r4,r3
9
 test_cc 0 0 0 1
10
 checkr3 1
11

  
12
 moveq 2,r3
13
 moveq -1,r4
14
 add.d r4,r3
15
 test_cc 0 0 0 1
16
 checkr3 1
17

  
18
 move.d 0xffff,r4
19
 move.d r4,r3
20
 add.d r4,r3
21
 test_cc 0 0 0 0
22
 checkr3 1fffe
23

  
24
 moveq -1,r4
25
 move.d r4,r3
26
 add.d r4,r3
27
 test_cc 1 0 0 1
28
 checkr3 fffffffe
29

  
30
 move.d 0x5432f789,r4
31
 move.d 0x78134452,r3
32
 add.d r4,r3
33
 test_cc 1 0 1 0
34
 checkr3 cc463bdb
35

  
36
 moveq -1,r3
37
 moveq 2,r4
38
 add.w r4,r3
39
 test_cc 0 0 0 1
40
 checkr3 ffff0001
41

  
42
 moveq 2,r3
43
 moveq -1,r4
44
 add.w r4,r3
45
 test_cc 0 0 0 1
46
 checkr3 1
47

  
48
 move.d 0xffff,r4
49
 move.d r4,r3
50
 add.w r4,r3
51
 test_cc 1 0 0 1
52
 checkr3 fffe
53

  
54
 move.d 0xfedaffff,r4
55
 move.d r4,r3
56
 add.w r4,r3
57
 test_cc 1 0 0 1
58
 checkr3 fedafffe
59

  
60
 move.d 0x5432f789,r4
61
 move.d 0x78134452,r3
62
 add.w r4,r3
63
 test_cc 0 0 0 1
64
 checkr3 78133bdb
65

  
66
 moveq -1,r3
67
 moveq 2,r4
68
 add.b r4,r3
69
 test_cc 0 0 0 1
70
 checkr3 ffffff01
71

  
72
 moveq 2,r3
73
 moveq -1,r4
74
 add.b r4,r3
75
 test_cc 0 0 0 1
76
 checkr3 1
77

  
78
 move.d 0xff,r4
79
 move.d r4,r3
80
 add.b r4,r3
81
 test_cc 1 0 0 1
82
 checkr3 fe
83

  
84
 move.d 0xfeda49ff,r4
85
 move.d r4,r3
86
 add.b r4,r3
87
 test_cc 1 0 0 1
88
 checkr3 feda49fe
89

  
90
 move.d 0x5432f789,r4
91
 move.d 0x78134452,r3
92
 add.b r4,r3
93
 test_cc 1 0 0 0
94
 checkr3 781344db
95

  
96
 quit
b/tests/cris/check_addxc.s
1
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
2
# output: 1\n1\n101\n10001\n100fe\n1fffe\nfffe\nfffe\nfffffffe\nfe\nfffffffe\n781344db\n781343db\n78143bdb\n78133bdb\n800000ed\n0\n
3

  
4
 .include "testutils.inc"
5
 start
6
 moveq 2,r3
7
 adds.b 0xff,r3
8
 test_cc 0 0 0 1
9
 checkr3 1
10

  
11
 moveq 2,r3
12
 adds.w 0xffff,r3
13
 test_cc 0 0 0 1
14
 checkr3 1
15

  
16
 moveq 2,r3
17
 addu.b 0xff,r3
18
 checkr3 101
19

  
20
 moveq 2,r3
21
 move.d 0xffffffff,r4
22
 addu.w -1,r3
23
 test_cc 0 0 0 0
24
 checkr3 10001
25

  
26
 move.d 0xffff,r3
27
 addu.b -1,r3
28
 test_cc 0 0 0 0
29
 checkr3 100fe
30

  
31
 move.d 0xffff,r3
32
 addu.w -1,r3
33
 test_cc 0 0 0 0
34
 checkr3 1fffe
35

  
36
 move.d 0xffff,r3
37
 adds.b 0xff,r3
38
 test_cc 0 0 0 1
39
 checkr3 fffe
40

  
41
 move.d 0xffff,r3
42
 adds.w 0xffff,r3
43
 test_cc 0 0 0 1
44
 checkr3 fffe
45

  
46
 moveq -1,r3
47
 adds.b 0xff,r3
48
 test_cc 1 0 0 1
49
 checkr3 fffffffe
50

  
51
 moveq -1,r3
52
 adds.w 0xff,r3
53
 test_cc 0 0 0 1
54
 checkr3 fe
55

  
56
 moveq -1,r3
57
 adds.w 0xffff,r3
58
 test_cc 1 0 0 1
59
 checkr3 fffffffe
60

  
61
 move.d 0x78134452,r3
62
 addu.b 0x89,r3
63
 test_cc 0 0 0 0
64
 checkr3 781344db
65

  
66
 move.d 0x78134452,r3
67
 adds.b 0x89,r3
68
 test_cc 0 0 0 1
69
 checkr3 781343db
70

  
71
 move.d 0x78134452,r3
72
 addu.w 0xf789,r3
73
 test_cc 0 0 0 0
74
 checkr3 78143bdb
75

  
76
 move.d 0x78134452,r3
77
 adds.w 0xf789,r3
78
 test_cc 0 0 0 1
79
 checkr3 78133bdb
80

  
81
 move.d 0x7fffffee,r3
82
 addu.b 0xff,r3
83
 test_cc 1 0 1 0
84
 checkr3 800000ed
85

  
86
 move.d 0x1,r3
87
 adds.w 0xffff,r3
88
 test_cc 0 1 0 1
89
 checkr3 0
90

  
91
 quit
b/tests/cris/check_addxm.s
1
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
2
# output: 1\n1\n101\n10001\n100fe\n1fffe\nfffe\nfffe\nfffffffe\nfe\nfffffffe\n781344db\n781343db\n78143bdb\n78133bdb\n800000ed\n0\n
3

  
4
 .include "testutils.inc"
5
 .data
6
x:
7
 .byte 0xff
8
 .word 0xffff
9
 .word 0xff
10
 .word 0xffff
11
 .byte 0x89
12
 .word 0xf789
13
 .byte 0xff
14
 .word 0xffff
15

  
16
 start
17
 moveq 2,r3
18
 move.d x,r5
19
 adds.b [r5+],r3
20
 test_cc 0 0 0 1
21
 checkr3 1
22

  
23
 moveq 2,r3
24
 adds.w [r5+],r3
25
 test_cc 0 0 0 1
26
 checkr3 1
27

  
28
 moveq 2,r3
29
 subq 3,r5
30
 addu.b [r5+],r3
31
 test_cc 0 0 0 0
32
 checkr3 101
33

  
34
 moveq 2,r3
35
 addu.w [r5+],r3
36
 subq 3,r5
37
 test_cc 0 0 0 0
38
 checkr3 10001
39

  
40
 move.d 0xffff,r3
41
 addu.b [r5],r3
42
 test_cc 0 0 0 0
43
 checkr3 100fe
44

  
45
 move.d 0xffff,r3
46
 addu.w [r5],r3
47
 test_cc 0 0 0 0
48
 checkr3 1fffe
49

  
50
 move.d 0xffff,r3
51
 adds.b [r5],r3
52
 test_cc 0 0 0 1
53
 checkr3 fffe
54

  
55
 move.d 0xffff,r3
56
 adds.w [r5],r3
57
 test_cc 0 0 0 1
58
 checkr3 fffe
59

  
60
 moveq -1,r3
61
 adds.b [r5],r3
62
 test_cc 1 0 0 1
63
 addq 3,r5
64
 checkr3 fffffffe
65

  
66
 moveq -1,r3
67
 adds.w [r5+],r3
68
 test_cc 0 0 0 1
69
 checkr3 fe
70

  
71
 moveq -1,r3
72
 adds.w [r5+],r3
73
 test_cc 1 0 0 1
74
 checkr3 fffffffe
75

  
76
 move.d 0x78134452,r3
77
 addu.b [r5],r3
78
 test_cc 0 0 0 0
79
 checkr3 781344db
80

  
81
 move.d 0x78134452,r3
82
 adds.b [r5+],r3
83
 test_cc 0 0 0 1
84
 checkr3 781343db
85

  
86
 move.d 0x78134452,r3
87
 addu.w [r5],r3
88
 test_cc 0 0 0 0
89
 checkr3 78143bdb
90

  
91
 move.d 0x78134452,r3
92
 adds.w [r5+],r3
93
 test_cc 0 0 0 1
94
 checkr3 78133bdb
95

  
96
 move.d 0x7fffffee,r3
97
 addu.b [r5+],r3
98
 test_cc 1 0 1 0
99
 checkr3 800000ed
100

  
101
 move.d 0x1,r3
102
 adds.w [r5+],r3
103
 test_cc 0 1 0 1
104
 checkr3 0
105

  
106
 quit
b/tests/cris/check_addxr.s
1
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
2
# output: 1\n1\n1fffe\nfffffffe\ncc463bdb\nffff0001\n1\nfffe\nfedafffe\n78133bdb\nffffff01\n1\nfe\nfeda49fe\n781344db\n
3

  
4
 .include "testutils.inc"
5
 start
6
 moveq -1,r3
7
 moveq 2,r4
8
 add.d r4,r3
9
 test_cc 0 0 0 1
10
 checkr3 1
11

  
12
 moveq 2,r3
13
 moveq -1,r4
14
 add.d r4,r3
15
 test_cc 0 0 0 1
16
 checkr3 1
17

  
18
 move.d 0xffff,r4
19
 move.d r4,r3
20
 add.d r4,r3
21
 test_cc 0 0 0 0
22
 checkr3 1fffe
23

  
24
 moveq -1,r4
25
 move.d r4,r3
26
 add.d r4,r3
27
 test_cc 1 0 0 1
28
 checkr3 fffffffe
29

  
30
 move.d 0x5432f789,r4
31
 move.d 0x78134452,r3
32
 add.d r4,r3
33
 test_cc 1 0 1 0
34
 checkr3 cc463bdb
35

  
36
 moveq -1,r3
37
 moveq 2,r4
38
 add.w r4,r3
39
 test_cc 0 0 0 1
40
 checkr3 ffff0001
41

  
42
 moveq 2,r3
43
 moveq -1,r4
44
 add.w r4,r3
45
 test_cc 0 0 0 1
46
 checkr3 1
47

  
48
 move.d 0xffff,r4
49
 move.d r4,r3
50
 add.w r4,r3
51
 test_cc 1 0 0 1
52
 checkr3 fffe
53

  
54
 move.d 0xfedaffff,r4
55
 move.d r4,r3
56
 add.w r4,r3
57
 test_cc 1 0 0 1
58
 checkr3 fedafffe
59

  
60
 move.d 0x5432f789,r4
61
 move.d 0x78134452,r3
62
 add.w r4,r3
63
 test_cc 0 0 0 1
64
 checkr3 78133bdb
65

  
66
 moveq -1,r3
67
 moveq 2,r4
68
 add.b r4,r3
69
 test_cc 0 0 0 1
70
 checkr3 ffffff01
71

  
72
 moveq 2,r3
73
 moveq -1,r4
74
 add.b r4,r3
75
 test_cc 0 0 0 1
76
 checkr3 1
77

  
78
 move.d 0xff,r4
79
 move.d r4,r3
80
 add.b r4,r3
81
 test_cc 1 0 0 1
82
 checkr3 fe
83

  
84
 move.d 0xfeda49ff,r4
85
 move.d r4,r3
86
 add.b r4,r3
87
 test_cc 1 0 0 1
88
 checkr3 feda49fe
89

  
90
 move.d 0x5432f789,r4
91
 move.d 0x78134452,r3
92
 add.b r4,r3
93
 test_cc 1 0 0 0
94
 checkr3 781344db
95

  
96
 quit
b/tests/cris/check_andc.s
1
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
2
# output: 2\n2\nffff\nffffffff\n50124400\nffff0002\n2\nfffff\nfedaff0f\n78134400\nffffff02\n2\nf02\n78134401\n78134400\n
3

  
4
 .include "testutils.inc"
5
 start
6
 moveq -1,r3
7
 and.d 2,r3
8
 test_move_cc 0 0 0 0
9
 checkr3 2
10

  
11
 moveq 2,r3
12
 and.d -1,r3
13
 test_move_cc 0 0 0 0
14
 checkr3 2
15

  
16
 move.d 0xffff,r3
17
 and.d 0xffff,r3
18
 test_move_cc 0 0 0 0
19
 checkr3 ffff
20

  
21
 moveq -1,r3
22
 and.d -1,r3
23
 test_move_cc 1 0 0 0
24
 checkr3 ffffffff
25

  
26
 move.d 0x78134452,r3
27
 and.d 0x5432f789,r3
28
 test_move_cc 0 0 0 0
29
 checkr3 50124400
30

  
31
 moveq -1,r3
32
 and.w 2,r3
33
 test_move_cc 0 0 0 0
34
 checkr3 ffff0002
35

  
36
 moveq 2,r3
37
 and.w -1,r3
38
 test_move_cc 0 0 0 0
39
 checkr3 2
40

  
41
 move.d 0xfffff,r3
42
 and.w 0xffff,r3
43
 test_move_cc 1 0 0 0
44
 checkr3 fffff
45

  
46
 move.d 0xfedaffaf,r3
47
 and.w 0xff5f,r3
48
 test_move_cc 1 0 0 0
49
 checkr3 fedaff0f
50

  
51
 move.d 0x78134452,r3
52
 and.w 0xf789,r3
53
 test_move_cc 0 0 0 0
54
 checkr3 78134400
55

  
56
 moveq -1,r3
57
 and.b 2,r3
58
 test_move_cc 0 0 0 0
59
 checkr3 ffffff02
60

  
61
 moveq 2,r3
62
 and.b -1,r3
63
 test_move_cc 0 0 0 0
64
 checkr3 2
65

  
66
 move.d 0xfa7,r3
67
 and.b 0x5a,r3
68
 test_move_cc 0 0 0 0
69
 checkr3 f02
70

  
71
 move.d 0x78134453,r3
72
 and.b 0x89,r3
73
 test_move_cc 0 0 0 0
74
 checkr3 78134401
75

  
76
 and.b 0,r3
77
 test_move_cc 0 1 0 0
78
 checkr3 78134400
79

  
80
 quit
b/tests/cris/check_andm.s
1
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
2
# output: 2\n2\nffff\nffffffff\n50124400\nffff0002\n2\nfffff\nfedaff0f\n78134400\nffffff02\n2\nf02\n78134401\n78134400\n
3

  
4
 .include "testutils.inc"
5
 .data
6
x:
7
 .dword 2,-1,0xffff,-1,0x5432f789
8
 .word 2,-1,0xffff,0xff5f,0xf789
9
 .byte 2,-1,0x5a,0x89,0
10

  
11
 start
12
 moveq -1,r3
13
 move.d x,r5
14
 and.d [r5+],r3
15
 test_move_cc 0 0 0 0
16
 checkr3 2
17

  
18
 moveq 2,r3
19
 and.d [r5],r3
20
 test_move_cc 0 0 0 0
21
 addq 4,r5
22
 checkr3 2
23

  
24
 move.d 0xffff,r3
25
 and.d [r5+],r3
26
 test_move_cc 0 0 0 0
27
 checkr3 ffff
28

  
29
 moveq -1,r3
30
 and.d [r5+],r3
31
 test_move_cc 1 0 0 0
32
 checkr3 ffffffff
33

  
34
 move.d 0x78134452,r3
35
 and.d [r5+],r3
36
 test_move_cc 0 0 0 0
37
 checkr3 50124400
38

  
39
 moveq -1,r3
40
 and.w [r5+],r3
41
 test_move_cc 0 0 0 0
42
 checkr3 ffff0002
43

  
44
 moveq 2,r3
45
 and.w [r5+],r3
46
 test_move_cc 0 0 0 0
47
 checkr3 2
48

  
49
 move.d 0xfffff,r3
50
 and.w [r5],r3
51
 test_move_cc 1 0 0 0
52
 addq 2,r5
53
 checkr3 fffff
54

  
55
 move.d 0xfedaffaf,r3
56
 and.w [r5+],r3
57
 test_move_cc 1 0 0 0
58
 checkr3 fedaff0f
59

  
60
 move.d 0x78134452,r3
61
 and.w [r5+],r3
62
 test_move_cc 0 0 0 0
63
 checkr3 78134400
64

  
65
 moveq -1,r3
66
 and.b [r5],r3
67
 test_move_cc 0 0 0 0
68
 addq 1,r5
69
 checkr3 ffffff02
70

  
71
 moveq 2,r3
72
 and.b [r5+],r3
73
 test_move_cc 0 0 0 0
74
 checkr3 2
75

  
76
 move.d 0xfa7,r3
77
 and.b [r5+],r3
78
 test_move_cc 0 0 0 0
79
 checkr3 f02
80

  
81
 move.d 0x78134453,r3
82
 and.b [r5+],r3
83
 test_move_cc 0 0 0 0
84
 checkr3 78134401
85

  
86
 and.b [r5],r3
87
 test_move_cc 0 1 0 0
88
 checkr3 78134400
89

  
90
 quit
b/tests/cris/check_andq.s
1
# mach: crisv0 crisv3 crisv8 crisv10 crisv32
2
# output: 2\n2\nffff\nffffffff\n1f\nffffffe0\n78134452\n0\n
3

  
4
 .include "testutils.inc"
5
 start
6
 moveq -1,r3
7
 andq 2,r3
8
 test_move_cc 0 0 0 0
9
 checkr3 2
10

  
11
 moveq 2,r3
12
 andq -1,r3
13
 test_move_cc 0 0 0 0
14
 checkr3 2
15

  
16
 move.d 0xffff,r3
17
 andq -1,r3
18
 test_move_cc 0 0 0 0
19
 checkr3 ffff
20

  
21
 moveq -1,r3
22
 andq -1,r3
23
 test_move_cc 1 0 0 0
24
 checkr3 ffffffff
25

  
26
 moveq -1,r3
27
 andq 31,r3
28
 test_move_cc 0 0 0 0
29
 checkr3 1f
30

  
31
 moveq -1,r3
32
 andq -32,r3
33
 test_move_cc 1 0 0 0
34
 checkr3 ffffffe0
35

  
36
 move.d 0x78134457,r3
37
 andq -14,r3
38
 test_move_cc 0 0 0 0
39
 checkr3 78134452
40

  
41
 moveq 0,r3
42
 andq -14,r3
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff