Revision 7d890b40

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

  
3
CROSS=xtensa-dc232b-elf-
4

  
5
ifndef XT
6
SIM = qemu-system-xtensa
7
SIMFLAGS = -M dc232b -nographic -semihosting $(EXTFLAGS) -kernel
8
SIMDEBUG = -s -S
9
else
10
SIM = xt-run
11
SIMFLAGS = --xtensa-core=DC_B_232L --exit_with_target_code $(EXTFLAGS)
12
SIMDEBUG = --gdbserve=0
13
endif
14

  
15
CC      = $(CROSS)gcc
16
AS      = $(CROSS)gcc -x assembler
17
LD      = $(CROSS)ld
18

  
19
LDFLAGS = -Tlinker.ld
20

  
21
CRT        = crt.o vectors.o
22

  
23
TESTCASES += test_b.tst
24
TESTCASES += test_bi.tst
25
#TESTCASES += test_boolean.tst
26
TESTCASES += test_bz.tst
27
TESTCASES += test_clamps.tst
28
TESTCASES += test_fail.tst
29
TESTCASES += test_interrupt.tst
30
TESTCASES += test_loop.tst
31
TESTCASES += test_max.tst
32
TESTCASES += test_min.tst
33
TESTCASES += test_mmu.tst
34
TESTCASES += test_mul16.tst
35
TESTCASES += test_mul32.tst
36
TESTCASES += test_nsa.tst
37
ifdef XT
38
TESTCASES += test_pipeline.tst
39
endif
40
TESTCASES += test_quo.tst
41
TESTCASES += test_rem.tst
42
TESTCASES += test_rst0.tst
43
TESTCASES += test_sar.tst
44
TESTCASES += test_sext.tst
45
TESTCASES += test_shift.tst
46
TESTCASES += test_timer.tst
47
TESTCASES += test_windowed.tst
48

  
49
all: build
50

  
51
%.o: $(SRC_PATH)/tests/xtensa/%.c
52
	$(CC) $(CFLAGS) -c $< -o $@
53

  
54
%.o: $(SRC_PATH)/tests/xtensa/%.S
55
	$(AS) $(ASFLAGS) -c $< -o $@
56

  
57
%.tst: %.o macros.inc $(CRT) Makefile
58
	$(LD) $(LDFLAGS) $(NOSTDFLAGS) $(CRT) $< -o $@
59

  
60
build: $(TESTCASES)
61

  
62
check: $(addprefix run-, $(TESTCASES))
63

  
64
run-%.tst: %.tst
65
	$(SIM) $(SIMFLAGS) ./$<
66

  
67
run-test_fail.tst: test_fail.tst
68
	! $(SIM) $(SIMFLAGS) ./$<
69

  
70
debug-%.tst: %.tst
71
	$(SIM) $(SIMDEBUG) $(SIMFLAGS) ./$<
72

  
73
clean:
74
	$(RM) -fr $(TESTCASES) $(CRT)
b/tests/xtensa/crt.S
1
.section .init
2
    j       1f
3
.section .init.text
4
1:
5
    movi    a2, _start
6
    jx      a2
7

  
8
.text
9
.global _start
10
_start:
11
    movi    a2, 1
12
    wsr     a2, windowstart
13
    movi    a2, 0
14
    wsr     a2, windowbase
15
    movi    a1, _fstack
16
    movi    a2, 0x4000f
17
    wsr     a2, ps
18
    isync
19

  
20
    call0   main
21

  
22
    mov     a3, a2
23
    movi    a2, 1
24
    simcall
