GoToSocial/vendor/github.com/bytedance/sonic/internal/native/neon/validate_utf8_arm64.s

223 lines
7.2 KiB
ArmAsm

// +build !noasm !appengine
// Code generated by asm2asm, DO NOT EDIT.
#include "go_asm.h"
#include "funcdata.h"
#include "textflag.h"
TEXT ·__validate_utf8_entry__(SB), NOSPLIT, $48
NO_LOCAL_POINTERS
WORD $0x100000a0 // adr x0, .+20
MOVD R0, ret(FP)
RET
// .p2align 2, 0x00
_validate_utf8:
WORD $0xd10103ff // sub sp, sp, #64
WORD $0xa901cff4 // stp x20, x19, [sp, #24]
WORD $0xa902fbfd // stp fp, lr, [sp, #40]
WORD $0xa93ffbfd // stp fp, lr, [sp, #-8]
WORD $0xd10023fd // sub fp, sp, #8
WORD $0xa9402408 // ldp x8, x9, [x0]
WORD $0xf940002c // ldr x12, [x1]
WORD $0x8b09010a // add x10, x8, x9
WORD $0xd1000d4b // sub x11, x10, #3
WORD $0x8b0c0109 // add x9, x8, x12
WORD $0xeb0b013f // cmp x9, x11
WORD $0x54000722 // b.hs LBB0_15 $228(%rip)
WORD $0x52981e0c // mov w12, #49392
WORD $0x72a0180c // movk w12, #192, lsl #16
WORD $0x52901c0d // mov w13, #32992
WORD $0x72a0100d // movk w13, #128, lsl #16
WORD $0x9100204e // add x14, x2, #8
WORD $0x528401ef // mov w15, #8207
WORD $0x528401b0 // mov w16, #8205
WORD $0x52981c11 // mov w17, #49376
WORD $0x52901800 // mov w0, #32960
WORD $0x52981f03 // mov w3, #49400
WORD $0x72b81803 // movk w3, #49344, lsl #16
WORD $0x528600e4 // mov w4, #12295
WORD $0x52901e05 // mov w5, #33008
WORD $0x72b01005 // movk w5, #32896, lsl #16
WORD $0x52860066 // mov w6, #12291
WORD $0x14000005 // b LBB0_4 $20(%rip)
LBB0_2:
WORD $0x52800033 // mov w19, #1
LBB0_3:
WORD $0x8b130129 // add x9, x9, x19
WORD $0xeb0b013f // cmp x9, x11
WORD $0x540004a2 // b.hs LBB0_15 $148(%rip)
LBB0_4:
WORD $0x39c00127 // ldrsb w7, [x9]
WORD $0x36ffff67 // tbz w7, #31, LBB0_2 $-20(%rip)
WORD $0xb9400127 // ldr w7, [x9]
WORD $0x0a0c00f3 // and w19, w7, w12
WORD $0x6b0d027f // cmp w19, w13
WORD $0x0a0f00f3 // and w19, w7, w15
WORD $0x7a500264 // ccmp w19, w16, #4, eq
WORD $0x7a401a64 // ccmp w19, #0, #4, ne
WORD $0x54000341 // b.ne LBB0_14 $104(%rip)
WORD $0x0a1100f3 // and w19, w7, w17
WORD $0x121f0cf4 // and w20, w7, #0x1e
WORD $0x6b00027f // cmp w19, w0
WORD $0x7a400a84 // ccmp w20, #0, #4, eq
WORD $0x54000261 // b.ne LBB0_13 $76(%rip)
WORD $0x0a0300f3 // and w19, w7, w3
WORD $0x6b05027f // cmp w19, w5
WORD $0x540000e1 // b.ne LBB0_11 $28(%rip)
WORD $0x0a0400f3 // and w19, w7, w4
WORD $0x340000b3 // cbz w19, LBB0_11 $20(%rip)
WORD $0x52800093 // mov w19, #4
WORD $0x3617fd27 // tbz w7, #2, LBB0_3 $-92(%rip)
WORD $0x0a0600e7 // and w7, w7, w6
WORD $0x34fffce7 // cbz w7, LBB0_3 $-100(%rip)
LBB0_11:
WORD $0xcb080127 // sub x7, x9, x8
WORD $0xf9400053 // ldr x19, [x2]
WORD $0xf140067f // cmp x19, #1, lsl #12
WORD $0x54000c62 // b.hs LBB0_33 $396(%rip)
WORD $0x93407ce7 // sxtw x7, w7
WORD $0x91000674 // add x20, x19, #1
WORD $0xf9000054 // str x20, [x2]
WORD $0xf83379c7 // str x7, [x14, x19, lsl #3]
WORD $0x17ffffdd // b LBB0_2 $-140(%rip)
LBB0_13:
WORD $0x52800053 // mov w19, #2
WORD $0x17ffffdc // b LBB0_3 $-144(%rip)
LBB0_14:
WORD $0x52800073 // mov w19, #3
WORD $0x17ffffda // b LBB0_3 $-152(%rip)
LBB0_15:
WORD $0xeb0a013f // cmp x9, x10
WORD $0x54000962 // b.hs LBB0_31 $300(%rip)
WORD $0x52981e0b // mov w11, #49392
WORD $0x72a0180b // movk w11, #192, lsl #16
WORD $0x52901c0c // mov w12, #32992
WORD $0x72a0100c // movk w12, #128, lsl #16
WORD $0x9100204d // add x13, x2, #8
WORD $0x528401ee // mov w14, #8207
WORD $0x528401af // mov w15, #8205
WORD $0x52981c10 // mov w16, #49376
WORD $0x52901811 // mov w17, #32960
WORD $0x14000004 // b LBB0_18 $16(%rip)
LBB0_17:
WORD $0x91000529 // add x9, x9, #1
WORD $0xeb0a013f // cmp x9, x10
WORD $0x540007c2 // b.hs LBB0_31 $248(%rip)
LBB0_18:
WORD $0x39c00120 // ldrsb w0, [x9]
WORD $0x36ffff80 // tbz w0, #31, LBB0_17 $-16(%rip)
WORD $0x390053ff // strb wzr, [sp, #20]
WORD $0x39004bff // strb wzr, [sp, #18]
WORD $0xcb090145 // sub x5, x10, x9
WORD $0xf10008a7 // subs x7, x5, #2
WORD $0x540001a3 // b.lo LBB0_22 $52(%rip)
WORD $0x39400120 // ldrb w0, [x9]
WORD $0x39400523 // ldrb w3, [x9, #1]
WORD $0x390053e0 // strb w0, [sp, #20]
WORD $0x91000926 // add x6, x9, #2
WORD $0x91004be4 // add x4, sp, #18
WORD $0xaa0703e5 // mov x5, x7
WORD $0xb4000167 // cbz x7, LBB0_23 $44(%rip)
LBB0_21:
WORD $0x394000c0 // ldrb w0, [x6]
WORD $0x39000080 // strb w0, [x4]
WORD $0x394053e0 // ldrb w0, [sp, #20]
WORD $0x39404be4 // ldrb w4, [sp, #18]
WORD $0x14000007 // b LBB0_24 $28(%rip)
LBB0_22:
WORD $0x52800000 // mov w0, #0
WORD $0x52800003 // mov w3, #0
WORD $0x910053e4 // add x4, sp, #20
WORD $0xaa0903e6 // mov x6, x9
WORD $0xb5fffee5 // cbnz x5, LBB0_21 $-36(%rip)
LBB0_23:
WORD $0x52800004 // mov w4, #0
LBB0_24:
WORD $0x53185c63 // lsl w3, w3, #8
WORD $0x2a044063 // orr w3, w3, w4, lsl #16
WORD $0x2a000063 // orr w3, w3, w0
WORD $0x0a0b0064 // and w4, w3, w11
WORD $0x6b0c009f // cmp w4, w12
WORD $0x0a0e0064 // and w4, w3, w14
WORD $0x7a4f0084 // ccmp w4, w15, #4, eq
WORD $0x7a401884 // ccmp w4, #0, #4, ne
WORD $0x54000301 // b.ne LBB0_30 $96(%rip)
WORD $0x721f0c1f // tst w0, #0x1e
WORD $0x54000120 // b.eq LBB0_28 $36(%rip)
WORD $0x0a100060 // and w0, w3, w16
WORD $0x6b11001f // cmp w0, w17
WORD $0x540000c1 // b.ne LBB0_28 $24(%rip)
WORD $0x52800040 // mov w0, #2
WORD $0x8b000129 // add x9, x9, x0
WORD $0xeb0a013f // cmp x9, x10
WORD $0x54fffac3 // b.lo LBB0_18 $-168(%rip)
WORD $0x14000012 // b LBB0_31 $72(%rip)
LBB0_28:
WORD $0xcb080120 // sub x0, x9, x8
WORD $0xf9400043 // ldr x3, [x2]
WORD $0xf140047f // cmp x3, #1, lsl #12
WORD $0x540002a2 // b.hs LBB0_32 $84(%rip)
WORD $0x93407c00 // sxtw x0, w0
WORD $0x91000464 // add x4, x3, #1
WORD $0xf9000044 // str x4, [x2]
WORD $0xf82379a0 // str x0, [x13, x3, lsl #3]
WORD $0x52800020 // mov w0, #1
WORD $0x8b000129 // add x9, x9, x0
WORD $0xeb0a013f // cmp x9, x10
WORD $0x54fff923 // b.lo LBB0_18 $-220(%rip)
WORD $0x14000005 // b LBB0_31 $20(%rip)
LBB0_30:
WORD $0x52800060 // mov w0, #3
WORD $0x8b000129 // add x9, x9, x0
WORD $0xeb0a013f // cmp x9, x10
WORD $0x54fff883 // b.lo LBB0_18 $-240(%rip)
LBB0_31:
WORD $0xd2800000 // mov x0, #0
WORD $0xcb080128 // sub x8, x9, x8
WORD $0xf9000028 // str x8, [x1]
WORD $0xa942fbfd // ldp fp, lr, [sp, #40]
WORD $0xa941cff4 // ldp x20, x19, [sp, #24]
WORD $0x910103ff // add sp, sp, #64
WORD $0xd65f03c0 // ret
LBB0_32:
WORD $0xf9000020 // str x0, [x1]
WORD $0x92800000 // mov x0, #-1
WORD $0xa942fbfd // ldp fp, lr, [sp, #40]
WORD $0xa941cff4 // ldp x20, x19, [sp, #24]
WORD $0x910103ff // add sp, sp, #64
WORD $0xd65f03c0 // ret
LBB0_33:
WORD $0xf9000027 // str x7, [x1]
WORD $0x92800000 // mov x0, #-1
WORD $0xa942fbfd // ldp fp, lr, [sp, #40]
WORD $0xa941cff4 // ldp x20, x19, [sp, #24]
WORD $0x910103ff // add sp, sp, #64
WORD $0xd65f03c0 // ret
// .p2align 2, 0x00
_MASK_USE_NUMBER:
WORD $0x00000002 // .long 2
TEXT ·__validate_utf8(SB), NOSPLIT, $0-32
NO_LOCAL_POINTERS
_entry:
MOVD 16(g), R16
SUB $128, RSP, R17
CMP R16, R17
BLS _stack_grow
_validate_utf8:
MOVD s+0(FP), R0
MOVD p+8(FP), R1
MOVD m+16(FP), R2
MOVD ·_subr__validate_utf8(SB), R11
WORD $0x1000005e // adr x30, .+8
JMP (R11)
MOVD R0, ret+24(FP)
RET
_stack_grow:
MOVD R30, R3
CALL runtime·morestack_noctxt<>(SB)
JMP _entry