1b1994897Sopenharmony_ci# Copyright (c) 2021-2022 Huawei Device Co., Ltd. 2b1994897Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 3b1994897Sopenharmony_ci# you may not use this file except in compliance with the License. 4b1994897Sopenharmony_ci# You may obtain a copy of the License at 5b1994897Sopenharmony_ci# 6b1994897Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 7b1994897Sopenharmony_ci# 8b1994897Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 9b1994897Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 10b1994897Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11b1994897Sopenharmony_ci# See the License for the specific language governing permissions and 12b1994897Sopenharmony_ci# limitations under the License. 13b1994897Sopenharmony_ci 14b1994897Sopenharmony_ci.function u1 main(){ 15b1994897Sopenharmony_ci movi v0, 3 16b1994897Sopenharmony_ci movi v1, 9 17b1994897Sopenharmony_ci movi v2, 504699 18b1994897Sopenharmony_ci call test, v0, v1, v2, v0 19b1994897Sopenharmony_ci return 20b1994897Sopenharmony_ci} 21b1994897Sopenharmony_ci 22b1994897Sopenharmony_ci.function i32 test(i32 a0, i32 a1, i32 a2){ 23b1994897Sopenharmony_ci movi v3, 0 #result 24b1994897Sopenharmony_ci mov v4, a0 #loop_counter 25b1994897Sopenharmony_ci lda a0 26b1994897Sopenharmony_ciloop: 27b1994897Sopenharmony_ci jgt a1, loop_exit 28b1994897Sopenharmony_ci movi v5, 3 29b1994897Sopenharmony_ci call.short ack, v5, v4 30b1994897Sopenharmony_ci add2 v3 31b1994897Sopenharmony_ci sta v3 32b1994897Sopenharmony_ci movi v5, 17 33b1994897Sopenharmony_ci add v5, v4 34b1994897Sopenharmony_ci sta v5 35b1994897Sopenharmony_ci call.short fib, v5, v5 36b1994897Sopenharmony_ci add2 v3 37b1994897Sopenharmony_ci sta v3 38b1994897Sopenharmony_ci lda v4 39b1994897Sopenharmony_ci muli 3 40b1994897Sopenharmony_ci addi 3 41b1994897Sopenharmony_ci sta v5 42b1994897Sopenharmony_ci lda v4 43b1994897Sopenharmony_ci muli 2 44b1994897Sopenharmony_ci addi 2 45b1994897Sopenharmony_ci sta v6 46b1994897Sopenharmony_ci lda v4 47b1994897Sopenharmony_ci addi 1 48b1994897Sopenharmony_ci sta v7 49b1994897Sopenharmony_ci call tak, v5, v6, v7, v5 50b1994897Sopenharmony_ci add2 v3 51b1994897Sopenharmony_ci sta v3 52b1994897Sopenharmony_ci inci v4, 1 53b1994897Sopenharmony_ci lda v4 54b1994897Sopenharmony_ci jmp loop 55b1994897Sopenharmony_ciloop_exit: 56b1994897Sopenharmony_ci lda v3 57b1994897Sopenharmony_ci jne a2, assert_err 58b1994897Sopenharmony_ci ldai 0 59b1994897Sopenharmony_ci return 60b1994897Sopenharmony_ciassert_err: 61b1994897Sopenharmony_ci ldai 1 62b1994897Sopenharmony_ci return 63b1994897Sopenharmony_ci} 64b1994897Sopenharmony_ci 65b1994897Sopenharmony_ci.function i32 ack(i32 a0, i32 a1){ 66b1994897Sopenharmony_ci lda a0 67b1994897Sopenharmony_ci jeqz if1 68b1994897Sopenharmony_ci lda a1 69b1994897Sopenharmony_ci jeqz if2 70b1994897Sopenharmony_ci lda a1 71b1994897Sopenharmony_ci subi 1 72b1994897Sopenharmony_ci sta v1 73b1994897Sopenharmony_ci call.short ack, a0, v1 74b1994897Sopenharmony_ci sta v2 75b1994897Sopenharmony_ci lda a0 76b1994897Sopenharmony_ci subi 1 77b1994897Sopenharmony_ci sta v0 78b1994897Sopenharmony_ci call.short ack, v0, v2 79b1994897Sopenharmony_ci return 80b1994897Sopenharmony_ciif1: 81b1994897Sopenharmony_ci lda a1 82b1994897Sopenharmony_ci addi 1 83b1994897Sopenharmony_ci return 84b1994897Sopenharmony_ciif2: 85b1994897Sopenharmony_ci lda a0 86b1994897Sopenharmony_ci subi 1 87b1994897Sopenharmony_ci sta v0 88b1994897Sopenharmony_ci movi v3, 1 89b1994897Sopenharmony_ci call.short ack, v0, v3 90b1994897Sopenharmony_ci return 91b1994897Sopenharmony_ci} 92b1994897Sopenharmony_ci 93b1994897Sopenharmony_ci.function i32 fib(i32 a0){ 94b1994897Sopenharmony_ci ldai 2 95b1994897Sopenharmony_ci jgt a0, if 96b1994897Sopenharmony_ci lda a0 97b1994897Sopenharmony_ci subi 2 98b1994897Sopenharmony_ci sta v0 99b1994897Sopenharmony_ci call.short fib, v0, a0 100b1994897Sopenharmony_ci sta v1 101b1994897Sopenharmony_ci lda a0 102b1994897Sopenharmony_ci subi 1 103b1994897Sopenharmony_ci sta v0 104b1994897Sopenharmony_ci call.short fib, v0, a0 105b1994897Sopenharmony_ci sta v2 106b1994897Sopenharmony_ci add v1, v2 107b1994897Sopenharmony_ci return 108b1994897Sopenharmony_ciif: 109b1994897Sopenharmony_ci ldai 1 110b1994897Sopenharmony_ci return 111b1994897Sopenharmony_ci} 112b1994897Sopenharmony_ci 113b1994897Sopenharmony_ci.function i32 tak(i32 a0, i32 a1, i32 a2){ 114b1994897Sopenharmony_ci lda a1 115b1994897Sopenharmony_ci jge a0, if 116b1994897Sopenharmony_ci lda a0 117b1994897Sopenharmony_ci subi 1 118b1994897Sopenharmony_ci sta v0 119b1994897Sopenharmony_ci call tak, v0, a1, a2, a0 120b1994897Sopenharmony_ci sta v3 121b1994897Sopenharmony_ci lda a1 122b1994897Sopenharmony_ci subi 1 123b1994897Sopenharmony_ci sta v1 124b1994897Sopenharmony_ci call tak, v1, a2, a0, a0 125b1994897Sopenharmony_ci sta v4 126b1994897Sopenharmony_ci lda a2 127b1994897Sopenharmony_ci subi 1 128b1994897Sopenharmony_ci sta v2 129b1994897Sopenharmony_ci call tak, v2, a0, a1, a0 130b1994897Sopenharmony_ci sta v5 131b1994897Sopenharmony_ci call tak, v3, v4, v5, a0 132b1994897Sopenharmony_ci return 133b1994897Sopenharmony_ciif: 134b1994897Sopenharmony_ci lda a2 135b1994897Sopenharmony_ci return 136b1994897Sopenharmony_ci} 137