1# Copyright (c) 2021-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.record panda.String <external>
15.record IO <external>
16.function void IO.printString(panda.String a0) <external>
17.function void IO.printI64(i64 a0) <external>
18
19# a0 - index in parameter list
20.function i64 get(i64 a0, i64 a1, i64 a2, i64 a3, i64 a4, i64 a5, i64 a6, i64 a7, i64 a8) {
21    lda.str "\n"
22    sta.obj v0
23    call.short IO.printString, v0, v0
24    call.short IO.printI64, a0, a0
25    call.short IO.printString, v0, v0
26    call.short IO.printI64, a1, a1
27    call.short IO.printString, v0, v0
28    call.short IO.printI64, a2, a2
29    call.short IO.printString, v0, v0
30    call.short IO.printI64, a3, a3
31    call.short IO.printString, v0, v0
32    call.short IO.printI64, a4, a4
33    call.short IO.printString, v0, v0
34    call.short IO.printI64, a5, a5
35    call.short IO.printString, v0, v0
36    call.short IO.printI64, a6, a6
37    call.short IO.printString, v0, v0
38    call.short IO.printI64, a7, a7
39    call.short IO.printString, v0, v0
40    call.short IO.printI64, a8, a8
41    call.short IO.printString, v0, v0
42
43    lda.64 a0
44    jeqz zeroth
45
46    subi 1
47    jeqz first
48
49    subi 1
50    jeqz second
51
52    subi 1
53    jeqz third
54
55    subi 1
56    jeqz fourth
57
58    subi 1
59    jeqz fifth
60
61    subi 1
62    jeqz sixth
63
64    #subi 1
65    #jeqz seventh
66    lda.64 a8
67    return.64
68
69sixth:
70    lda.64 a7
71    return.64
72
73fifth:
74    lda.64 a6
75    return.64
76
77fourth:
78    lda.64 a5
79    return.64
80
81third:
82    lda.64 a4
83    return.64
84
85second:
86    lda.64 a3
87    return.64
88
89first:
90    lda.64 a2
91    return.64
92
93zeroth:
94    lda.64 a1
95    return.64
96}
97
98
99.function i64 main() {
100    movi.64 v0, 0
101
102    movi.64 v1, 1000001
103    movi.64 v2, 2000002
104    movi.64 v3, 3000003
105    movi.64 v4, 4000004
106
107
108    # 0x 3aaa aaaa aaaa aaa3
109    movi.64 v5, 4227378850225105571
110    # 0x 7333 3333 3333 3337
111    movi.64 v6, 8301034833169298231
112    # 0x 1fff ffff ffff fff1
113    movi.64 v7, 2305843009213693937
114
115    # 0x 1234 5678 9abc def0
116    movi.64 v8, 1311768467463790320
117
118    call.range get, v0
119    sub2.64 v1
120    jnez print_fail_1
121
122    movi.64 v0, 1
123    call.range get, v0
124    sub2.64 v2
125    jnez print_fail_2
126
127    movi.64 v0, 2
128    call.range get, v0
129    sub2.64 v3
130    jnez print_fail_3
131
132    movi.64 v0, 3
133    call.range get, v0
134    sub2.64 v4
135    jnez print_fail_4
136
137    movi.64 v0, 4
138    call.range get, v0
139    sub2.64 v5
140    jnez print_fail_5
141
142    movi.64 v0, 5
143    call.range get, v0
144    sub2.64 v6
145    jnez print_fail_6
146
147    movi.64 v0, 6
148    call.range get, v0
149    sub2.64 v7
150    jnez print_fail_7
151
152    return.64
153
154print_fail_1:
155    sta.64 v1
156    lda.str "1-st paramer fail!"
157    sta.obj v0
158    call.short IO.printString, v0, v0
159    lda.64 v1
160    return.64
161
162print_fail_2:
163    sta.64 v1
164    lda.str "2-d paramer fail!"
165    sta.obj v0
166    call.short IO.printString, v0, v0
167    lda.64 v1
168    return.64
169
170print_fail_3:
171    sta.64 v1
172    lda.str "3-d paramer fail!"
173    sta.obj v0
174    call.short IO.printString, v0, v0
175    lda.64 v1
176    return.64
177
178print_fail_4:
179    sta.64 v1
180    lda.str "4-d paramer fail!"
181    sta.obj v0
182    call.short IO.printString, v0, v0
183    lda.64 v1
184    return.64
185
186print_fail_5:
187    sta.64 v1
188    lda.str "5-d paramer fail!"
189    sta.obj v0
190    call.short IO.printString, v0, v0
191    lda.64 v1
192    return.64
193
194print_fail_6:
195    sta.64 v1
196    lda.str "6-d paramer fail!"
197    sta.obj v0
198    call.short IO.printString, v0, v0
199    lda.64 v1
200    return.64
201
202print_fail_7:
203    sta.64 v1
204    lda.str "7-d paramer fail!"
205    sta.obj v0
206    call.short IO.printString, v0, v0
207    lda.64 v1
208    return.64
209
210print_fail_8:
211    sta.64 v1
212    lda.str "8-d paramer fail!"
213    sta.obj v0
214    call.short IO.printString, v0, v0
215    lda.64 v1
216    return.64
217
218print_fail_9:
219    sta.64 v1
220    lda.str "9-d paramer fail!"
221    sta.obj v0
222    call.short IO.printString, v0, v0
223    lda.64 v1
224    return.64
225}
226