b/tests/xtensa/linker.ld
1
OUTPUT_FORMAT("elf32-xtensa-le")
2
ENTRY(_start)
3

  
4
__DYNAMIC = 0;
5

  
6
MEMORY {
7
	ram : ORIGIN = 0xd0000000, LENGTH = 0x08000000  /* 128M */
8
	rom : ORIGIN = 0xfe000000, LENGTH = 0x00001000  /* 4k */
9
}
10

  
11
SECTIONS
12
{
13
    .init :
14
    {
15
        *(.init)
16
		*(.init.*)
17
    } > rom
18

  
19
    .vector :
20
    {
21
    . = 0x00000000;
22
        *(.vector.window_overflow_4)
23
        *(.vector.window_overflow_4.*)
24
    . = 0x00000040;
25
        *(.vector.window_underflow_4)
26
        *(.vector.window_underflow_4.*)
27
    . = 0x00000080;
28
        *(.vector.window_overflow_8)
29
        *(.vector.window_overflow_8.*)
30
    . = 0x000000c0;
31
        *(.vector.window_underflow_8)
32
        *(.vector.window_underflow_8.*)
33
    . = 0x00000100;
34
        *(.vector.window_overflow_12)
35
        *(.vector.window_overflow_12.*)
36
    . = 0x00000140;
37
        *(.vector.window_underflow_12)
38
        *(.vector.window_underflow_12.*)
39

  
40
    . = 0x00000180;
41
        *(.vector.level2)
42
        *(.vector.level2.*)
43
    . = 0x000001c0;
44
        *(.vector.level3)
45
        *(.vector.level3.*)
46
    . = 0x00000200;
47
        *(.vector.level4)
48
        *(.vector.level4.*)
49
    . = 0x00000240;
50
        *(.vector.level5)
51
        *(.vector.level5.*)
52
    . = 0x00000280;
53
        *(.vector.level6)
54
        *(.vector.level6.*)
55
    . = 0x000002c0;
56
        *(.vector.level7)
57
        *(.vector.level7.*)
58

  
59
    . = 0x00000300;
60
        *(.vector.kernel)
61
        *(.vector.kernel.*)
62
    . = 0x00000340;
63
        *(.vector.user)
64
        *(.vector.user.*)
65
    . = 0x000003c0;
66
        *(.vector.double)
67
        *(.vector.double.*)
68
    } > ram
69

  
70
	.text :
71
	{
72
		_ftext = .;
73
		*(.text .stub .text.* .gnu.linkonce.t.* .literal .literal.*)
74
		_etext = .;
75
	} > ram
76

  
77
	.rodata :
78
	{
79
		. = ALIGN(4);
80
		_frodata = .;
81
		*(.rodata .rodata.* .gnu.linkonce.r.*)
82
		*(.rodata1)
83
		_erodata = .;
84
	} > ram
85

  
86
	.data :
87
	{
88
		. = ALIGN(4);
89
		_fdata = .;
90
		*(.data .data.* .gnu.linkonce.d.*)
91
		*(.data1)
92
		_gp = ALIGN(16);
93
		*(.sdata .sdata.* .gnu.linkonce.s.*)
94
		_edata = .;
95
	} > ram
96

  
97
	.bss :
98
	{
99
		. = ALIGN(4);
100
		_fbss = .;
101
		*(.dynsbss)
102
		*(.sbss .sbss.* .gnu.linkonce.sb.*)
103
		*(.scommon)
104
		*(.dynbss)
105
		*(.bss .bss.* .gnu.linkonce.b.*)
106
		*(COMMON)
107
		_ebss = .;
108
		_end = .;
109
	} > ram
110
}
111

  
112
PROVIDE(_fstack = ORIGIN(ram) + LENGTH(ram) - 4);
b/tests/xtensa/macros.inc
1
.macro test_suite name
2
.data
3
status: .word result
4
result: .space 20
5
.text
6
.global main
7
.align 4
8
main:
9
.endm
10

  
11
.macro reset_ps
12
    movi    a2, 0x4000f
13
    wsr     a2, ps
14
    isync
15
.endm
16

  
17
.macro test_suite_end
18
    reset_ps
19
    movi    a0, status
20
    l32i    a2, a0, 0
21
    movi    a0, result
22
    sub     a2, a2, a0
23
    movi    a3, 0
24
    loopnez a2, 1f
25
    l8ui    a2, a0, 0
26
    or      a3, a3, a2
27
    addi    a0, a0, 1
28
1:
29
    exit
30
.endm
31

  
32
.macro test name
33
.endm
34

  
35
.macro test_end
36
99:
37
    reset_ps
38
    movi    a2, status
39
    l32i    a3, a2, 0
40
    addi    a3, a3, 1
41
    s32i    a3, a2, 0
42
.endm
43

  
44
.macro exit
45
    movi    a2, 1
46
    simcall
47
.endm
48

  
49
.macro test_fail
50
    movi    a2, status
51
    l32i    a2, a2, 0
52
    movi    a3, 1
53
    s8i     a3, a2, 0
54
    j       99f
55
.endm
56

  
57
.macro assert cond, arg1, arg2
58
    b\cond  \arg1, \arg2, 90f
59
    test_fail
60
90:
61
    nop
62
.endm
63

  
64
.macro set_vector vector, addr
65
    movi    a2, handler_\vector
66
    movi    a3, \addr
67
    s32i    a3, a2, 0
68
.endm
b/tests/xtensa/test_b.S
1
.include "macros.inc"
2

  
3
test_suite b
4

  
5
test bnone
6
    movi    a2, 0xa5a5ff00
7
    movi    a3, 0x5a5a00ff
8
    bnone   a2, a3, 1f
9
    test_fail
10
1:
11
    movi    a2, 0xa5a5ff01
12
    bnone   a2, a3, 1f
13
    j       2f
14
1:
15
    test_fail
16
2:
17
test_end
18

  
19
test beq
20
    movi    a2, 0
21
    movi    a3, 0
22
    beq     a2, a3, 1f
23
    test_fail
24
1:
25
    movi    a2, 1
26
    beq     a2, a3, 1f
27
    j       2f
28
1:
29
    test_fail
30
2:
31
test_end
32

  
33
test blt
34
    movi    a2, 6
35
    movi    a3, 7
36
    blt     a2, a3, 1f
37
    test_fail
38
1:
39
    movi    a2, 0xffffffff
40
    blt     a2, a3, 1f
41
    test_fail
42
1:
43
    movi    a2, 7
44
    blt     a2, a3, 1f
