summaryrefslogtreecommitdiff
path: root/sim/testsuite/sim/fr30/st.cgs
blob: e458d14001b4413991e2acd53fc3b1fbb522ab95 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# fr30 testcase for
# mach(): fr30
#  st $Ri,@$Rj

	.include "testutils.inc"

	START

	.text
	.global st
st:
	mvr_h_gr	sp,r9		; Save stack pointer
	; Test st $Ri,@Rj
	mvi_h_gr	0xdeadbeef,r8
	set_cc          0x0f		; Condition codes should not change
	st      	r8,@sp
	test_cc		1 1 1 1
	test_h_mem	0xdeadbeef,sp
	test_h_gr	0xdeadbeef,r8

	; Test st $Ri,@(R13,Rj)
	mvi_h_gr	0xbeefdead,r8
	mvr_h_gr	sp,r1
	inci_h_gr	-8,sp
	mvr_h_gr	sp,r2
	inci_h_gr	4,sp

	mvi_h_gr	4,r13
	set_cc          0x0e		; Condition codes should not change
	st      	r8,@(r13,sp)
	test_cc		1 1 1 0
	test_h_mem	0xbeefdead,r1
	test_h_gr	0xbeefdead,r8

	mvi_h_gr	0,r13
	set_cc          0x0d		; Condition codes should not change
	st      	r8,@(r13,sp)
	test_cc		1 1 0 1
	test_h_mem	0xbeefdead,sp
	test_h_gr	0xbeefdead,r8

	mvi_h_gr	-4,r13
	set_cc          0x0c		; Condition codes should not change
	st      	r8,@(r13,sp)
	test_cc		1 1 0 0
	test_h_mem	0xbeefdead,r2
	test_h_gr	0xbeefdead,r8

	; Test st $Ri,@(R14,$disp10)
	mvi_h_gr	0xdeadbeef,r8
	mvr_h_gr	r9,sp		; Restore stack pointer
	mvr_h_gr	sp,r14
	inci_h_gr	-508,r14
	mvr_h_gr	r14,r2
	inci_h_gr	-512,r14
	mvr_h_gr	r14,r3
	inci_h_gr	512,r14

	set_cc          0x0b		; Condition codes should not change
	st      	r8,@(r14,508)
	test_cc		1 0 1 1
	test_h_mem	0xdeadbeef,r1
	test_h_gr	0xdeadbeef,r8

	set_cc          0x0a		; Condition codes should not change
	st      	r8,@(r14,0)
	test_cc		1 0 1 0
	test_h_mem	0xdeadbeef,r2
	test_h_gr	0xdeadbeef,r8

	set_cc          0x09		; Condition codes should not change
	st      	r8,@(r14,-512)
	test_cc		1 0 0 1
	test_h_mem	0xdeadbeef,r3
	test_h_gr	0xdeadbeef,r8

	; Test st $Ri,@(R15,$udisp6)
	mvi_h_gr	0xbeefdead,r8
	mvr_h_gr	r9,sp		; Restore stack pointer
	inci_h_gr	-60,sp

	set_cc          0x08		; Condition codes should not change
	st      	r8,@(r15,60)
	test_cc		1 0 0 0
	test_h_mem	0xbeefdead,r9
	test_h_gr	0xbeefdead,r8

	set_cc          0x07		; Condition codes should not change
	st      	r8,@(r15,0)
	test_cc		0 1 1 1
	test_h_mem	0xbeefdead,r9
	test_h_gr	0xbeefdead,r8

	; Test st $Ri,@-R15
	mvr_h_gr	r9,sp		; Restore stack pointer
	mvr_h_gr	r9,r10

	set_cc          0x06		; Condition codes should not change
	st      	r15,@-r15
	test_cc		0 1 1 0
	testr_h_mem	r9,sp		; original value stored
	inci_h_gr	-4,r10
	testr_h_gr	r10,sp		; was decremented

	mvi_h_gr	0xdeadbeef,r8
	set_cc          0x05		; Condition codes should not change
	st      	r8,@-r15
	test_cc		0 1 0 1
	test_h_mem	0xdeadbeef,sp
	test_h_gr	0xdeadbeef,r8
	inci_h_gr	-4,r10
	testr_h_gr	r10,sp		; was decremented

	; Test st $Rs,@-R15
	mvr_h_gr	r9,sp		; Restore stack pointer
	mvr_h_gr	r9,r10
	mvi_h_dr	0xbeefdead,tbr
	mvi_h_dr	0xdeadbeef,rp
	mvi_h_dr	0x0000dead,mdh
	mvi_h_dr	0xbeef0000,mdl

	set_cc          0x04		; Condition codes should not change
	st      	tbr,@-r15
	test_cc		0 1 0 0
	test_h_mem	0xbeefdead,sp
	inci_h_gr	-4,r10
	testr_h_gr	r10,sp		; was decremented

	set_cc          0x03		; Condition codes should not change
	st      	rp,@-r15
	test_cc		0 0 1 1
	test_h_mem	0xdeadbeef,sp
	inci_h_gr	-4,r10
	testr_h_gr	r10,sp		; was decremented

	set_cc          0x02		; Condition codes should not change
	st      	mdh,@-r15
	test_cc		0 0 1 0
	test_h_mem	0x0000dead,sp
	inci_h_gr	-4,r10
	testr_h_gr	r10,sp		; was decremented

	set_cc          0x01		; Condition codes should not change
	st      	mdl,@-r15
	test_cc		0 0 0 1
	test_h_mem	0xbeef0000,sp
	inci_h_gr	-4,r10
	testr_h_gr	r10,sp		; was decremented

	mvr_h_gr	sp,usp
	set_s_user
	set_cc          0x00		; Condition codes should not change
	st      	ssp,@-r15
	test_cc		0 0 0 0
	testr_h_mem	r10,sp
	inci_h_gr	-4,r10
	testr_h_gr	r10,sp		; was decremented

	set_cc          0x00		; Condition codes should not change
	st      	usp,@-r15
	test_cc		0 0 0 0
	testr_h_mem	r10,sp		; original value stored
	inci_h_gr	-4,r10
	testr_h_gr	r10,sp		; was decremented

	mvr_h_gr	sp,ssp
	set_s_system
	set_cc          0x00		; Condition codes should not change
	st      	usp,@-r15
	test_cc		0 0 0 0
	testr_h_mem	r10,sp
	inci_h_gr	-4,r10
	testr_h_gr	r10,sp		; was decremented

	set_cc          0x00		; Condition codes should not change
	st      	ssp,@-r15
	test_cc		0 0 0 0
	testr_h_mem	r10,sp		; original value stored
	inci_h_gr	-4,r10
	testr_h_gr	r10,sp		; was decremented

	; Test st $PS,@-R15
	mvr_h_gr	r9,sp		; Restore stack pointer
	mvr_h_gr	r9,r10

	set_cc          0x0f		; Condition codes affect result
	set_dbits	3		; Division bits affect result
	st      	ps,@-r15
	test_cc		1 1 1 1
	test_h_mem	0x0000060f,sp
	inci_h_gr	-4,r10
	testr_h_gr	r10,sp		; was decremented

	pass