Lines Matching +full:4 +full:- +full:16

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
24 mov x13, #-1 // save constants for later
29 * into unmapped page. If so, we load 16 bytes from the nearest
33 add x3, x0, #16 // end of head
34 add x4, x1, #16
38 cmp x2,#16
50 cmeq v5.16b, v0.16b, #0
51 cmeq v6.16b, v1.16b, #0
53 shrn v5.8b, v5.8h, #4
54 shrn v6.8b, v6.8h, #4
66 tbl v0.16b, {v0.16b}, v4.16b
69 .p2align 4
77 tbl v4.16b, {v1.16b}, v4.16b
81 .p2align 4
87 cmeq v2.16b, v0.16b, #0 // NUL byte present?
88 cmeq v4.16b, v0.16b, v4.16b // which bytes match?
90 orn v2.16b, v2.16b, v4.16b // mismatch or NUL byte?
92 shrn v2.8b, v2.8h, #4
97 ldr q2, [x8, #16] // load second chunk
98 ldr q3, [x10, #16]
101 sub x2, x2, #16
107 .p2align 4
111 * into unmapped page. If so, we load 16 bytes from the nearest
132 cmeq v5.16b, v0.16b, #0
133 cmeq v6.16b, v1.16b, #0
135 shrn v5.8b, v5.8h, #4
136 shrn v6.8b, v6.8h, #4
151 tbl v0.16b, {v0.16b}, v4.16b
154 .p2align 4
162 tbl v4.16b, {v1.16b}, v4.16b
166 .p2align 4
173 cmeq v2.16b, v0.16b, #0 // NUL byte present?
174 cmeq v4.16b, v0.16b, v4.16b // which bytes match?
176 bic v2.16b, v4.16b, v2.16b // match and not NUL byte
178 shrn v2.8b, v2.8h, #4
193 .p2align 4
196 ldr q0, [x12, #16]!
200 cmeq v1.16b, v3.16b, #0 // NUL present?
201 cmeq v0.16b, v0.16b, v2.16b // Mismatch between chunks?
202 shrn v1.8b, v1.8h, #4
203 shrn v0.8b, v0.8h, #4
212 cmp x2, #16 // does the buffer end within x2
217 sub x2, x2, #16
223 * v ------1------ v ------2------ v
234 .p2align 4
240 cmeq v1.16b, v1.16b, #0 // end of string?
241 cmeq v0.16b, v0.16b, v2.16b // do the chunks match?
243 shrn v1.8b, v1.8h, #4
244 shrn v0.8b, v0.8h, #4
251 add x8, x8, #16
258 add x8, x8, #16
259 cmeq v1.16b, v1.16b, #0
260 cmeq v0.16b, v0.16b, v2.16b
262 shrn v1.8b, v1.8h, #4
263 shrn v0.8b, v0.8h, #4
279 cmeq v1.16b, v1.16b, #0 // end of string?
280 cmeq v0.16b, v0.16b, v2.16b // do the chunks match?
282 shrn v1.8b, v1.8h, #4
283 shrn v0.8b, v0.8h, #4
288 * If x2 <= 16 then we introduce a NUL byte in the
295 cmp x2, #16 // does the buffer end within x2
302 add x8, x8, #16
309 add x8, x8, #16
310 cmeq v1.16b, v1.16b, #0
311 cmeq v0.16b, v0.16b, v2.16b
313 shrn v1.8b, v1.8h, #4
314 shrn v0.8b, v0.8h, #4
318 ubfiz x4, x2, #2, #4 // (x2 - 16) << 2
323 sub x8, x8, #16
328 ubfiz x7, x9, #2, #4
342 cmeq v1.16b, v0.16b, v1.16b
343 shrn v1.8b, v1.8h, #4
360 .p2align 4
362 sub x8, x8, #16 // roll back second increment
379 .p2align 4
382 ldr q0, [x12, #16]!
388 cmeq v1.16b, v2.16b, #0
389 cmeq v0.16b, v0.16b, v3.16b
390 shrn v1.8b, v1.8h, #4
391 shrn v0.8b, v0.8h, #4
400 cmp x2,#16
406 sub x2, x2, #16
413 * v ------1------ v ------2------ v
424 .p2align 4
430 cmeq v1.16b, v1.16b, #0
431 cmeq v0.16b, v0.16b, v2.16b
433 shrn v1.8b, v1.8h, #4
434 shrn v0.8b, v0.8h, #4
441 add x10, x10, #16
448 add x10, x10, #16
449 cmeq v1.16b, v1.16b, #0
450 cmeq v0.16b, v0.16b, v2.16b
452 shrn v1.8b, v1.8h, #4
453 shrn v0.8b, v0.8h, #4
468 cmeq v1.16b, v1.16b, #0
469 cmeq v0.16b, v0.16b, v2.16b
471 shrn v1.8b, v1.8h, #4
472 shrn v0.8b, v0.8h, #4
477 * If x2 <= 16 then we introduce a NUL byte in the
484 cmp x2, #16
491 add x10, x10, #16
497 add x10, x10, #16
498 cmeq v1.16b, v1.16b, #0
499 cmeq v0.16b, v0.16b, v2.16b
501 shrn v1.8b, v1.8h, #4
502 shrn v0.8b, v0.8h, #4
506 ubfiz x4, x2, #2, #4
511 sub x10, x10, #16
515 ubfiz x7, x9, #2, #4
525 cmeq v1.16b, v0.16b, v1.16b
526 shrn v1.8b, v1.8h, #4
543 .p2align 4
545 sub x10, x10, #16
557 .p2align 4
565 .p2align 4
567 .byte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
568 .fill 16, 1, -1
569 .size shift_data, .-shift_data