45
    j       2f
46
1:
47
    test_fail
48
2:
49
test_end
50

  
51
test bltu
52
    movi    a2, 6
53
    movi    a3, 7
54
    bltu    a2, a3, 1f
55
    test_fail
56
1:
57
    movi    a2, 7
58
    bltu    a2, a3, 1f
59
    j       2f
60
1:
61
    test_fail
62
2:
63
    movi    a2, 0xffffffff
64
    bltu    a2, a3, 1f
65
    j       2f
66
1:
67
    test_fail
68
2:
69
test_end
70

  
71
test ball
72
    movi    a2, 0xa5a5ffa5
73
    movi    a3, 0xa5a5ff00
74
    ball    a2, a3, 1f
75
    test_fail
76
1:
77
    movi    a2, 0xa5a5a5a5
78
    ball    a2, a3, 1f
79
    j       2f
80
1:
81
    test_fail
82
2:
83
test_end
84

  
85
test bbc
86
    movi    a2, 0xfffffffd
87
    movi    a3, 0xffffff01
88
    bbc     a2, a3, 1f
89
    test_fail
90
1:
91
    movi    a2, 8
92
    movi    a3, 0xffffff03
93
    bbc     a2, a3, 1f
94
    j       2f
95
1:
96
    test_fail
97
2:
98
test_end
99

  
100
test bbci
101
    movi    a2, 0xfffdffff
102
    bbci    a2, 17, 1f
103
    test_fail
104
1:
105
    movi    a2, 0x00020000
106
    bbci    a2, 17, 1f
107
    j       2f
108
1:
109
    test_fail
110
2:
111
test_end
112

  
113
test bany
114
    movi    a2, 0xa5a5ff01
115
    movi    a3, 0x5a5a00ff
116
    bany    a2, a3, 1f
117
    test_fail
118
1:
119
    movi    a2, 0xa5a5ff00
120
    bany    a2, a3, 1f
121
    j       2f
122
1:
123
    test_fail
124
2:
125
test_end
126

  
127
test bne
128
    movi    a2, 1
129
    movi    a3, 0
130
    bne     a2, a3, 1f
131
    test_fail
132
1:
133
    movi    a2, 0
134
    bne     a2, a3, 1f
135
    j       2f
136
1:
137
    test_fail
138
2:
139
test_end
140

  
141
test bge
142
    movi    a2, 7
143
    movi    a3, 7
144
    bge     a2, a3, 1f
145
    test_fail
146
1:
147
    movi    a2, 6
148
    bge     a2, a3, 1f
149
    j       2f
150
1:
151
    test_fail
152
2:
153
    movi    a2, 0xffffffff
154
    bge     a2, a3, 1f
155
    j       2f
156
1:
157
    test_fail
158
2:
159
test_end
160

  
161
test bgeu
162
    movi    a2, 7
163
    movi    a3, 7
164
    bgeu    a2, a3, 1f
165
    test_fail
166
1:
167
    movi    a2, 0xffffffff
168
    bgeu    a2, a3, 1f
169
    test_fail
170
1:
171
    movi    a2, 6
172
    bgeu    a2, a3, 1f
173
    j       2f
174
1:
175
    test_fail
176
2:
177
test_end
178

  
179
test bnall
180
    movi    a2, 0xa5a5a5a5
181
    movi    a3, 0xa5a5ff00
182
    bnall   a2, a3, 1f
183
    test_fail
184
1:
185
    movi    a2, 0xa5a5ffa5
186
    bnall   a2, a3, 1f
187
    j       2f
188
1:
189
    test_fail
190
2:
191
test_end
192

  
193
test bbs
194
    movi    a2, 8
195
    movi    a3, 0xffffff03
196
    bbs     a2, a3, 1f
197
    test_fail
198
1:
199
    movi    a2, 0xfffffffd
200
    movi    a3, 0xffffff01
201
    bbs     a2, a3, 1f
202
    j       2f
203
1:
204
    test_fail
205
2:
206
test_end
207

  
208
test bbsi
209
    movi    a2, 0x00020000
210
    bbsi    a2, 17, 1f
211
    test_fail
212
1:
213
    movi    a2, 0xfffdffff
214
    bbsi    a2, 17, 1f
215
    j       2f
216
1:
217
    test_fail
218
2:
219
test_end
220

  
221
test_suite_end
b/tests/xtensa/test_bi.S
1
.include "macros.inc"
2

  
3
test_suite bi
4

  
5
test beqi
6
    movi    a2, 7
7
    beqi    a2, 7, 1f
8
    test_fail
9
1:
10
    movi    a2, 1
11
    beqi    a2, 7, 1f
12
    j       2f
13
1:
14
    test_fail
15
2:
16
test_end
17

  
18
test bnei
19
    movi    a2, 1
20
    bnei    a2, 7, 1f
21
    test_fail
22
1:
23
    movi    a2, 7
24
    bnei    a2, 7, 1f
25
    j       2f
26
1:
27
    test_fail
28
2:
29
test_end
30

  
31
test blti
32
    movi    a2, 6
