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 .function u1 main(){ 15 movi v0, 45000 16 movi v1, 256 17 movi v2, 46080000 18 call test, v0, v1, v2, v0 19 return 20 } 21 22 .function i32 test(i32 a0, i32 a1, i32 a2){ 23 movi v3, 0 #sum 24 movi v4, 0 #loop counter 25 ldai 0 26 loop: 27 movi v5, 0 #loop2_counter 28 jeq a0, loop_exit 29 lda v5 30 loop2: 31 jeq a1, loop2_exit 32 call.short bitsinbyte, v5, v0 33 add2 v3 34 sta v3 35 inci v5, 1 36 lda v5 37 jmp loop2 38 loop2_exit: 39 inci v4, 1 40 lda v4 41 jmp loop 42 loop_exit: 43 lda v3 44 jne a2, assert_err 45 ldai 0 46 return 47 assert_err: 48 ldai 1 49 return 50 } 51 52 .function i32 bitsinbyte(i32 a0){ 53 movi v1, 1 #m 54 movi v2, 0 #c 55 loop: 56 ldai 0x100 57 jle v1, loop_exit 58 and a0, v1 59 jnez if_b 60 endif: 61 lda v1 62 shli 1 63 sta v1 64 jmp loop 65 loop_exit: 66 lda v2 67 return 68 if_b: 69 inci v2, 1 70 jmp endif 71 } 72