• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2022 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13#
14# The following comment until the empty line must be a valid YAML document
15# containing exact copies of ISA specification assertions relevant to this test.
16
17.function void fill_i8(i8[] a0, i8 a1) {
18	movi v0, 0x0
19loop:
20	lenarr a0
21	jle v0, exit
22	lda a1
23	starr.8 a0, v0
24	inci v0, 0x1
25	jmp loop
26exit:
27	return.void
28}
29
30.function void fill_i16(i16[] a0, i16 a1) {
31	movi v0, 0x0
32loop:
33	lenarr a0
34	jle v0, exit
35	lda a1
36	starr.16 a0, v0
37	inci v0, 0x1
38	jmp loop
39exit:
40	return.void
41}
42
43.function void fill_i32(i32[] a0, i32 a1) {
44	movi v0, 0x0
45loop:
46	lenarr a0
47	jle v0, exit
48	lda a1
49	starr a0, v0
50	inci v0, 0x1
51	jmp loop
52exit:
53	return.void
54}
55
56.function void fill_i64(i64[] a0, i64 a1) {
57	movi v0, 0x0
58loop:
59	lenarr a0
60	jle v0, exit
61	lda.64 a1
62	starr.64 a0, v0
63	inci v0, 0x1
64	jmp loop
65exit:
66	return.void
67}
68
69.function void fill_f32(f32[] a0, f32 a1) {
70	movi v0, 0x0
71loop:
72	lenarr a0
73	jle v0, exit
74	lda a1
75	fstarr.32 a0, v0
76	inci v0, 0x1
77	jmp loop
78exit:
79	return.void
80}
81
82.function void fill_f64(f64[] a0, f64 a1) {
83	movi v0, 0x0
84loop:
85	lenarr a0
86	jle v0, exit
87	lda.64 a1
88	fstarr.64 a0, v0
89	inci v0, 0x1
90	jmp loop
91exit:
92	return.void
93}
94
95.function i32 validate_i8(i8[] a0, i8 a1) {
96	movi v0, 0x0
97loop:
98	lenarr a0
99	jle v0, exit
100	lda v0
101	ldarr.8 a0
102    jne a1, exit_err
103	inci v0, 0x1
104	jmp loop
105exit:
106    ldai 0
107	return
108exit_err:
109    ldai 1
110    return
111}
112
113.function i32 validate_i16(i16[] a0, i16 a1) {
114	movi v0, 0x0
115loop:
116	lenarr a0
117	jle v0, exit
118	lda v0
119	ldarr.16 a0
120    jne a1, exit_err
121	inci v0, 0x1
122	jmp loop
123exit:
124    ldai 0
125	return
126exit_err:
127    ldai 1
128    return
129}
130
131.function i32 validate_i32(i32[] a0, i32 a1) {
132	movi v0, 0x0
133loop:
134	lenarr a0
135	jle v0, exit
136	lda v0
137	ldarr a0
138    jne a1, exit_err
139	inci v0, 0x1
140	jmp loop
141exit:
142    ldai 0
143	return
144exit_err:
145    ldai 1
146    return
147}
148
149.function i32 validate_i64(i64[] a0, i64 a1) {
150	movi v0, 0x0
151loop:
152	lenarr a0
153	jle v0, exit
154	lda v0
155	ldarr.64 a0
156    cmp.64 a1
157    jnez exit_err
158	inci v0, 0x1
159	jmp loop
160exit:
161    ldai 0
162	return
163exit_err:
164    ldai 1
165    return
166}
167
168.function i32 validate_f32(f32[] a0, f32 a1) {
169	movi v0, 0x0
170loop:
171	lenarr a0
172	jle v0, exit
173	lda v0
174	fldarr.32 a0
175    fcmpl a1
176    jnez exit_err
177	inci v0, 0x1
178	jmp loop
179exit:
180    ldai 0
181	return
182exit_err:
183    ldai 1
184    return
185}
186
187.function i32 validate_f64(f64[] a0, f64 a1) {
188	movi v0, 0x0
189loop:
190	lenarr a0
191	jle v0, exit
192	lda v0
193	fldarr.64 a0
194    fcmpl.64 a1
195    jnez exit_err
196	inci v0, 0x1
197	jmp loop
198exit:
199    ldai 0
200	return
201exit_err:
202    ldai 1
203    return
204}
205.function i32 main() {
206    movi v0, 1024
207    movi v1, 0
208    newarr v2, v0, i8[]
209    movi v3, 42
210    call.short fill_i8, v2, v3
211    call.short validate_i8, v2, v3
212    jne v1, error_1
213
214    newarr v2, v0, i16[]
215    call.short fill_i16, v2, v3
216    call.short validate_i16, v2, v3
217    jne v1, error_2
218
219    newarr v2, v0, i32[]
220    call.short fill_i32, v2, v3
221    call.short validate_i32, v2, v3
222    jne v1, error_3
223
224    newarr v2, v0, i64[]
225    movi.64 v3, 42
226    call.short fill_i64, v2, v3
227    call.short validate_i64, v2, v3
228    jne v1, error_4
229
230    newarr v2, v0, f32[]
231    fmovi v3, 42
232    call.short fill_f32, v2, v3
233    call.short validate_f32, v2, v3
234    jne v1, error_5
235
236    newarr v2, v0, f64[]
237    fmovi.64 v3, 42
238    call.short fill_f64, v2, v3
239    call.short validate_f64, v2, v3
240    jne v1, error_6
241
242    ldai 0
243    return
244error_1:
245    ldai 1
246    return
247error_2:
248    ldai 2
249    return
250error_3:
251    ldai 3
252    return
253error_4:
254    ldai 4
255    return
256error_5:
257    ldai 5
258    return
259error_6:
260    ldai 6
261    return
262}