33
    blti    a2, 7, 1f
34
    test_fail
35
1:
36
    movi    a2, 0xffffffff
37
    blti    a2, 7, 1f
38
    test_fail
39
1:
40
    movi    a2, 7
41
    blti    a2, 7, 1f
42
    j       2f
43
1:
44
    test_fail
45
2:
46
test_end
47

  
48
test bgei
49
    movi    a2, 7
50
    bgei    a2, 7, 1f
51
    test_fail
52
1:
53
    movi    a2, 6
54
    bgei    a2, 7, 1f
55
    j       2f
56
1:
57
    test_fail
58
2:
59
    movi    a2, 0xffffffff
60
    bgei    a2, 7, 1f
61
    j       2f
62
1:
63
    test_fail
64
2:
65
test_end
66

  
67
test bltui
68
    movi    a2, 6
69
    bltui   a2, 7, 1f
70
    test_fail
71
1:
72
    movi    a2, 7
73
    bltui   a2, 7, 1f
74
    j       2f
75
1:
76
    test_fail
77
2:
78
    movi    a2, 0xffffffff
79
    bltui   a2, 7, 1f
80
    j       2f
81
1:
82
    test_fail
83
2:
84
test_end
85

  
86
test bgeui
87
    movi    a2, 7
88
    bgeui   a2, 7, 1f
89
    test_fail
90
1:
91
    movi    a2, 0xffffffff
92
    bgeui   a2, 7, 1f
93
    test_fail
94
1:
95
    movi    a2, 6
96
    bgeui   a2, 7, 1f
97
    j       2f
98
1:
99
    test_fail
100
2:
101
test_end
102

  
103
test_suite_end
b/tests/xtensa/test_boolean.S
1
.include "macros.inc"
2

  
3
test_suite boolean
4

  
5
test all4
6
    movi    a2, 0xfec0
7
    wsr     a2, br
8
    all4    b0, b0
9
    rsr     a3, br
10
    assert  eq, a2, a3
11
    all4    b0, b4
12
    rsr     a3, br
13
    assert  eq, a2, a3
14
    all4    b0, b8
15
    rsr     a3, br
16
    assert  eq, a2, a3
17
    all4    b0, b12
18
    rsr     a3, br
19
    addi    a2, a2, 1
20
    assert  eq, a2, a3
21
test_end
22

  
23
test_suite_end
b/tests/xtensa/test_bz.S
1
.include "macros.inc"
2

  
3
test_suite bz
4

  
5
test beqz
6
    movi    a2, 0
7
    _beqz   a2, 1f
8
    test_fail
9
1:
10
    movi    a2, 1
11
    _beqz   a2, 1f
12
    j       2f
13
1:
14
    test_fail
15
2:
16
test_end
17

  
18
test bnez
19
    movi    a2, 1
20
    _bnez   a2, 1f
21
    test_fail
22
1:
23
    movi    a2, 0
24
    _bnez   a2, 1f
25
    j       2f
26
1:
27
    test_fail
28
2:
29
test_end
30

  
31
test bltz
32
    movi    a2, 0xffffffff
33
    bltz    a2, 1f
34
    test_fail
35
1:
36
    movi    a2, 0
37
    bltz    a2, 1f
38
    j       2f
39
1:
40
    test_fail
41
2:
42
test_end
43

  
44
test bgez
45
    movi    a2, 0
46
    bgez    a2, 1f
47
    test_fail
48
1:
49
    movi    a2, 0xffffffff
50
    bgez    a2, 1f
51
    j       2f
52
1:
53
    test_fail
54
2:
55
test_end
56

  
57
test_suite_end
b/tests/xtensa/test_clamps.S
1
.include "macros.inc"
2

  
3
test_suite clamps
4

  
5
test clamps
6
    movi    a2, 0
7
    movi    a3, 0
8
    clamps  a4, a2, 7
9
    assert  eq, a3, a4
10

  
11
    movi    a2, 0x7f
12
    movi    a3, 0x7f
13
    clamps  a4, a2, 7
14
    assert  eq, a3, a4
15

  
16
    movi    a2, 0xffffff80
17
    movi    a3, 0xffffff80
18
    clamps  a4, a2, 7
19
    assert  eq, a3, a4
20

  
21
    movi    a2, 0x80
22
    movi    a3, 0x7f
23
    clamps  a2, a2, 7
24
    assert  eq, a3, a2
25

  
26
    movi    a2, 0xffffff7f
27
    movi    a3, 0xffffff80
28
    clamps  a2, a2, 7
29
    assert  eq, a3, a2
30

  
31
    movi    a2, 0x7fffffff
32
    movi    a3, 0x7f
33
    clamps  a2, a2, 7
34
    assert  eq, a3, a2
35

  
36
    movi    a2, 0x80000000
37
    movi    a3, 0xffffff80
38
    clamps  a2, a2, 7
39
    assert  eq, a3, a2
40
test_end
41

  
42
test_suite_end
b/tests/xtensa/test_fail.S
1
.include "macros.inc"
2

  
3
test_suite fail
4

  
5
test fail
6
    test_fail
