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, 2500000 16b1994897Sopenharmony_ci fmovi.64 v1, 1036257.0468539958 17b1994897Sopenharmony_ci call.short test, v0, v1 18b1994897Sopenharmony_ci return 19b1994897Sopenharmony_ci} 20b1994897Sopenharmony_ci 21b1994897Sopenharmony_ci.function u1 test(i32 a0, f64 a1){ 22b1994897Sopenharmony_ci movi v3, 12 23b1994897Sopenharmony_ci newarr v0, v3, f64[] #Angles 24b1994897Sopenharmony_ci call.short init, v0, v0 25b1994897Sopenharmony_ci call.short cordic, a0, v0 26b1994897Sopenharmony_ci sta.64 v2 #total 27b1994897Sopenharmony_ci fsub2.64 a1 28b1994897Sopenharmony_ci sta.64 v1 29b1994897Sopenharmony_ci fldai.64 1e-13 30b1994897Sopenharmony_ci fcmpl.64 v1 31b1994897Sopenharmony_ci jltz exit_failure 32b1994897Sopenharmony_ci ldai 0 33b1994897Sopenharmony_ci return 34b1994897Sopenharmony_ciexit_failure: 35b1994897Sopenharmony_ci ldai 1 36b1994897Sopenharmony_ci return 37b1994897Sopenharmony_ci} 38b1994897Sopenharmony_ci 39b1994897Sopenharmony_ci.function f64 cordic(i32 a0, f64[] a1){ 40b1994897Sopenharmony_ci fmovi.64 v1, 0.0 #total 41b1994897Sopenharmony_ci movi v2, 0 #loop_counter 42b1994897Sopenharmony_ci fmovi.64 v3, 28.027 #TARGET_ANGLE 43b1994897Sopenharmony_ciloop: 44b1994897Sopenharmony_ci lda v2 45b1994897Sopenharmony_ci jeq a0, loop_exit 46b1994897Sopenharmony_ci call.short cordicsincos, v3, a1 47b1994897Sopenharmony_ci fadd2.64 v1 48b1994897Sopenharmony_ci sta.64 v1 49b1994897Sopenharmony_ci inci v2, 1 50b1994897Sopenharmony_ci jmp loop 51b1994897Sopenharmony_ciloop_exit: 52b1994897Sopenharmony_ci lda.64 v1 53b1994897Sopenharmony_ci return.64 54b1994897Sopenharmony_ci} 55b1994897Sopenharmony_ci 56b1994897Sopenharmony_ci.function f64 cordicsincos(f64 a0, f64[] a1){ 57b1994897Sopenharmony_ci fmovi.64 v1, 0.0 #x 58b1994897Sopenharmony_ci fmovi.64 v2, 0.0 #y 59b1994897Sopenharmony_ci fmovi.64 v3, 0.0 #targetAngle 60b1994897Sopenharmony_ci fmovi.64 v4, 0.0 #currAngle 61b1994897Sopenharmony_ci movi.64 v5, 0 #step 62b1994897Sopenharmony_ci fmovi.64 v6, 0.6072529350 #AG_CONST 63b1994897Sopenharmony_ci movi v12, 12 64b1994897Sopenharmony_ci call.short FIXED, v6, v1 #x 65b1994897Sopenharmony_ci sta.64 v1 66b1994897Sopenharmony_ci call.short FIXED, a0, a0 67b1994897Sopenharmony_ci sta.64 v3 68b1994897Sopenharmony_ci movi v8, 0 #step 69b1994897Sopenharmony_ciloop: 70b1994897Sopenharmony_ci lda v8 71b1994897Sopenharmony_ci jeq v12, loop_exit 72b1994897Sopenharmony_ci lda.64 v3 73b1994897Sopenharmony_ci fcmpl.64 v4 74b1994897Sopenharmony_ci jgtz if 75b1994897Sopenharmony_ci lda.64 v2 76b1994897Sopenharmony_ci f64toi32 77b1994897Sopenharmony_ci shr2 v8 78b1994897Sopenharmony_ci i32tof64 79b1994897Sopenharmony_ci fadd2.64 v1 80b1994897Sopenharmony_ci sta.64 v10 #newX 81b1994897Sopenharmony_ci lda.64 v1 82b1994897Sopenharmony_ci f64toi32 83b1994897Sopenharmony_ci shr2 v8 84b1994897Sopenharmony_ci i32tof64 85b1994897Sopenharmony_ci fneg.64 86b1994897Sopenharmony_ci fadd2.64 v2 87b1994897Sopenharmony_ci sta.64 v2 88b1994897Sopenharmony_ci mov.64 v1, v10 89b1994897Sopenharmony_ci lda.64 v8 90b1994897Sopenharmony_ci fldarr.64 a1 91b1994897Sopenharmony_ci fneg.64 92b1994897Sopenharmony_ci fadd2.64 v4 93b1994897Sopenharmony_ci sta.64 v4 94b1994897Sopenharmony_ci inci v8, 1 95b1994897Sopenharmony_ci jmp loop 96b1994897Sopenharmony_ciloop_exit: 97b1994897Sopenharmony_ci call.short FLOAT, v1, v1 98b1994897Sopenharmony_ci sta.64 v12 99b1994897Sopenharmony_ci call.short FLOAT, v2, v1 100b1994897Sopenharmony_ci sta.64 v13 101b1994897Sopenharmony_ci fmul2.64 v12 102b1994897Sopenharmony_ci return.64 103b1994897Sopenharmony_ciif: 104b1994897Sopenharmony_ci lda.64 v2 105b1994897Sopenharmony_ci f64toi32 106b1994897Sopenharmony_ci shr2 v8 107b1994897Sopenharmony_ci i32tof64 108b1994897Sopenharmony_ci fneg.64 109b1994897Sopenharmony_ci fadd2.64 v1 110b1994897Sopenharmony_ci sta.64 v10 #newX 111b1994897Sopenharmony_ci lda.64 v1 112b1994897Sopenharmony_ci f64toi32 113b1994897Sopenharmony_ci shr2 v8 114b1994897Sopenharmony_ci i32tof64 115b1994897Sopenharmony_ci fadd2.64 v2 116b1994897Sopenharmony_ci sta.64 v2 117b1994897Sopenharmony_ci mov.64 v1, v10 118b1994897Sopenharmony_ci lda v8 119b1994897Sopenharmony_ci fldarr.64 a1 120b1994897Sopenharmony_ci fadd2.64 v4 121b1994897Sopenharmony_ci sta.64 v4 122b1994897Sopenharmony_ci inci v8, 1 123b1994897Sopenharmony_ci lda v8 124b1994897Sopenharmony_ci jmp loop 125b1994897Sopenharmony_ci} 126b1994897Sopenharmony_ci 127b1994897Sopenharmony_ci.function f64 FLOAT(f64 a0){ 128b1994897Sopenharmony_ci fmovi.64 v1, 65536.0 129b1994897Sopenharmony_ci lda.64 a0 130b1994897Sopenharmony_ci fdiv2.64 v1 131b1994897Sopenharmony_ci return.64 132b1994897Sopenharmony_ci} 133b1994897Sopenharmony_ci 134b1994897Sopenharmony_ci.function f64 FIXED(f64 a0){ 135b1994897Sopenharmony_ci fldai.64 65536.0 136b1994897Sopenharmony_ci fmul2.64 a0 137b1994897Sopenharmony_ci return.64 138b1994897Sopenharmony_ci} 139b1994897Sopenharmony_ci 140b1994897Sopenharmony_ci.function void init(f64[] a0){ 141b1994897Sopenharmony_ci movi.64 v2, 0 142b1994897Sopenharmony_ci fmovi.64 v1, 45.0 143b1994897Sopenharmony_ci call.short FIXED, v1, v1 144b1994897Sopenharmony_ci fstarr.64 a0, v2 145b1994897Sopenharmony_ci inci v2, 1 146b1994897Sopenharmony_ci fmovi.64 v1, 26.565 147b1994897Sopenharmony_ci call.short FIXED, v1, v1 148b1994897Sopenharmony_ci fstarr.64 a0, v2 149b1994897Sopenharmony_ci inci v2, 1 150b1994897Sopenharmony_ci fmovi.64 v1, 14.0362 151b1994897Sopenharmony_ci call.short FIXED, v1, v1 152b1994897Sopenharmony_ci fstarr.64 a0, v2 153b1994897Sopenharmony_ci inci v2, 1 154b1994897Sopenharmony_ci fmovi.64 v1, 7.12502 155b1994897Sopenharmony_ci call.short FIXED, v1, v1 156b1994897Sopenharmony_ci fstarr.64 a0, v2 157b1994897Sopenharmony_ci inci v2, 1 158b1994897Sopenharmony_ci fmovi.64 v1, 3.57633 159b1994897Sopenharmony_ci call.short FIXED, v1, v1 160b1994897Sopenharmony_ci fstarr.64 a0, v2 161b1994897Sopenharmony_ci inci v2, 1 162b1994897Sopenharmony_ci fmovi.64 v1, 1.78991 163b1994897Sopenharmony_ci call.short FIXED, v1, v1 164b1994897Sopenharmony_ci fstarr.64 a0, v2 165b1994897Sopenharmony_ci inci v2, 1 166b1994897Sopenharmony_ci fmovi.64 v1, 0.895174 167b1994897Sopenharmony_ci call.short FIXED, v1, v1 168b1994897Sopenharmony_ci fstarr.64 a0, v2 169b1994897Sopenharmony_ci inci v2, 1 170b1994897Sopenharmony_ci fmovi.64 v1, 0.447614 171b1994897Sopenharmony_ci call.short FIXED, v1, v1 172b1994897Sopenharmony_ci fstarr.64 a0, v2 173b1994897Sopenharmony_ci inci v2, 1 174b1994897Sopenharmony_ci fmovi.64 v1, 0.223811 175b1994897Sopenharmony_ci call.short FIXED, v1, v1 176b1994897Sopenharmony_ci fstarr.64 a0, v2 177b1994897Sopenharmony_ci inci v2, 1 178b1994897Sopenharmony_ci fmovi.64 v1, 0.111906 179b1994897Sopenharmony_ci call.short FIXED, v1, v1 180b1994897Sopenharmony_ci fstarr.64 a0, v2 181b1994897Sopenharmony_ci inci v2, 1 182b1994897Sopenharmony_ci fmovi.64 v1, 0.055953 183b1994897Sopenharmony_ci call.short FIXED, v1, v1 184b1994897Sopenharmony_ci fstarr.64 a0, v2 185b1994897Sopenharmony_ci inci v2, 1 186b1994897Sopenharmony_ci fmovi.64 v1, 0.027977 187b1994897Sopenharmony_ci call.short FIXED, v1, v1 188b1994897Sopenharmony_ci fstarr.64 a0, v2 189b1994897Sopenharmony_ci return.void 190b1994897Sopenharmony_ci} 191