1# Copyright (c) 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# The following comment until the empty line must be a valid YAML document 15# containing exact copies of ISA specification assertions relevant to this test. 16 17.function void fill_i8(i8[] a0, i8 a1) { 18 movi v0, 0x0 19loop: 20 lenarr a0 21 jle v0, exit 22 lda a1 23 starr.8 a0, v0 24 inci v0, 0x1 25 jmp loop 26exit: 27 return.void 28} 29 30.function void fill_i16(i16[] a0, i16 a1) { 31 movi v0, 0x0 32loop: 33 lenarr a0 34 jle v0, exit 35 lda a1 36 starr.16 a0, v0 37 inci v0, 0x1 38 jmp loop 39exit: 40 return.void 41} 42 43.function void fill_i32(i32[] a0, i32 a1) { 44 movi v0, 0x0 45loop: 46 lenarr a0 47 jle v0, exit 48 lda a1 49 starr a0, v0 50 inci v0, 0x1 51 jmp loop 52exit: 53 return.void 54} 55 56.function void fill_i64(i64[] a0, i64 a1) { 57 movi v0, 0x0 58loop: 59 lenarr a0 60 jle v0, exit 61 lda.64 a1 62 starr.64 a0, v0 63 inci v0, 0x1 64 jmp loop 65exit: 66 return.void 67} 68 69.function void fill_f32(f32[] a0, f32 a1) { 70 movi v0, 0x0 71loop: 72 lenarr a0 73 jle v0, exit 74 lda a1 75 fstarr.32 a0, v0 76 inci v0, 0x1 77 jmp loop 78exit: 79 return.void 80} 81 82.function void fill_f64(f64[] a0, f64 a1) { 83 movi v0, 0x0 84loop: 85 lenarr a0 86 jle v0, exit 87 lda.64 a1 88 fstarr.64 a0, v0 89 inci v0, 0x1 90 jmp loop 91exit: 92 return.void 93} 94 95.function i32 validate_i8(i8[] a0, i8 a1) { 96 movi v0, 0x0 97loop: 98 lenarr a0 99 jle v0, exit 100 lda v0 101 ldarr.8 a0 102 jne a1, exit_err 103 inci v0, 0x1 104 jmp loop 105exit: 106 ldai 0 107 return 108exit_err: 109 ldai 1 110 return 111} 112 113.function i32 validate_i16(i16[] a0, i16 a1) { 114 movi v0, 0x0 115loop: 116 lenarr a0 117 jle v0, exit 118 lda v0 119 ldarr.16 a0 120 jne a1, exit_err 121 inci v0, 0x1 122 jmp loop 123exit: 124 ldai 0 125 return 126exit_err: 127 ldai 1 128 return 129} 130 131.function i32 validate_i32(i32[] a0, i32 a1) { 132 movi v0, 0x0 133loop: 134 lenarr a0 135 jle v0, exit 136 lda v0 137 ldarr a0 138 jne a1, exit_err 139 inci v0, 0x1 140 jmp loop 141exit: 142 ldai 0 143 return 144exit_err: 145 ldai 1 146 return 147} 148 149.function i32 validate_i64(i64[] a0, i64 a1) { 150 movi v0, 0x0 151loop: 152 lenarr a0 153 jle v0, exit 154 lda v0 155 ldarr.64 a0 156 cmp.64 a1 157 jnez exit_err 158 inci v0, 0x1 159 jmp loop 160exit: 161 ldai 0 162 return 163exit_err: 164 ldai 1 165 return 166} 167 168.function i32 validate_f32(f32[] a0, f32 a1) { 169 movi v0, 0x0 170loop: 171 lenarr a0 172 jle v0, exit 173 lda v0 174 fldarr.32 a0 175 fcmpl a1 176 jnez exit_err 177 inci v0, 0x1 178 jmp loop 179exit: 180 ldai 0 181 return 182exit_err: 183 ldai 1 184 return 185} 186 187.function i32 validate_f64(f64[] a0, f64 a1) { 188 movi v0, 0x0 189loop: 190 lenarr a0 191 jle v0, exit 192 lda v0 193 fldarr.64 a0 194 fcmpl.64 a1 195 jnez exit_err 196 inci v0, 0x1 197 jmp loop 198exit: 199 ldai 0 200 return 201exit_err: 202 ldai 1 203 return 204} 205.function i32 main() { 206 movi v0, 1024 207 movi v1, 0 208 newarr v2, v0, i8[] 209 movi v3, 42 210 call.short fill_i8, v2, v3 211 call.short validate_i8, v2, v3 212 jne v1, error_1 213 214 newarr v2, v0, i16[] 215 call.short fill_i16, v2, v3 216 call.short validate_i16, v2, v3 217 jne v1, error_2 218 219 newarr v2, v0, i32[] 220 call.short fill_i32, v2, v3 221 call.short validate_i32, v2, v3 222 jne v1, error_3 223 224 newarr v2, v0, i64[] 225 movi.64 v3, 42 226 call.short fill_i64, v2, v3 227 call.short validate_i64, v2, v3 228 jne v1, error_4 229 230 newarr v2, v0, f32[] 231 fmovi v3, 42 232 call.short fill_f32, v2, v3 233 call.short validate_f32, v2, v3 234 jne v1, error_5 235 236 newarr v2, v0, f64[] 237 fmovi.64 v3, 42 238 call.short fill_f64, v2, v3 239 call.short validate_f64, v2, v3 240 jne v1, error_6 241 242 ldai 0 243 return 244error_1: 245 ldai 1 246 return 247error_2: 248 ldai 2 249 return 250error_3: 251 ldai 3 252 return 253error_4: 254 ldai 4 255 return 256error_5: 257 ldai 5 258 return 259error_6: 260 ldai 6 261 return 262}