7
test_end
8

  
9
test_suite_end
b/tests/xtensa/test_interrupt.S
1
.include "macros.inc"
2

  
3
test_suite interrupt
4

  
5
.macro clear_interrupts
6
    movi    a2, 0
7
    wsr     a2, intenable
8
    wsr     a2, ccompare0
9
    wsr     a2, ccompare1
10
    wsr     a2, ccompare2
11
    esync
12
    rsr     a2, interrupt
13
    wsr     a2, intclear
14

  
15
    esync
16
    rsr     a2, interrupt
17
    assert  eqi, a2, 0
18
.endm
19

  
20
.macro check_l1
21
    rsr     a2, ps
22
    movi    a3, 0x1f        /* EXCM | INTMASK */
23
    and     a2, a2, a3
24
    assert  eqi, a2, 0x10   /* only EXCM is set for level-1 interrupt */
25
    rsr     a2, exccause
26
    assert  eqi, a2, 4
27
.endm
28

  
29
test rsil
30
    clear_interrupts
31

  
32
    rsr     a2, ps
33
    rsil    a3, 7
34
    rsr     a4, ps
35
    assert  eq, a2, a3
36
    movi    a2, 0xf
37
    and     a2, a4, a2
38
    assert  eqi, a2, 7
39
    xor     a3, a3, a4
40
    movi    a2, 0xfffffff0
41
    and     a2, a3, a2
42
    assert  eqi, a2, 0
43
test_end
44

  
45
test soft_disabled
46
    set_vector kernel, 1f
47
    clear_interrupts
48

  
49
    movi    a2, 0x80
50
    wsr     a2, intset
51
    esync
52
    rsr     a3, interrupt
53
    assert  eq, a2, a3
54
    wsr     a2, intclear
55
    esync
56
    rsr     a3, interrupt
57
    assert  eqi, a3, 0
58
    j       2f
59
1:
60
    test_fail
61
2:
62
test_end
63

  
64
test soft_intenable
65
    set_vector kernel, 1f
66
    clear_interrupts
67

  
68
    movi    a2, 0x80
69
    wsr     a2, intset
70
    esync
71
    rsr     a3, interrupt
72
    assert  eq, a2, a3
73
    rsil    a3, 0
74
    wsr     a2, intenable
75
    esync
76
    test_fail
77
1:
78
    check_l1
79
test_end
80

  
81
test soft_rsil
82
    set_vector kernel, 1f
83
    clear_interrupts
84

  
85
    movi    a2, 0x80
86
    wsr     a2, intset
87
    esync
88
    rsr     a3, interrupt
89
    assert  eq, a2, a3
90
    wsr     a2, intenable
91
    rsil    a3, 0
92
    esync
93
    test_fail
94
1:
95
    check_l1
96
test_end
97

  
98
test soft_waiti
99
    set_vector kernel, 1f
100
    clear_interrupts
101

  
102
    movi    a2, 0x80
103
    wsr     a2, intset
104
    esync
105
    rsr     a3, interrupt
106
    assert  eq, a2, a3
107
    wsr     a2, intenable
108
    waiti   0
109
    test_fail
110
1:
111
    check_l1
112
test_end
113

  
114
test soft_user
115
    set_vector kernel, 1f
116
    set_vector user, 2f
117
    clear_interrupts
118

  
119
    movi    a2, 0x80
120
    wsr     a2, intset
121
    esync
122
    rsr     a3, interrupt
123
    assert  eq, a2, a3
124
    wsr     a2, intenable
125

  
126
    rsr     a2, ps
127
    movi    a3, 0x20
128
    or      a2, a2, a3
129
    wsr     a2, ps
130
    waiti   0
131
1:
132
    test_fail
133
2:
134
    check_l1
135
test_end
136

  
137
test soft_priority
138
    set_vector kernel, 1f
139
    set_vector level3, 2f
140
    clear_interrupts
141

  
142
    movi    a2, 0x880
143
    wsr     a2, intenable
144
    rsil    a3, 0
145
    esync
146
    wsr     a2, intset
147
    esync
148
1:
149
    test_fail
150
2:
151
    rsr     a2, ps
152
    movi    a3, 0x1f        /* EXCM | INTMASK */
153
    and     a2, a2, a3
154
    movi    a3, 0x13
155
    assert  eq, a2, a3      /* EXCM and INTMASK are set
156
                               for high-priority interrupt */
157
test_end
158

  
159
test eps_epc_rfi
160
    set_vector level3, 3f
161
    clear_interrupts
162
    reset_ps
163

  
164
    movi    a2, 0x880
165
    wsr     a2, intenable
166
    rsil    a3, 0
167
    rsr     a3, ps
168
    esync
169
    wsr     a2, intset
170
1:
171
    esync
172
2:
173
    test_fail
174
3:
175
    rsr     a2, eps3
176
    assert  eq, a2, a3
177
    rsr     a2, epc3
178
    movi    a3, 1b
179
    assert  ge, a2, a3
