github.com/bytedance/sonic@v1.11.7-0.20240517092252-d2edb31b167b/internal/native/neon/validate_utf8_arm64.s (about) 1 // +build !noasm !appengine 2 // Code generated by asm2asm, DO NOT EDIT. 3 4 #include "go_asm.h" 5 #include "funcdata.h" 6 #include "textflag.h" 7 8 TEXT ·__validate_utf8_entry__(SB), NOSPLIT, $48 9 NO_LOCAL_POINTERS 10 WORD $0x100000a0 // adr x0, .+20 11 MOVD R0, ret(FP) 12 RET 13 // .p2align 2, 0x00 14 _validate_utf8: 15 WORD $0xd10103ff // sub sp, sp, #64 16 WORD $0xa901cff4 // stp x20, x19, [sp, #24] 17 WORD $0xa902fbfd // stp fp, lr, [sp, #40] 18 WORD $0xa93ffbfd // stp fp, lr, [sp, #-8] 19 WORD $0xd10023fd // sub fp, sp, #8 20 WORD $0xa9402408 // ldp x8, x9, [x0] 21 WORD $0xf940002c // ldr x12, [x1] 22 WORD $0x8b09010a // add x10, x8, x9 23 WORD $0xd1000d4b // sub x11, x10, #3 24 WORD $0x8b0c0109 // add x9, x8, x12 25 WORD $0xeb0b013f // cmp x9, x11 26 WORD $0x54000722 // b.hs LBB0_15 $228(%rip) 27 WORD $0x52981e0c // mov w12, #49392 28 WORD $0x72a0180c // movk w12, #192, lsl #16 29 WORD $0x52901c0d // mov w13, #32992 30 WORD $0x72a0100d // movk w13, #128, lsl #16 31 WORD $0x9100204e // add x14, x2, #8 32 WORD $0x528401ef // mov w15, #8207 33 WORD $0x528401b0 // mov w16, #8205 34 WORD $0x52981c11 // mov w17, #49376 35 WORD $0x52901800 // mov w0, #32960 36 WORD $0x52981f03 // mov w3, #49400 37 WORD $0x72b81803 // movk w3, #49344, lsl #16 38 WORD $0x528600e4 // mov w4, #12295 39 WORD $0x52901e05 // mov w5, #33008 40 WORD $0x72b01005 // movk w5, #32896, lsl #16 41 WORD $0x52860066 // mov w6, #12291 42 WORD $0x14000005 // b LBB0_4 $20(%rip) 43 LBB0_2: 44 WORD $0x52800033 // mov w19, #1 45 LBB0_3: 46 WORD $0x8b130129 // add x9, x9, x19 47 WORD $0xeb0b013f // cmp x9, x11 48 WORD $0x540004a2 // b.hs LBB0_15 $148(%rip) 49 LBB0_4: 50 WORD $0x39c00127 // ldrsb w7, [x9] 51 WORD $0x36ffff67 // tbz w7, #31, LBB0_2 $-20(%rip) 52 WORD $0xb9400127 // ldr w7, [x9] 53 WORD $0x0a0c00f3 // and w19, w7, w12 54 WORD $0x6b0d027f // cmp w19, w13 55 WORD $0x0a0f00f3 // and w19, w7, w15 56 WORD $0x7a500264 // ccmp w19, w16, #4, eq 57 WORD $0x7a401a64 // ccmp w19, #0, #4, ne 58 WORD $0x54000341 // b.ne LBB0_14 $104(%rip) 59 WORD $0x0a1100f3 // and w19, w7, w17 60 WORD $0x121f0cf4 // and w20, w7, #0x1e 61 WORD $0x6b00027f // cmp w19, w0 62 WORD $0x7a400a84 // ccmp w20, #0, #4, eq 63 WORD $0x54000261 // b.ne LBB0_13 $76(%rip) 64 WORD $0x0a0300f3 // and w19, w7, w3 65 WORD $0x6b05027f // cmp w19, w5 66 WORD $0x540000e1 // b.ne LBB0_11 $28(%rip) 67 WORD $0x0a0400f3 // and w19, w7, w4 68 WORD $0x340000b3 // cbz w19, LBB0_11 $20(%rip) 69 WORD $0x52800093 // mov w19, #4 70 WORD $0x3617fd27 // tbz w7, #2, LBB0_3 $-92(%rip) 71 WORD $0x0a0600e7 // and w7, w7, w6 72 WORD $0x34fffce7 // cbz w7, LBB0_3 $-100(%rip) 73 LBB0_11: 74 WORD $0xcb080127 // sub x7, x9, x8 75 WORD $0xf9400053 // ldr x19, [x2] 76 WORD $0xf140067f // cmp x19, #1, lsl #12 77 WORD $0x54000c62 // b.hs LBB0_33 $396(%rip) 78 WORD $0x93407ce7 // sxtw x7, w7 79 WORD $0x91000674 // add x20, x19, #1 80 WORD $0xf9000054 // str x20, [x2] 81 WORD $0xf83379c7 // str x7, [x14, x19, lsl #3] 82 WORD $0x17ffffdd // b LBB0_2 $-140(%rip) 83 LBB0_13: 84 WORD $0x52800053 // mov w19, #2 85 WORD $0x17ffffdc // b LBB0_3 $-144(%rip) 86 LBB0_14: 87 WORD $0x52800073 // mov w19, #3 88 WORD $0x17ffffda // b LBB0_3 $-152(%rip) 89 LBB0_15: 90 WORD $0xeb0a013f // cmp x9, x10 91 WORD $0x54000962 // b.hs LBB0_31 $300(%rip) 92 WORD $0x52981e0b // mov w11, #49392 93 WORD $0x72a0180b // movk w11, #192, lsl #16 94 WORD $0x52901c0c // mov w12, #32992 95 WORD $0x72a0100c // movk w12, #128, lsl #16 96 WORD $0x9100204d // add x13, x2, #8 97 WORD $0x528401ee // mov w14, #8207 98 WORD $0x528401af // mov w15, #8205 99 WORD $0x52981c10 // mov w16, #49376 100 WORD $0x52901811 // mov w17, #32960 101 WORD $0x14000004 // b LBB0_18 $16(%rip) 102 LBB0_17: 103 WORD $0x91000529 // add x9, x9, #1 104 WORD $0xeb0a013f // cmp x9, x10 105 WORD $0x540007c2 // b.hs LBB0_31 $248(%rip) 106 LBB0_18: 107 WORD $0x39c00120 // ldrsb w0, [x9] 108 WORD $0x36ffff80 // tbz w0, #31, LBB0_17 $-16(%rip) 109 WORD $0x390053ff // strb wzr, [sp, #20] 110 WORD $0x39004bff // strb wzr, [sp, #18] 111 WORD $0xcb090145 // sub x5, x10, x9 112 WORD $0xf10008a7 // subs x7, x5, #2 113 WORD $0x540001a3 // b.lo LBB0_22 $52(%rip) 114 WORD $0x39400120 // ldrb w0, [x9] 115 WORD $0x39400523 // ldrb w3, [x9, #1] 116 WORD $0x390053e0 // strb w0, [sp, #20] 117 WORD $0x91000926 // add x6, x9, #2 118 WORD $0x91004be4 // add x4, sp, #18 119 WORD $0xaa0703e5 // mov x5, x7 120 WORD $0xb4000167 // cbz x7, LBB0_23 $44(%rip) 121 LBB0_21: 122 WORD $0x394000c0 // ldrb w0, [x6] 123 WORD $0x39000080 // strb w0, [x4] 124 WORD $0x394053e0 // ldrb w0, [sp, #20] 125 WORD $0x39404be4 // ldrb w4, [sp, #18] 126 WORD $0x14000007 // b LBB0_24 $28(%rip) 127 LBB0_22: 128 WORD $0x52800000 // mov w0, #0 129 WORD $0x52800003 // mov w3, #0 130 WORD $0x910053e4 // add x4, sp, #20 131 WORD $0xaa0903e6 // mov x6, x9 132 WORD $0xb5fffee5 // cbnz x5, LBB0_21 $-36(%rip) 133 LBB0_23: 134 WORD $0x52800004 // mov w4, #0 135 LBB0_24: 136 WORD $0x53185c63 // lsl w3, w3, #8 137 WORD $0x2a044063 // orr w3, w3, w4, lsl #16 138 WORD $0x2a000063 // orr w3, w3, w0 139 WORD $0x0a0b0064 // and w4, w3, w11 140 WORD $0x6b0c009f // cmp w4, w12 141 WORD $0x0a0e0064 // and w4, w3, w14 142 WORD $0x7a4f0084 // ccmp w4, w15, #4, eq 143 WORD $0x7a401884 // ccmp w4, #0, #4, ne 144 WORD $0x54000301 // b.ne LBB0_30 $96(%rip) 145 WORD $0x721f0c1f // tst w0, #0x1e 146 WORD $0x54000120 // b.eq LBB0_28 $36(%rip) 147 WORD $0x0a100060 // and w0, w3, w16 148 WORD $0x6b11001f // cmp w0, w17 149 WORD $0x540000c1 // b.ne LBB0_28 $24(%rip) 150 WORD $0x52800040 // mov w0, #2 151 WORD $0x8b000129 // add x9, x9, x0 152 WORD $0xeb0a013f // cmp x9, x10 153 WORD $0x54fffac3 // b.lo LBB0_18 $-168(%rip) 154 WORD $0x14000012 // b LBB0_31 $72(%rip) 155 LBB0_28: 156 WORD $0xcb080120 // sub x0, x9, x8 157 WORD $0xf9400043 // ldr x3, [x2] 158 WORD $0xf140047f // cmp x3, #1, lsl #12 159 WORD $0x540002a2 // b.hs LBB0_32 $84(%rip) 160 WORD $0x93407c00 // sxtw x0, w0 161 WORD $0x91000464 // add x4, x3, #1 162 WORD $0xf9000044 // str x4, [x2] 163 WORD $0xf82379a0 // str x0, [x13, x3, lsl #3] 164 WORD $0x52800020 // mov w0, #1 165 WORD $0x8b000129 // add x9, x9, x0 166 WORD $0xeb0a013f // cmp x9, x10 167 WORD $0x54fff923 // b.lo LBB0_18 $-220(%rip) 168 WORD $0x14000005 // b LBB0_31 $20(%rip) 169 LBB0_30: 170 WORD $0x52800060 // mov w0, #3 171 WORD $0x8b000129 // add x9, x9, x0 172 WORD $0xeb0a013f // cmp x9, x10 173 WORD $0x54fff883 // b.lo LBB0_18 $-240(%rip) 174 LBB0_31: 175 WORD $0xd2800000 // mov x0, #0 176 WORD $0xcb080128 // sub x8, x9, x8 177 WORD $0xf9000028 // str x8, [x1] 178 WORD $0xa942fbfd // ldp fp, lr, [sp, #40] 179 WORD $0xa941cff4 // ldp x20, x19, [sp, #24] 180 WORD $0x910103ff // add sp, sp, #64 181 WORD $0xd65f03c0 // ret 182 LBB0_32: 183 WORD $0xf9000020 // str x0, [x1] 184 WORD $0x92800000 // mov x0, #-1 185 WORD $0xa942fbfd // ldp fp, lr, [sp, #40] 186 WORD $0xa941cff4 // ldp x20, x19, [sp, #24] 187 WORD $0x910103ff // add sp, sp, #64 188 WORD $0xd65f03c0 // ret 189 LBB0_33: 190 WORD $0xf9000027 // str x7, [x1] 191 WORD $0x92800000 // mov x0, #-1 192 WORD $0xa942fbfd // ldp fp, lr, [sp, #40] 193 WORD $0xa941cff4 // ldp x20, x19, [sp, #24] 194 WORD $0x910103ff // add sp, sp, #64 195 WORD $0xd65f03c0 // ret 196 // .p2align 2, 0x00 197 _MASK_USE_NUMBER: 198 WORD $0x00000002 // .long 2 199 200 TEXT ·__validate_utf8(SB), NOSPLIT, $0-32 201 NO_LOCAL_POINTERS 202 203 _entry: 204 MOVD 16(g), R16 205 SUB $128, RSP, R17 206 CMP R16, R17 207 BLS _stack_grow 208 209 _validate_utf8: 210 MOVD s+0(FP), R0 211 MOVD p+8(FP), R1 212 MOVD m+16(FP), R2 213 MOVD ·_subr__validate_utf8(SB), R11 214 WORD $0x1000005e // adr x30, .+8 215 JMP (R11) 216 MOVD R0, ret+24(FP) 217 RET 218 219 _stack_grow: 220 MOVD R30, R3 221 CALL runtime·morestack_noctxt<>(SB) 222 JMP _entry