1# Copyright (c) 2021-2024 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# (a0 << 21) + a1 15.function i32 addv_shlv_i32(i32 a0, i32 a1) <static> { 16 movi v0, 21 17 lda a0 18 shl2v v0, v0 19 lda v0 20 add2v v0, a1 21 lda v0 22 return 23} 24# (a0 >>> 21) + a1 25.function i32 addv_shrv_i32(i32 a0, i32 a1) <static> { 26 movi v0, 21 27 lda a0 28 shr2v v0, v0 29 lda v0 30 add2v v0, a1 31 lda v0 32 return 33} 34# (a0 >> 21) + a1 35.function i32 addv_ashrv_i32(i32 a0, i32 a1) <static> { 36 movi v0, 21 37 lda a0 38 ashr2v v0, v0 39 lda v0 40 add2v v0, a1 41 lda v0 42 return 43} 44# a1 + (a0 << 21) 45.function i32 addv_shlv_i32_2(i32 a0, i32 a1) <static> { 46 movi v0, 21 47 lda a0 48 shl2v v0, v0 49 lda a1 50 add2v v0, v0 51 lda v0 52 return 53} 54# a1 + (a0 >>> 21) 55.function i32 addv_shrv_i32_2(i32 a0, i32 a1) <static> { 56 movi v0, 21 57 lda a0 58 shr2v v0, v0 59 lda a1 60 add2v v0, v0 61 lda v0 62 return 63} 64# a1 + (a0 >> 21) 65.function i32 addv_ashrv_i32_2(i32 a0, i32 a1) <static> { 66 movi v0, 21 67 lda a0 68 ashr2v v0, v0 69 lda a1 70 add2v v0, v0 71 lda v0 72 return 73} 74# (a0 << 42) + a1 75.function i64 addv_shlv_i64(i64 a0, i64 a1) <static> { 76 movi.64 v0, 42 77 lda.64 a0 78 shl2v.64 v0, v0 79 lda.64 v0 80 add2v.64 v0, a1 81 lda.64 v0 82 return.64 83} 84# (a0 >>> 42) + a1 85.function i64 addv_shrv_i64(i64 a0, i64 a1) <static> { 86 movi.64 v0, 42 87 lda.64 a0 88 shr2v.64 v0, v0 89 lda.64 v0 90 add2v.64 v0, a1 91 lda.64 v0 92 return.64 93} 94# (a0 >> 42) + a1 95.function i64 addv_ashrv_i64(i64 a0, i64 a1) <static> { 96 movi.64 v0, 42 97 lda.64 a0 98 ashr2v.64 v0, v0 99 lda.64 v0 100 add2v.64 v0, a1 101 lda.64 v0 102 return.64 103} 104# a1 + (a0 << 42) 105.function i64 addv_shlv_i64_2(i64 a0, i64 a1) <static> { 106 movi.64 v0, 42 107 lda.64 a0 108 shl2v.64 v0, v0 109 lda.64 a1 110 add2v.64 v0, v0 111 lda.64 v0 112 return.64 113} 114# a1 + (a0 >>> 42) 115.function i64 addv_shrv_i64_2(i64 a0, i64 a1) <static> { 116 movi.64 v0, 42 117 lda.64 a0 118 shr2v.64 v0, v0 119 lda.64 a1 120 add2v.64 v0, v0 121 lda.64 v0 122 return.64 123} 124# a1 + (a0 >> 42) 125.function i64 addv_ashrv_i64_2(i64 a0, i64 a1) <static> { 126 movi.64 v0, 42 127 lda.64 a0 128 ashr2v.64 v0, v0 129 lda.64 a1 130 add2v.64 v0, v0 131 lda.64 v0 132 return.64 133} 134 135.function i32 main() <static> { 136 movi v0, 21 137 ldai 257949696 138 shr2 v0 139 sta v0 140 movi v1, 321 141 call.short addv_shlv_i32, v0, v1 142 movi v0, 257950017 143 jne v0, exit_error_0 144 movi v0, 21 145 ldai 123 146 shl2 v0 147 sta v0 148 movi v1, 321 149 call.short addv_shrv_i32, v0, v1 150 movi v0, 444 151 jne v0, exit_error_1 152 movi v0, 21 153 ldai -1 154 shl2 v0 155 sta v0 156 movi v1, 321 157 call.short addv_ashrv_i32, v0, v1 158 movi v0, 320 159 jne v0, exit_error_2 160 movi v0, 21 161 ldai 257949696 162 shr2 v0 163 sta v0 164 movi v1, 321 165 call.short addv_shlv_i32_2, v0, v1 166 movi v0, 257950017 167 jne v0, exit_error_3 168 movi v0, 21 169 ldai 123 170 shl2 v0 171 sta v0 172 movi v1, 321 173 call.short addv_shrv_i32_2, v0, v1 174 movi v0, 444 175 jne v0, exit_error_4 176 movi v0, 21 177 ldai -1 178 shl2 v0 179 sta v0 180 movi v1, 321 181 call.short addv_ashrv_i32_2, v0, v1 182 movi v0, 320 183 jne v0, exit_error_5 184 movi.64 v0, 42 185 ldai.64 540959720865792 186 shr2.64 v0 187 sta.64 v0 188 movi.64 v1, 321 189 call.short addv_shlv_i64, v0, v1 190 movi.64 v0, 540959720866113 191 cmp.64 v0 192 jnez exit_error_6 193 movi.64 v0, 42 194 ldai.64 123 195 shl2.64 v0 196 sta.64 v0 197 movi.64 v1, 321 198 call.short addv_shrv_i64, v0, v1 199 movi.64 v0, 444 200 cmp.64 v0 201 jnez exit_error_7 202 movi.64 v0, 42 203 ldai.64 -1 204 shl2.64 v0 205 sta.64 v0 206 movi.64 v1, 321 207 call.short addv_ashrv_i64, v0, v1 208 movi.64 v0, 320 209 cmp.64 v0 210 jnez exit_error_8 211 movi.64 v0, 42 212 ldai.64 540959720865792 213 shr2.64 v0 214 sta.64 v0 215 movi.64 v1, 321 216 call.short addv_shlv_i64_2, v0, v1 217 movi.64 v0, 540959720866113 218 cmp.64 v0 219 jnez exit_error_9 220 movi.64 v0, 42 221 ldai.64 123 222 shl2.64 v0 223 sta.64 v0 224 movi.64 v1, 321 225 call.short addv_shrv_i64_2, v0, v1 226 movi.64 v0, 444 227 cmp.64 v0 228 jnez exit_error_10 229 movi.64 v0, 42 230 ldai.64 -1 231 shl2.64 v0 232 sta.64 v0 233 movi.64 v1, 321 234 call.short addv_ashrv_i64_2, v0, v1 235 movi.64 v0, 320 236 cmp.64 v0 237 jnez exit_error_11 238 ldai 0 239 return 240exit_error_0: 241 ldai 1 242 return 243exit_error_1: 244 ldai 2 245 return 246exit_error_2: 247 ldai 3 248 return 249exit_error_3: 250 ldai 4 251 return 252exit_error_4: 253 ldai 5 254 return 255exit_error_5: 256 ldai 6 257 return 258exit_error_6: 259 ldai 7 260 return 261exit_error_7: 262 ldai 8 263 return 264exit_error_8: 265 ldai 9 266 return 267exit_error_9: 268 ldai 10 269 return 270exit_error_10: 271 ldai 11 272 return 273exit_error_11: 274 ldai 12 275 return 276} 277