180
    movi    a3, 2b
181
    assert  ge, a3, a2
182
    movi    a2, 4f
183
    wsr     a2, epc3
184
    movi    a2, 0x40003
185
    wsr     a2, eps3
186
    rfi     3
187
    test_fail
188
4:
189
    rsr     a2, ps
190
    movi    a3, 0x40003
191
    assert  eq, a2, a3
192
test_end
193

  
194
test_suite_end
b/tests/xtensa/test_loop.S
1
.include "macros.inc"
2

  
3
test_suite loop
4

  
5
test loop
6
    movi    a2, 0
7
    movi    a3, 5
8
    loop    a3, 1f
9
    addi    a2, a2, 1
10
1:
11
    assert  eqi, a2, 5
12
test_end
13

  
14
test loop0
15
    movi    a2, 0
16
    loop    a2, 1f
17
    rsr     a2, lcount
18
    assert  eqi, a2, -1
19
    j       1f
20
1:
21
test_end
22

  
23
test loop_jump
24
    movi    a2, 0
25
    movi    a3, 5
26
    loop    a3, 1f
27
    addi    a2, a2, 1
28
    j       1f
29
1:
30
    assert  eqi, a2, 1
31
test_end
32

  
33
test loop_branch
34
    movi    a2, 0
35
    movi    a3, 5
36
    loop    a3, 1f
37
    addi    a2, a2, 1
38
    beqi    a2, 3, 1f
39
1:
40
    assert  eqi, a2, 3
41
test_end
42

  
43
test loop_manual
44
    movi    a2, 0
45
    movi    a3, 5
46
    movi    a4, 1f
47
    movi    a5, 2f
48
    wsr     a3, lcount
49
    wsr     a4, lbeg
50
    wsr     a5, lend
51
    isync
52
    j       1f
53
.align 4
54
1:
55
    addi    a2, a2, 1
56
2:
57
    assert  eqi, a2, 6
58
test_end
59

  
60
test loop_excm
61
    movi    a2, 0
62
    movi    a3, 5
63
    rsr     a4, ps
64
    movi    a5, 0x10
65
    or      a4, a4, a5
66
    wsr     a4, ps
67
    isync
68
    loop    a3, 1f
69
    addi    a2, a2, 1
70
1:
71
    xor     a4, a4, a5
72
    isync
73
    wsr     a4, ps
74
    assert  eqi, a2, 1
75
test_end
76

  
77
test_suite_end
b/tests/xtensa/test_max.S
1
.include "macros.inc"
2

  
3
test_suite max
4

  
5
test max
6
    movi    a2, 0xffffffff
7
    movi    a3, 1
8
    movi    a4, 1
9
    max     a5, a2, a3
10
    assert  eq, a5, a4
11

  
12
    movi    a2, 1
13
    movi    a3, 0xffffffff
14
    movi    a4, 1
15
    max     a5, a2, a3
16
    assert  eq, a5, a4
17

  
18
    movi    a2, 0xffffffff
19
    movi    a3, 1
20
    movi    a4, 1
21
    max     a2, a2, a3
22
    assert  eq, a2, a4
23

  
24
    movi    a2, 0xffffffff
25
    movi    a3, 1
26
    movi    a4, 1
27
    max     a3, a2, a3
28
    assert  eq, a3, a4
29

  
30
    movi    a2, 1
31
    movi    a3, 0xffffffff
32
    movi    a4, 1
33
    max     a2, a2, a3
34
    assert  eq, a2, a4
35

  
36
    movi    a2, 1
37
    movi    a3, 0xffffffff
38
    movi    a4, 1
39
    max     a3, a2, a3
40
    assert  eq, a3, a4
41
test_end
42

  
43
test maxu
44
    movi    a2, 0xffffffff
45
    movi    a3, 1
46
    movi    a4, 0xffffffff
47
    maxu    a5, a2, a3
48
    assert  eq, a5, a4
49

  
50
    movi    a2, 1
51
    movi    a3, 0xffffffff
52
    movi    a4, 0xffffffff
53
    maxu    a5, a2, a3
54
    assert  eq, a5, a4
55

  
56
    movi    a2, 0xffffffff
57
    movi    a3, 1
58
    movi    a4, 0xffffffff
59
    maxu    a2, a2, a3
60
    assert  eq, a2, a4
61

  
62
    movi    a2, 0xffffffff
63
    movi    a3, 1
64
    movi    a4, 0xffffffff
65
    maxu    a3, a2, a3
66
    assert  eq, a3, a4
67

  
68
    movi    a2, 1
69
    movi    a3, 0xffffffff
70
    movi    a4, 0xffffffff
71
    maxu    a2, a2, a3
72
    assert  eq, a2, a4
73

  
74
    movi    a2, 1
75
    movi    a3, 0xffffffff
76
    movi    a4, 0xffffffff
77
    maxu    a3, a2, a3
78
    assert  eq, a3, a4
79
test_end
80

  
81
test_suite_end
b/tests/xtensa/test_min.S
1
.include "macros.inc"
2

  
3
test_suite min
4

  
5
test min
6
    movi    a2, 0xffffffff
7
    movi    a3, 1
8
    movi    a4, 0xffffffff
9
    min     a5, a2, a3
10
    assert  eq, a5, a4
11

  
12
    movi    a2, 1
13
    movi    a3, 0xffffffff
14
    movi    a4, 0xffffffff
15
    min     a5, a2, a3
16
    assert  eq, a5, a4
17

  
18
    movi    a2, 0xffffffff
19
    movi    a3, 1
20
    movi    a4, 0xffffffff
21
    min     a2, a2, a3
22
    assert  eq, a2, a4
23

  
24
    movi    a2, 0xffffffff
25
    movi    a3, 1
26
    movi    a4, 0xffffffff
27
    min     a3, a2, a3
28
    assert  eq, a3, a4
29

  
30
    movi    a2, 1
31
    movi    a3, 0xffffffff
32
    movi    a4, 0xffffffff
33
    min     a2, a2, a3
34
    assert  eq, a2, a4
35

  
36
    movi    a2, 1
37
    movi    a3, 0xffffffff
38
    movi    a4, 0xffffffff
39
    min     a3, a2, a3
40
    assert  eq, a3, a4
41
test_end
42

  
43
test minu
44
    movi    a2, 0xffffffff
45
    movi    a3, 1
46
    movi    a4, 1
47
    minu    a5, a2, a3
48
    assert  eq, a5, a4
49

  
50
    movi    a2, 1
51
    movi    a3, 0xffffffff
52
    movi    a4, 1
53
    minu    a5, a2, a3
54
    assert  eq, a5, a4
55

  
56
    movi    a2, 0xffffffff
57
    movi    a3, 1
58
    movi    a4, 1
59
    minu    a2, a2, a3
60
    assert  eq, a2, a4
61

  
62
    movi    a2, 0xffffffff
63
    movi    a3, 1
64
    movi    a4, 1
65
    minu    a3, a2, a3
66
    assert  eq, a3, a4
67

  
68
    movi    a2, 1
69
    movi    a3, 0xffffffff
70
    movi    a4, 1
71
    minu    a2, a2, a3
72
    assert  eq, a2, a4
73

  
74
    movi    a2, 1
75
    movi    a3, 0xffffffff
76
    movi    a4, 1
77
    minu    a3, a2, a3
78
    assert  eq, a3, a4
79
test_end
80

  
81
test_suite_end
b/tests/xtensa/test_mmu.S
1
.include "macros.inc"
2

  
3
test_suite mmu
4

  
5
.purgem test
6

  
7
.macro test name
8
    movi    a2, 0x00000004
9
    idtlb   a2
10
    movi    a2, 0x00100004
11
    idtlb   a2
12
    movi    a2, 0x00200004
13
    idtlb   a2
14
    movi    a2, 0x00300004
15
    idtlb   a2
16
    movi    a2, 0x00000007
17
    idtlb   a2
18
.endm
19

  
20
test tlb_group
21
    movi    a2, 0x04000002 /* PPN */
22
    movi    a3, 0x01200004 /* VPN */
23
    wdtlb   a2, a3
24
    witlb   a2, a3
25
    movi    a3, 0x00200004
26
    rdtlb0  a1, a3
27
    ritlb0  a2, a3
28
    movi    a3, 0x01000001
29
    assert  eq, a1, a3
30
    assert  eq, a2, a3
31
    movi    a3, 0x00200004
32
    rdtlb1  a1, a3
33
    ritlb1  a2, a3
34
    movi    a3, 0x04000002
35
    assert  eq, a1, a3
36
    assert  eq, a2, a3
37
    movi    a3, 0x01234567
38
    pdtlb   a1, a3
39
    pitlb   a2, a3
40
    movi    a3, 0x01234014
41
    assert  eq, a1, a3
42
    movi    a3, 0x0123400c
43
    assert  eq, a2, a3
44
    movi    a3, 0x00200004
45
    idtlb   a3
46
    iitlb   a3
47
    movi    a3, 0x01234567
48
    pdtlb   a1, a3
49
    pitlb   a2, a3
50
    movi    a3, 0x00000010
51
    and     a1, a1, a3
52
    assert  eqi, a1, 0
53
    movi    a3, 0x00000008
54
    and     a2, a2, a3
55
    assert  eqi, a2, 0
56
test_end
57

  
58
test itlb_miss
59
    set_vector kernel, 1f
60

  
61
    movi    a3, 0x00100000
62
    jx      a3
63
    test_fail
64
1:
65
    rsr     a2, excvaddr
66
    assert  eq, a2, a3
67
    rsr     a2, exccause
68
    movi    a3, 16
69
    assert  eq, a2, a3
70
test_end
71

  
72
test dtlb_miss
73
    set_vector kernel, 1f
74

  
75
    movi    a3, 0x00100000
76
    l8ui    a2, a3, 0
77
    test_fail
78
1:
79
    rsr     a2, excvaddr
80
    assert  eq, a2, a3
81
    rsr     a2, exccause
82
    movi    a3, 24
83
    assert  eq, a2, a3
84
test_end
85

  
86
test itlb_multi_hit
87
    set_vector kernel, 1f
88

  
89
    movi    a2, 0x04000002 /* PPN */
90
    movi    a3, 0xf0000004 /* VPN */
91
    witlb   a2, a3
92
    movi    a3, 0xf0000000
93
    pitlb   a2, a3
94
    test_fail
95
1:
96
    rsr     a2, exccause
97
    movi    a3, 17
98
    assert  eq, a2, a3
99
test_end
100

  
101
test dtlb_multi_hit
102
    set_vector kernel, 1f
103

  
104
    movi    a2, 0x04000002 /* PPN */
105
    movi    a3, 0x01200004 /* VPN */
106
    wdtlb   a2, a3
107
    movi    a3, 0x01200007 /* VPN */
108
    wdtlb   a2, a3
109
    movi    a3, 0x01200000
110
    pdtlb   a2, a3
111
    test_fail
112
1:
113
    rsr     a2, exccause
114
    movi    a3, 25
115
    assert  eq, a2, a3
116
test_end
117

  
118
test inst_fetch_privilege
119
    set_vector kernel, 3f
120

  
121
    movi    a2, 0x4004f
122
    wsr     a2, ps
123
1:
124
    isync
125
    nop
126
2:
127
    test_fail
128
3:
129
    movi    a1, 1b
130
    rsr     a2, excvaddr
131
    rsr     a3, epc1
132
    assert  ge, a2, a1
133
    assert  ge, a3, a1
134
    movi    a1, 2b
135
    assert  lt, a2, a1
136
    assert  lt, a3, a1
137
    rsr     a2, exccause
138
    movi    a3, 18
139
    assert  eq, a2, a3
140
    rsr     a2, ps
141
    movi    a3, 0x4005f
142
    assert  eq, a2, a3
143
test_end
144

  
145
test load_store_privilege
146
    set_vector kernel, 2f
147

  
148
    movi    a3, 10f
149
    pitlb   a3, a3
150
    ritlb1  a2, a3
151
    movi    a1, 0x10
152
    or      a2, a2, a1
153
    movi    a1, 0x000ff000
154
    and     a3, a3, a1
155
    movi    a1, 4
156
    or      a3, a3, a1
157
    witlb   a2, a3
158
    movi    a3, 10f
159
    movi    a1, 0x000fffff
160
    and     a1, a3, a1
161

  
162
    movi    a2, 0x04000003 /* PPN */
163
    movi    a3, 0x01200004 /* VPN */
164
    wdtlb   a2, a3
165
    movi    a3, 0x01200001
166
    movi    a2, 0x4004f
167
    jx      a1
168
10:
169
    wsr     a2, ps
170
    isync
171
1:
172
    l8ui    a2, a3, 0
173
    test_fail
174
2:
175
    rsr     a2, excvaddr
176
    assert  eq, a2, a3
177
    rsr     a2, epc1
178
    movi    a3, 1b
179
    movi    a1, 0x000fffff
180
    and     a3, a3, a1
181
    assert  eq, a2, a3
182
    rsr     a2, exccause
183
    movi    a3, 26
184
    assert  eq, a2, a3
185
    rsr     a2, ps
186
    movi    a3, 0x4005f
187
    assert  eq, a2, a3
188
test_end
189

  
190
test cring_load_store_privilege
191
    set_vector kernel, 0
192
    set_vector double, 2f
193

  
194
    movi    a2, 0x04000003 /* PPN */
195
    movi    a3, 0x01200004 /* VPN */
196
    wdtlb   a2, a3
197
    movi    a3, 0x01200004
198
    movi    a2, 0x4005f    /* ring 1 + excm => cring == 0 */
199
    wsr     a2, ps
200
    isync
201
    l8ui    a2, a3, 0      /* cring used */
202
1:
203
    l32e    a2, a3, -4     /* ring used */
204
    test_fail
205
2:
206
    rsr     a2, excvaddr
207
    addi    a2, a2, 4
208
    assert  eq, a2, a3
209
    rsr     a2, depc
210
    movi    a3, 1b
211
    assert  eq, a2, a3
212
    rsr     a2, exccause
213
    movi    a3, 26
214
    assert  eq, a2, a3
215
    rsr     a2, ps
216
    movi    a3, 0x4005f
217
    assert  eq, a2, a3
218
test_end
219

  
220
test inst_fetch_prohibited
221
    set_vector kernel, 2f
222

  
223
    movi    a3, 10f
224
    pitlb   a3, a3
225
    ritlb1  a2, a3
226
    movi    a1, 0xfffff000
227
    and     a2, a2, a1
228
    movi    a1, 0x4
229
    or      a2, a2, a1
230
    movi    a1, 0x000ff000
231
    and     a3, a3, a1
232
    movi    a1, 4
233
    or      a3, a3, a1
234
    witlb   a2, a3
235
    movi    a3, 10f
236
    movi    a1, 0x000fffff
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff