From 5cb6f179446d4adc729cd641f1ebe42809ca7e08 Mon Sep 17 00:00:00 2001 From: chenzhuoyu Date: Thu, 1 Jul 2021 21:29:31 +0800 Subject: [PATCH] feat: performance optimizations --- Makefile | 4 +- decoder/assembler_amd64.go | 41 +- decoder/generic_amd64.go | 52 +- encoder/assembler_amd64.go | 211 +- encoder/assembler_test.go | 13 + encoder/encoder.go | 2 +- encoder/primitives.go | 140 +- encoder/utils.go | 5 + internal/native/avx/native_amd64.go | 14 +- internal/native/avx/native_amd64.s | 6737 +++++++++-------- internal/native/avx/native_amd64_test.go | 49 + internal/native/avx/native_export_amd64.go | 4 +- internal/native/avx/native_subr_amd64.go | 30 +- internal/native/avx2/native_amd64.go | 14 +- internal/native/avx2/native_amd64.s | 7510 ++++++++++--------- internal/native/avx2/native_amd64_test.go | 49 + internal/native/avx2/native_export_amd64.go | 4 +- internal/native/avx2/native_subr_amd64.go | 30 +- internal/native/dispatch_amd64.go | 26 +- internal/native/dispatch_amd64.s | 18 +- internal/native/native_amd64.tmpl | 14 +- internal/native/native_amd64_test.tmpl | 49 + internal/native/native_export_amd64.tmpl | 4 +- native/fastbytes.c | 531 +- native/fastint.c | 32 - native/native.h | 10 +- native/parsing.c | 296 +- native/scanning.c | 681 +- tools/asm2asm | 2 +- 29 files changed, 8937 insertions(+), 7635 deletions(-) diff --git a/Makefile b/Makefile index 9ca68a9..5ee5fb2 100644 --- a/Makefile +++ b/Makefile @@ -25,8 +25,8 @@ CPU_avx2 := amd64 TMPL_avx := fastint_amd64_test fastfloat_amd64_test native_amd64_test native_export_amd64 TMPL_avx2 := fastint_amd64_test fastfloat_amd64_test native_amd64_test native_export_amd64 -CFLAGS_avx := -msse2 -mavx -mno-avx2 -DUSE_SSE=1 -DUSE_AVX=1 -DUSE_AVX2=0 -CFLAGS_avx2 := -msse2 -mavx -mavx2 -DUSE_SSE=1 -DUSE_AVX=1 -DUSE_AVX2=1 +CFLAGS_avx := -msse4 -mavx -mno-avx2 -DUSE_AVX=1 -DUSE_AVX2=0 +CFLAGS_avx2 := -msse4 -mavx -mavx2 -DUSE_AVX=1 -DUSE_AVX2=1 CC_amd64 := clang ASM2ASM_amd64 := tools/asm2asm/asm2asm.py diff --git a/decoder/assembler_amd64.go b/decoder/assembler_amd64.go index f0614a0..7cf3edb 100644 --- a/decoder/assembler_amd64.go +++ b/decoder/assembler_amd64.go @@ -80,6 +80,10 @@ const ( _IM_alse = 0x65736c61 // 'alse' ('false' without the 'f') ) +const ( + _BM_space = (1 << ' ') | (1 << '\t') | (1 << '\r') | (1 << '\n') +) + const ( _LB_error = "_error" _LB_im_error = "_im_error" @@ -1318,15 +1322,34 @@ func (self *_Assembler) _asm_OP_unmarshal_text_p(p *_Instr) { } func (self *_Assembler) _asm_OP_lspace(_ *_Instr) { - self.Emit("MOVQ" , _IP, _DI) // MOVQ IP, DI - self.Emit("MOVQ" , _IL, _SI) // MOVQ IL, SI - self.Emit("MOVQ" , _IC, _DX) // MOVQ IC, DX - self.call(_F_lspace) // CALL lspace - self.Emit("TESTQ", _AX, _AX) // TESTQ AX, AX - self.Sjmp("JS" , _LB_parsing_error_v) // JS _parsing_error_v - self.Emit("CMPQ" , _AX, _IL) // CMPQ AX, IL - self.Sjmp("JAE" , _LB_eof_error) // JAE _eof_error - self.Emit("MOVQ" , _AX, _IC) // MOVQ AX, IC + self.Emit("CMPQ" , _IC, _IL) // CMPQ IC, IL + self.Sjmp("JAE" , _LB_eof_error) // JAE _eof_error + self.Emit("MOVQ" , jit.Imm(_BM_space), _DX) // MOVQ _BM_space, DX + self.Emit("MOVBQZX", jit.Sib(_IP, _IC, 1, 0), _AX) // MOVBQZX (IP)(IC), AX + self.Emit("BTQ" , _AX, _DX) // BTQ AX, DX + self.Sjmp("JNC" , "_nospace_{n}") // JNC _nospace_{n} + + /* test up to 4 characters */ + for i := 0; i < 3; i++ { + self.Emit("ADDQ" , jit.Imm(1), _IC) // ADDQ $1, IC + self.Emit("CMPQ" , _IC, _IL) // CMPQ IC, IL + self.Sjmp("JAE" , _LB_eof_error) // JAE _eof_error + self.Emit("MOVBQZX", jit.Sib(_IP, _IC, 1, 0), _AX) // MOVBQZX (IP)(IC), AX + self.Emit("BTQ" , _AX, _DX) // BTQ AX, DX + self.Sjmp("JNC" , "_nospace_{n}") // JNC _nospace_{n} + } + + /* handle over to the native function */ + self.Emit("MOVQ" , _IP, _DI) // MOVQ IP, DI + self.Emit("MOVQ" , _IL, _SI) // MOVQ IL, SI + self.Emit("MOVQ" , _IC, _DX) // MOVQ IC, DX + self.call(_F_lspace) // CALL lspace + self.Emit("TESTQ" , _AX, _AX) // TESTQ AX, AX + self.Sjmp("JS" , _LB_parsing_error_v) // JS _parsing_error_v + self.Emit("CMPQ" , _AX, _IL) // CMPQ AX, IL + self.Sjmp("JAE" , _LB_eof_error) // JAE _eof_error + self.Emit("MOVQ" , _AX, _IC) // MOVQ AX, IC + self.Link("_nospace_{n}") // _nospace_{n}: } func (self *_Assembler) _asm_OP_match_char(p *_Instr) { diff --git a/decoder/generic_amd64.go b/decoder/generic_amd64.go index 7428381..f9bc32d 100644 --- a/decoder/generic_amd64.go +++ b/decoder/generic_amd64.go @@ -119,10 +119,6 @@ const ( _S_vmask = (1 << _S_val) | (1 << _S_arr_0) ) -const ( - _X_space = (1 << ' ') | (1 << '\t') | (1 << '\r') | (1 << '\n') -) - const ( _A_init_len = 1 _A_init_cap = 16 @@ -206,11 +202,11 @@ func (self *_ValueDecoder) compile() { self.Emit("TESTQ", _AX, _AX) // TESTQ AX, AX self.Sjmp("JS" , "_return") // JS _return - /* fast path: no-space or 1-space cases */ + /* fast path: test up to 4 characters manually */ self.Emit("CMPQ" , _IC, _IL) // CMPQ IC, IL self.Sjmp("JAE" , "_decode_V_EOF") // JAE _decode_V_EOF self.Emit("MOVBQZX", jit.Sib(_IP, _IC, 1, 0), _AX) // MOVBQZX (IP)(IC), AX - self.Emit("MOVQ" , jit.Imm(_X_space), _DX) // MOVQ _X_space, DX + self.Emit("MOVQ" , jit.Imm(_BM_space), _DX) // MOVQ _BM_space, DX self.Emit("BTQ" , _AX, _DX) // BTQ _AX, _DX self.Sjmp("JNC" , "_decode_fast") // JNC _decode_fast @@ -219,6 +215,33 @@ func (self *_ValueDecoder) compile() { self.Emit("CMPQ" , _IC, _IL) // CMPQ IC, IL self.Sjmp("JAE" , "_decode_V_EOF") // JAE _decode_V_EOF self.Emit("MOVBQZX", jit.Sib(_IP, _IC, 1, 0), _AX) // MOVBQZX (IP)(IC), AX + self.Emit("MOVQ" , jit.Imm(_BM_space), _DX) // MOVQ _BM_space, DX + self.Emit("BTQ" , _AX, _DX) // BTQ _AX, _DX + self.Sjmp("JNC" , "_decode_fast") // JNC _decode_fast + + /* 2-space case */ + self.Emit("ADDQ" , jit.Imm(1), _IC) // ADDQ $1, IC + self.Emit("CMPQ" , _IC, _IL) // CMPQ IC, IL + self.Sjmp("JAE" , "_decode_V_EOF") // JAE _decode_V_EOF + self.Emit("MOVBQZX", jit.Sib(_IP, _IC, 1, 0), _AX) // MOVBQZX (IP)(IC), AX + self.Emit("MOVQ" , jit.Imm(_BM_space), _DX) // MOVQ _BM_space, DX + self.Emit("BTQ" , _AX, _DX) // BTQ _AX, _DX + self.Sjmp("JNC" , "_decode_fast") // JNC _decode_fast + + /* 3-space case */ + self.Emit("ADDQ" , jit.Imm(1), _IC) // ADDQ $1, IC + self.Emit("CMPQ" , _IC, _IL) // CMPQ IC, IL + self.Sjmp("JAE" , "_decode_V_EOF") // JAE _decode_V_EOF + self.Emit("MOVBQZX", jit.Sib(_IP, _IC, 1, 0), _AX) // MOVBQZX (IP)(IC), AX + self.Emit("MOVQ" , jit.Imm(_BM_space), _DX) // MOVQ _BM_space, DX + self.Emit("BTQ" , _AX, _DX) // BTQ _AX, _DX + self.Sjmp("JNC" , "_decode_fast") // JNC _decode_fast + + /* 4-space case */ + self.Emit("ADDQ" , jit.Imm(1), _IC) // ADDQ $1, IC + self.Emit("CMPQ" , _IC, _IL) // CMPQ IC, IL + self.Sjmp("JAE" , "_decode_V_EOF") // JAE _decode_V_EOF + self.Emit("MOVBQZX", jit.Sib(_IP, _IC, 1, 0), _AX) // MOVBQZX (IP)(IC), AX /* fast path: use lookup table to select decoder */ self.Link("_decode_fast") // _decode_fast: @@ -232,14 +255,14 @@ func (self *_ValueDecoder) compile() { self.Rjmp("JMP" , _AX) // JMP AX /* decode with native decoder */ - self.Link("_decode_native") // _decode_native: - self.Emit("MOVQ", _IP, _DI) // MOVQ IP, DI - self.Emit("MOVQ", _IL, _SI) // MOVQ IL, SI - self.Emit("MOVQ", _IC, _DX) // MOVQ IC, DX - self.Emit("LEAQ", _VAR_ss, _CX) // LEAQ ss, CX - self.Emit("MOVL", jit.Imm(1), _R8) // MOVL $1, R8 - self.call(_F_value) // CALL value - self.Emit("MOVQ", _AX, _IC) // MOVQ AX, IC + self.Link("_decode_native") // _decode_native: + self.Emit("MOVQ", _IP, _DI) // MOVQ IP, DI + self.Emit("MOVQ", _IL, _SI) // MOVQ IL, SI + self.Emit("MOVQ", _IC, _DX) // MOVQ IC, DX + self.Emit("LEAQ", _VAR_ss, _CX) // LEAQ ss, CX + self.Emit("MOVL", jit.Imm(1), _R8) // MOVL $1, R8 + self.call(_F_value) // CALL value + self.Emit("MOVQ", _AX, _IC) // MOVQ AX, IC /* check for errors */ self.Emit("MOVQ" , _VAR_ss_Vt, _AX) // MOVQ ss.Vt, AX @@ -565,6 +588,7 @@ func (self *_ValueDecoder) compile() { /* return from decoder */ self.Link("_return") // _return: self.Emit("XORL", _EP, _EP) // XORL EP, EP + self.Emit("MOVQ", _EP, jit.Ptr(_ST, _ST_Vp)) // MOVQ EP, ST.Vp[0] self.Link("_epilogue") // _epilogue: self.Emit("SUBQ", jit.Imm(_FsmOffset), _ST) // SUBQ _FsmOffset, _ST self.Emit("MOVQ", jit.Ptr(_SP, _VD_offs), _BP) // MOVQ _VD_offs(SP), BP diff --git a/encoder/assembler_amd64.go b/encoder/assembler_amd64.go index 47b178d..a263c2b 100644 --- a/encoder/assembler_amd64.go +++ b/encoder/assembler_amd64.go @@ -23,8 +23,8 @@ import ( `sync` `unsafe` - `github.com/bytedance/sonic/internal/cpu` `github.com/bytedance/sonic/internal/jit` + `github.com/bytedance/sonic/internal/native/types` `github.com/twitchyliquid64/golang-asm/obj` `github.com/twitchyliquid64/golang-asm/obj/x86` @@ -68,13 +68,14 @@ const ( ) const ( - _FP_args = 40 // 40 bytes for passing arguments to this function - _FP_fargs = 64 // 64 bytes for passing arguments to other Go functions - _FP_saves = 64 // 64 bytes for saving the registers before CALL instructions + _FP_args = 40 // 40 bytes for passing arguments to this function + _FP_fargs = 64 // 64 bytes for passing arguments to other Go functions + _FP_saves = 64 // 64 bytes for saving the registers before CALL instructions + _FP_locals = 16 // 16 bytes for local variables ) const ( - _FP_offs = _FP_fargs + _FP_saves + _FP_offs = _FP_fargs + _FP_saves + _FP_locals _FP_size = _FP_offs + 8 // 8 bytes for the parent frame pointer _FP_base = _FP_size + 8 // 8 bytes for the return address ) @@ -118,11 +119,6 @@ var ( var ( _X0 = jit.Reg("X0") _Y0 = jit.Reg("Y0") - _Y1 = jit.Reg("Y1") - _Y2 = jit.Reg("Y2") - _Y3 = jit.Reg("Y3") - _Y4 = jit.Reg("Y4") - _Y5 = jit.Reg("Y5") ) var ( @@ -156,6 +152,11 @@ var ( _RET_ep = jit.Ptr(_SP, _FP_base + 32) ) +var ( + _VAR_sp = jit.Ptr(_SP, _FP_fargs + _FP_saves) + _VAR_dn = jit.Ptr(_SP, _FP_fargs + _FP_saves + 8) +) + var ( _REG_ffi = []obj.Addr{_RP, _RL, _RC} _REG_enc = []obj.Addr{_ST, _SP_x, _SP_f, _SP_p, _SP_q} @@ -380,13 +381,17 @@ func (self *_Assembler) check_size_rl(v obj.Addr) { /* check for buffer capacity */ self.x++ - self.Emit("LEAQ", v, _AX) // LEAQ $v, AX - self.Emit("CMPQ", _AX, _RC) // CMPQ AX, RC - self.Sjmp("JBE" , key) // JBE _more_space_return_{n} + self.Emit("LEAQ", v, _AX) // LEAQ $v, AX + self.Emit("CMPQ", _AX, _RC) // CMPQ AX, RC + self.Sjmp("JBE" , key) // JBE _more_space_return_{n} + self.slice_grow_ax(key) // GROW $key + self.Link(key) // _more_space_return_{n}: +} + +func (self *_Assembler) slice_grow_ax(ret string) { self.Byte(0x4c, 0x8d, 0x0d) // LEAQ ?(PC), R9 - self.Sref(key, 4) // .... &key + self.Sref(ret, 4) // .... &ret self.Sjmp("JMP" , _LB_more_space) // JMP _more_space - self.Link(key) // _more_space_return_{n}: } /** State Stack Helpers **/ @@ -433,6 +438,11 @@ func (self *_Assembler) add_long(ch uint32, n int64) { self.Emit("ADDQ", jit.Imm(n), _RL) // ADDQ $n, RL } +func (self *_Assembler) add_text(ss string) { + self.store_str(ss) // TEXT $ss + self.Emit("ADDQ", jit.Imm(int64(len(ss))), _RL) // ADDQ ${len(ss)}, RL +} + func (self *_Assembler) prep_buffer() { self.Emit("MOVQ", _ARG_rb, _AX) // MOVQ rb<>+0(FP), AX self.Emit("MOVQ", _RL, jit.Ptr(_AX, 8)) // MOVQ RL, 8(AX) @@ -602,7 +612,16 @@ func (self *_Assembler) error_nan_or_infinite() { /** String Encoding Routine **/ -func (self *_Assembler) open_quote(doubleQuote bool) { +var ( + _F_quote = jit.Imm(int64(native.S_quote)) +) + +func (self *_Assembler) encode_string(doubleQuote bool) { + self.Emit("MOVQ" , jit.Ptr(_SP_p, 8), _AX) // MOVQ 8(SP.p), AX + self.Emit("TESTQ", _AX, _AX) // TESTQ AX, AX + self.Sjmp("JZ" , "_str_empty_{n}") // JZ _str_empty_{n} + + /* openning quote, check for double quote */ if !doubleQuote { self.check_size_r(_AX, 2) // SIZE $2 self.add_char('"') // CHAR $'"' @@ -610,46 +629,69 @@ func (self *_Assembler) open_quote(doubleQuote bool) { self.check_size_r(_AX, 6) // SIZE $6 self.add_long(_IM_open, 3) // TEXT $`"\"` } -} -func (self *_Assembler) close_quote(doubleQuote bool) { + /* quoting loop */ + self.Emit("XORL", _AX, _AX) // XORL AX, AX + self.Emit("MOVQ", _AX, _VAR_sp) // MOVQ AX, sp + self.Link("_str_loop_{n}") // _str_loop_{n}: + self.save_c() // SAVE $REG_ffi + + /* load the output buffer first, and then input buffer, + * because the parameter registers collide with RP / RL / RC */ + self.Emit("MOVQ", _RC, _CX) // MOVQ RC, CX + self.Emit("SUBQ", _RL, _CX) // SUBQ RL, CX + self.Emit("MOVQ", _CX, _VAR_dn) // MOVQ CX, dn + self.Emit("LEAQ", jit.Sib(_RP, _RL, 1, 0), _DX) // LEAQ (RP)(RL), DX + self.Emit("LEAQ", _VAR_dn, _CX) // LEAQ dn, CX + self.Emit("MOVQ", _VAR_sp, _AX) // MOVQ sp, AX + self.Emit("MOVQ", jit.Ptr(_SP_p, 0), _DI) // MOVQ (SP.p), DI + self.Emit("MOVQ", jit.Ptr(_SP_p, 8), _SI) // MOVQ 8(SP.p), SI + self.Emit("ADDQ", _AX, _DI) // ADDQ AX, DI + self.Emit("SUBQ", _AX, _SI) // SUBQ AX, SI + + /* set the flags based on `doubleQuote` */ if !doubleQuote { - self.check_size(1) // SIZE $1 - self.Link("_str_end_{n}") // _str_end_{n}: - self.add_char('"') // CHAR $'"' + self.Emit("XORL", _R8, _R8) // XORL R8, R8 + } else { + self.Emit("MOVL", jit.Imm(types.F_DOUBLE_UNQUOTE), _R8) // MOVL ${types.F_DOUBLE_UNQUOTE}, R8 + } + + /* call the native quoter */ + self.call_c(_F_quote) // CALL quote + self.Emit("ADDQ" , _VAR_dn, _RL) // ADDQ dn, RL + self.Emit("TESTQ", _AX, _AX) // TESTQ AX, AX + self.Sjmp("JS" , "_str_space_{n}") // JS _str_space_{n} + + /* close the string, check for double quote */ + if !doubleQuote { + self.check_size(1) // SIZE $1 + self.add_char('"') // CHAR $'"' + self.Sjmp("JMP", "_str_end_{n}") // JMP _str_end_{n} } else { self.check_size(3) // SIZE $3 - self.Link("_str_end_{n}") // _str_end_{n}: - self.store_str(`\""`) // TEXT $`\""` - self.Emit("ADDQ", jit.Imm(3), _RL) // ADDQ $3, RL + self.add_text("\\\"\"") // TEXT $'\""' + self.Sjmp("JMP", "_str_end_{n}") // JMP _str_end_{n} } -} -func (self *_Assembler) encode_string(fn obj.Addr, doubleQuote bool) { - self.Emit("MOVQ" , jit.Ptr(_SP_p, 8), _AX) // MOVQ 8(SP.p), AX - self.open_quote(doubleQuote) // QOPEN $doubleQuote - self.Emit("CMPQ" , jit.Ptr(_SP_p, 8), jit.Imm(0)) // CMPQ 8(SP.p), $0 - self.Sjmp("JE" , "_str_end_{n}") // JE _str_end_{n} - self.save_c() // SAVE $REG_ffi - self.Emit("MOVQ" , _SP_p, _DI) // MOVQ SP.p, DI - self.Emit("XORL" , _SI, _SI) // XORL SI, SI - self.call_c(_F_lquote) // CALL lquote - self.Emit("CMPQ" , _AX, jit.Ptr(_SP_p, 8)) // CMPQ AX, 8(SP.p) - self.Sjmp("JNE" , "_str_quote_{n}") // JNE _str_quote_{n} - self.Emit("LEAQ" , jit.Sib(_RP, _RL, 1, 0), _AX) // LEAQ (RP)(RL), AX - self.Emit("ADDQ" , jit.Ptr(_SP_p, 8), _RL) // ADDQ 8(SP.p), RL - self.Emit("MOVQ" , _AX, jit.Ptr(_SP, 0)) // MOVQ AX, 0(SP) - self.Emit("MOVOU", jit.Ptr(_SP_p, 0), _X0) // MOVOU (SP.p), X0 - self.Emit("MOVOU", _X0, jit.Ptr(_SP, 8)) // MOVOU X0, 8(SP) - self.call_go(_F_memmove) // CALL_GO memmove - self.Sjmp("JMP" , "_str_end_{n}") // JMP _str_end_{n} - self.Link("_str_quote_{n}") // _str_quote_{n}: - self.Emit("MOVQ" , _AX, jit.Ptr(_SP, 8)) // MOVQ AX, 8(SP) - self.prep_buffer() // MOVE {buf}, (SP) - self.Emit("MOVOU", jit.Ptr(_SP_p, 0), _X0) // MOVOU (SP.p), X0 - self.Emit("MOVOU", _X0, jit.Ptr(_SP, 16)) // MOVOU X0, 16(SP) - self.call_encoder(fn) // CALL $fn - self.close_quote(doubleQuote) // QCLOSE $doubleQuote + /* not enough space to contain the quoted string */ + self.Link("_str_space_{n}") // _str_space_{n}: + self.Emit("NOTQ", _AX) // NOTQ AX + self.Emit("ADDQ", _AX, _VAR_sp) // ADDQ AX, sp + self.Emit("LEAQ", jit.Sib(_RC, _RC, 1, 0), _AX) // LEAQ (RC)(RC), AX + self.slice_grow_ax("_str_loop_{n}") // GROW _str_loop_{n} + + /* empty string, check for double quote */ + if !doubleQuote { + self.Link("_str_empty_{n}") // _str_empty_{n}: + self.check_size(2) // SIZE $2 + self.add_text("\"\"") // TEXT $'""' + self.Link("_str_end_{n}") // _str_end_{n}: + } else { + self.Link("_str_empty_{n}") // _str_empty_{n}: + self.check_size(6) // SIZE $6 + self.add_text("\"\\\"\\\"\"") // TEXT $'"\"\""' + self.Link("_str_end_{n}") // _str_end_{n}: + } } /** Zero Value Check Routine **/ @@ -663,46 +705,11 @@ func (self *_Assembler) check_zero(nb int, dest int) { return } - /* default instructions for AVX2 */ - vclear := func(v obj.Addr) { self.Emit("VPXOR" , v, v, v) } - vset1a := func(a, b obj.Addr) { self.Emit("VPCMPEQB", a, a, b) } - vandpb := func(b, a, r obj.Addr) { self.Emit("VPAND" , b, a, r) } - vcmpeq := func(b, a, r obj.Addr) { self.Emit("VPCMPEQB", b, a, r) } - - /* fall-back instructions for AVX */ - if !cpu.HasAVX2 { - vclear = func(v obj.Addr) { self.Emit("VXORPS", v, v, v) } - vset1a = func(a, b obj.Addr) { self.Emit("VCMPPS", a, a, b, jit.Imm(0x0f)) } - vandpb = func(b, a, r obj.Addr) { self.Emit("VANDPS", b, a, r) } - vcmpeq = func(b, a, r obj.Addr) { self.Emit("VCMPPS", b, a, r, jit.Imm(0x00)) } - } - - /* if n is less than 32 byte, only scalar code will be used; - * otherwise AVX is used, so clear Y0, and set Y1 to all 1s */ - if e >= 32 { - vclear(_Y0) // CLEAR Y0 - vset1a(_Y0, _Y1) // SET1A Y0, Y1 - } - - /* 128-byte tests */ - for i <= e - 128 { - vcmpeq(jit.Ptr(_SP_p, i + 0), _Y0, _Y2) // CMPEQ i+0(SP.p), Y0, Y2 - vcmpeq(jit.Ptr(_SP_p, i + 32), _Y0, _Y3) // CMPEQ i+32(SP.p), Y0, Y3 - vcmpeq(jit.Ptr(_SP_p, i + 64), _Y0, _Y4) // CMPEQ i+64(SP.p), Y0, Y4 - vcmpeq(jit.Ptr(_SP_p, i + 96), _Y0, _Y5) // CMPEQ i+96(SP.p), Y0, Y5 - vandpb(_Y3, _Y2, _Y2) // ANDPB Y3, Y2, Y2 - vandpb(_Y5, _Y4, _Y3) // ANDPB Y5, Y4, Y3 - vandpb(_Y2, _Y3, _Y3) // ANDPB Y2, Y3, Y3 - self.Emit("VPTEST", _Y1, _Y3) // VPTEST Y1, Y3 - self.Sjmp("JNC" , "_not_zero_z_{n}") // JNC _not_zero_z_{n} - i += 128 - } - - /* 32-byte tests */ + /* 32-byte test */ for i <= e - 32 { - vcmpeq(jit.Ptr(_SP_p, i), _Y0, _Y2) // CMPEQ i(SP.p), Y0, Y2 - self.Emit("VPTEST", _Y1, _Y2) // VPTEST Y1, Y2 - self.Sjmp("JNC" , "_not_zero_z_{n}") // JNC _not_zero_z_{n} + self.Emit("VMOVDQU", jit.Ptr(_SP_p, i), _Y0) // VMOVDQU (SP.p), Y0 + self.Emit("VPTEST" , _Y0, _Y0) // VPTEST Y0, Y0 + self.Sjmp("JNZ" , "_not_zero_z_{n}") // JNZ _not_zero_z_{n} i += 32 } @@ -711,8 +718,16 @@ func (self *_Assembler) check_zero(nb int, dest int) { self.Emit("VZEROUPPER") } - /* 8-byte tests */ - for i <= e - 8 { + /* 16-byte test */ + if i <= e - 16 { + self.Emit("MOVOU", jit.Ptr(_SP_p, i), _X0) // MOVOU (SP.p), X0 + self.Emit("PTEST", _X0, _X0) // PTEST X0, X0 + self.Sjmp("JNZ" , "_not_zero_{n}") // JNZ _not_zero_{n} + i += 16 + } + + /* 8-byte test */ + if i <= e - 8 { self.Emit("CMPQ", jit.Ptr(_SP_p, i), jit.Imm(0)) // CMPQ i(SP.p), $0 self.Sjmp("JNE" , "_not_zero_{n}") // JNE _not_zero_{n} i += 8 @@ -771,7 +786,6 @@ var ( _F_f64toa = jit.Imm(int64(native.S_f64toa)) _F_i64toa = jit.Imm(int64(native.S_i64toa)) _F_u64toa = jit.Imm(int64(native.S_u64toa)) - _F_lquote = jit.Imm(int64(native.S_lquote)) _F_b64encode = jit.Imm(int64(_subr__b64encode)) ) @@ -792,16 +806,12 @@ var ( ) var ( - _F_encodeQuote obj.Addr - _F_encodeDoubleQuote obj.Addr _F_encodeTypedPointer obj.Addr _F_encodeJsonMarshaler obj.Addr _F_encodeTextMarshaler obj.Addr ) func init() { - _F_encodeQuote = jit.Func(encodeQuote) - _F_encodeDoubleQuote = jit.Func(encodeDoubleQuote) _F_encodeTypedPointer = jit.Func(encodeTypedPointer) _F_encodeJsonMarshaler = jit.Func(encodeJsonMarshaler) _F_encodeTextMarshaler = jit.Func(encodeTextMarshaler) @@ -889,7 +899,7 @@ func (self *_Assembler) _asm_OP_f64(_ *_Instr) { } func (self *_Assembler) _asm_OP_str(_ *_Instr) { - self.encode_string(_F_encodeQuote, false) + self.encode_string(false) } func (self *_Assembler) _asm_OP_bin(_ *_Instr) { @@ -913,7 +923,7 @@ func (self *_Assembler) _asm_OP_bin(_ *_Instr) { } func (self *_Assembler) _asm_OP_quote(_ *_Instr) { - self.encode_string(_F_encodeDoubleQuote, true) + self.encode_string(true) } func (self *_Assembler) _asm_OP_number(_ *_Instr) { @@ -977,9 +987,8 @@ func (self *_Assembler) _asm_OP_byte(p *_Instr) { } func (self *_Assembler) _asm_OP_text(p *_Instr) { - self.check_size(len(p.vs())) - self.store_str(p.vs()) - self.Emit("ADDQ", jit.Imm(int64(len(p.vs()))), _RL) // ADDQ $len(p.vs()), RL + self.check_size(len(p.vs())) // SIZE ${len(p.vs())} + self.add_text(p.vs()) // TEXT ${p.vs()} } func (self *_Assembler) _asm_OP_deref(_ *_Instr) { diff --git a/encoder/assembler_test.go b/encoder/assembler_test.go index 7172548..571fac1 100644 --- a/encoder/assembler_test.go +++ b/encoder/assembler_test.go @@ -26,6 +26,7 @@ import ( `unsafe` `github.com/bytedance/sonic/internal/rt` + `github.com/davecgh/go-spew/spew` `github.com/stretchr/testify/assert` ) @@ -339,6 +340,18 @@ func TestAssembler_OpCode(t *testing.T) { } } +func TestAssembler_StringMoreSpace(t *testing.T) { + p := &_Program{ins: []_Instr{newInsOp(_OP_str)}} + m := make([]byte, 0, 8) + s := new(_Stack) + a := newAssembler(p) + f := a.Load() + v := "\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000a\u000b\u000c\u000d\u000e\u000f\u0010" + e := f(&m, unsafe.Pointer(&v), s) + assert.Nil(t, e) + spew.Dump(m) +} + func TestAssembler_TwitterJSON_Generic(t *testing.T) { p := &_Program{ins: mustCompile(&_GenericValue).ins} m := []byte(nil) diff --git a/encoder/encoder.go b/encoder/encoder.go index e881833..46f0a42 100644 --- a/encoder/encoder.go +++ b/encoder/encoder.go @@ -38,7 +38,7 @@ func Quote(s string) string { p = make([]byte, 0, n) /* call the encoder */ - _ = encodeStr(&p, s) + _ = encodeString(&p, s) return rt.Mem2Str(p) } diff --git a/encoder/primitives.go b/encoder/primitives.go index b0b3af3..364f2a6 100644 --- a/encoder/primitives.go +++ b/encoder/primitives.go @@ -28,126 +28,44 @@ import ( /** Encoder Primitives **/ -var _QuoteTab = [256]string { - '\x00' : `\u0000`, - '\x01' : `\u0001`, - '\x02' : `\u0002`, - '\x03' : `\u0003`, - '\x04' : `\u0004`, - '\x05' : `\u0005`, - '\x06' : `\u0006`, - '\x07' : `\u0007`, - '\b' : `\b`, - '\t' : `\t`, - '\n' : `\n`, - '\x0b' : `\u000b`, - '\f' : `\f`, - '\r' : `\r`, - '\x0e' : `\u000e`, - '\x0f' : `\u000f`, - '\x10' : `\u0010`, - '\x11' : `\u0011`, - '\x12' : `\u0012`, - '\x13' : `\u0013`, - '\x14' : `\u0014`, - '\x15' : `\u0015`, - '\x16' : `\u0016`, - '\x17' : `\u0017`, - '\x18' : `\u0018`, - '\x19' : `\u0019`, - '\x1a' : `\u001a`, - '\x1b' : `\u001b`, - '\x1c' : `\u001c`, - '\x1d' : `\u001d`, - '\x1e' : `\u001e`, - '\x1f' : `\u001f`, - '"' : `\"`, - '\\' : `\\`, -} - -var _DoubleQuoteTab = [256]string { - '\x00' : `\\u0000`, - '\x01' : `\\u0001`, - '\x02' : `\\u0002`, - '\x03' : `\\u0003`, - '\x04' : `\\u0004`, - '\x05' : `\\u0005`, - '\x06' : `\\u0006`, - '\x07' : `\\u0007`, - '\b' : `\\b`, - '\t' : `\\t`, - '\n' : `\\n`, - '\x0b' : `\\u000b`, - '\f' : `\\f`, - '\r' : `\\r`, - '\x0e' : `\\u000e`, - '\x0f' : `\\u000f`, - '\x10' : `\\u0010`, - '\x11' : `\\u0011`, - '\x12' : `\\u0012`, - '\x13' : `\\u0013`, - '\x14' : `\\u0014`, - '\x15' : `\\u0015`, - '\x16' : `\\u0016`, - '\x17' : `\\u0017`, - '\x18' : `\\u0018`, - '\x19' : `\\u0019`, - '\x1a' : `\\u001a`, - '\x1b' : `\\u001b`, - '\x1c' : `\\u001c`, - '\x1d' : `\\u001d`, - '\x1e' : `\\u001e`, - '\x1f' : `\\u001f`, - '"' : `\\\"`, - '\\' : `\\\\`, -} - func encodeNil(rb *[]byte) error { *rb = append(*rb, 'n', 'u', 'l', 'l') return nil } -func encodeStr(buf *[]byte, val string) error { +func encodeString(buf *[]byte, val string) error { + var sidx int + var pbuf *rt.GoSlice + var pstr *rt.GoString + + /* opening quote */ *buf = append(*buf, '"') - encodeQuote(buf, native.Lquote(&val, 0), val) + pbuf = (*rt.GoSlice)(unsafe.Pointer(buf)) + pstr = (*rt.GoString)(unsafe.Pointer(&val)) + + /* encode with native library */ + for sidx < pstr.Len { + sn := pstr.Len - sidx + dn := pbuf.Cap - pbuf.Len + sp := padd(pstr.Ptr, sidx) + dp := padd(pbuf.Ptr, pbuf.Len) + nb := native.Quote(sp, sn, dp, &dn, 0) + + /* check for errors */ + if pbuf.Len += dn; nb >= 0 { + break + } + + /* not enough space, grow the slice and try again */ + sidx += ^nb + *pbuf = growslice(rt.UnpackType(byteType), *pbuf, pbuf.Cap * 2) + } + + /* closing quote */ *buf = append(*buf, '"') return nil } -func encodeQuote(buf *[]byte, i int, val string) { - p := 0 - n := len(val) - - /* quote all the characters, if any */ - for i < n { - *buf = append(*buf, rt.Str2Mem(val[p:i])...) - *buf = append(*buf, rt.Str2Mem(_QuoteTab[val[i]])...) - p, i = i + 1, native.Lquote(&val, i + 1) - } - - /* add the remaining characters */ - if p < n { - *buf = append(*buf, rt.Str2Mem(val[p:])...) - } -} - -func encodeDoubleQuote(buf *[]byte, i int, val string) { - p := 0 - n := len(val) - - /* quote all the characters, if any */ - for i < n { - *buf = append(*buf, rt.Str2Mem(val[p:i])...) - *buf = append(*buf, rt.Str2Mem(_DoubleQuoteTab[val[i]])...) - p, i = i + 1, native.Lquote(&val, i + 1) - } - - /* add the remaining characters */ - if p < n { - *buf = append(*buf, rt.Str2Mem(val[p:])...) - } -} - func encodeTypedPointer(buf *[]byte, vt *rt.GoType, vp *unsafe.Pointer, sb *_Stack) error { if vt == nil { return encodeNil(buf) @@ -172,7 +90,7 @@ func encodeTextMarshaler(buf *[]byte, val encoding.TextMarshaler) error { if ret, err := val.MarshalText(); err != nil { return err } else { - return encodeStr(buf, rt.Mem2Str(ret)) + return encodeString(buf, rt.Mem2Str(ret)) } } diff --git a/encoder/utils.go b/encoder/utils.go index b78465a..4186637 100644 --- a/encoder/utils.go +++ b/encoder/utils.go @@ -23,6 +23,11 @@ import ( `github.com/bytedance/sonic/internal/loader` ) +//go:nosplit +func padd(p unsafe.Pointer, v int) unsafe.Pointer { + return unsafe.Pointer(uintptr(p) + uintptr(v)) +} + //go:nosplit func ptoenc(p loader.Function) _Encoder { return *(*_Encoder)(unsafe.Pointer(&p)) diff --git a/internal/native/avx/native_amd64.go b/internal/native/avx/native_amd64.go index 1624c59..4900f5e 100644 --- a/internal/native/avx/native_amd64.go +++ b/internal/native/avx/native_amd64.go @@ -47,12 +47,17 @@ func __lzero(p unsafe.Pointer, n int) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __lquote(buf *string, off int) (ret int) +func __lspace(sp unsafe.Pointer, nb int, off int) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __lspace(sp unsafe.Pointer, nb int, off int) (ret int) +func __quote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int, flags uint64) (ret int) + +//go:nosplit +//go:noescape +//goland:noinspection GoUnusedParameter +func __unquote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) (ret int) //go:nosplit //go:noescape @@ -93,8 +98,3 @@ func __skip_array(s *string, p *int, m *types.StateMachine) (ret int) //go:noescape //goland:noinspection GoUnusedParameter func __skip_object(s *string, p *int, m *types.StateMachine) (ret int) - -//go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __unquote(s unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) (ret int) diff --git a/internal/native/avx/native_amd64.s b/internal/native/avx/native_amd64.s index e01c75e..23ec6ce 100644 --- a/internal/native/avx/native_amd64.s +++ b/internal/native/avx/native_amd64.s @@ -6,869 +6,206 @@ TEXT ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___(SB), NOSPLIT, $0 _lzero: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - CMPQ SI, $128 - JB LBB0_4 - LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 - LONG $0xc8c2fcc5; BYTE $0x0f // vcmptrueps %ymm0, %ymm0, %ymm1 - -LBB0_2: - LONG $0x17c2fcc5; BYTE $0x00 // vcmpeqps (%rdi), %ymm0, %ymm2 - LONG $0x5fc2fcc5; WORD $0x0020 // vcmpeqps $32(%rdi), %ymm0, %ymm3 - LONG $0xd254e4c5 // vandps %ymm2, %ymm3, %ymm2 - LONG $0x5fc2fcc5; WORD $0x0040 // vcmpeqps $64(%rdi), %ymm0, %ymm3 - LONG $0x67c2fcc5; WORD $0x0060 // vcmpeqps $96(%rdi), %ymm0, %ymm4 - LONG $0xdc54e4c5 // vandps %ymm4, %ymm3, %ymm3 - LONG $0xd354ecc5 // vandps %ymm3, %ymm2, %ymm2 - LONG $0x177de2c4; BYTE $0xd1 // vptest %ymm1, %ymm2 - JAE LBB0_14 - SUBQ $-128, DI - ADDQ $-128, SI - CMPQ SI, $127 - JA LBB0_2 - -LBB0_4: + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp CMPQ SI, $32 - JB LBB0_8 - LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 - LONG $0xc8c2fcc5; BYTE $0x0f // vcmptrueps %ymm0, %ymm0, %ymm1 + JB LBB0_3 -LBB0_6: - LONG $0x17c2fcc5; BYTE $0x00 // vcmpeqps (%rdi), %ymm0, %ymm2 - LONG $0x177de2c4; BYTE $0xd1 // vptest %ymm1, %ymm2 - JAE LBB0_14 +LBB0_1: + LONG $0x076ffec5 // vmovdqu (%rdi), %ymm0 + LONG $0x177de2c4; BYTE $0xc0 // vptest %ymm0, %ymm0 + JNE LBB0_9 ADDQ $32, DI ADDQ $-32, SI CMPQ SI, $31 - JA LBB0_6 + JA LBB0_1 -LBB0_8: +LBB0_3: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + CMPQ SI, $16 + JB LBB0_6 + +LBB0_4: + LONG $0x076ffac5 // vmovdqu (%rdi), %xmm0 + LONG $0x1779e2c4; BYTE $0xc0 // vptest %xmm0, %xmm0 + JNE LBB0_10 + ADDQ $16, DI + ADDQ $-16, SI + CMPQ SI, $15 + JA LBB0_4 + +LBB0_6: CMPQ SI, $8 - JB LBB0_11 - -LBB0_9: + JB LBB0_12 + MOVL $1, AX CMPQ 0(DI), $0 - JNE LBB0_14 + JNE LBB0_8 ADDQ $8, DI ADDQ $-8, SI - CMPQ SI, $7 - JA LBB0_9 -LBB0_11: +LBB0_12: CMPQ SI, $4 - JB LBB0_18 + JB LBB0_15 MOVL $1, AX CMPL 0(DI), $0 - JNE LBB0_13 + JNE LBB0_8 ADDQ $4, DI ADDQ $-4, SI -LBB0_18: +LBB0_15: CMPQ SI, $2 - JB LBB0_21 + JB LBB0_18 MOVL $1, AX CMPW 0(DI), $0 - JNE LBB0_13 + JNE LBB0_8 ADDQ $2, DI ADDQ $-2, SI -LBB0_21: +LBB0_18: XORL AX, AX TESTQ SI, SI - JE LBB0_13 + JE LBB0_8 CMPB 0(DI), $0 SETNE AX - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper + BYTE $0x5d // popq %rbp RET -LBB0_14: +LBB0_8: + BYTE $0x5d // popq %rbp + RET + +LBB0_9: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + +LBB0_10: MOVL $1, AX - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - RET - -LBB0_13: - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper + BYTE $0x5d // popq %rbp RET LCPI1_0: QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' LCPI1_1: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - -LCPI1_2: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - -LCPI1_3: - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0x00 // .space 1, '\x00' - BYTE $0xff // .byte 255 - -_lquote: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - MOVQ 8(DI), R8 - MOVQ R8, R10 - SUBQ SI, R10 - JE LBB1_1 - MOVQ 0(DI), R11 - LEAQ 0(R11)(SI*1), CX - CMPQ R10, $16 - JAE LBB1_3 - LONG $0x763941c4; BYTE $0xc0 // vpcmpeqd %xmm8, %xmm8, %xmm8 - DECQ R10 - LONG $0xc076f9c5 // vpcmpeqd %xmm0, %xmm0, %xmm0 - CMPQ R10, $14 - JA LBB1_24 - LONG $0xb4058d48; WORD $0x0001; BYTE $0x00 // leaq $436(%rip), %rax /* LJTI1_0(%rip) */ - MOVLQSX 0(AX)(R10*4), DX - ADDQ AX, DX - LONG $0x763141c4; BYTE $0xc9 // vpcmpeqd %xmm9, %xmm9, %xmm9 - LONG $0x762941c4; BYTE $0xd2 // vpcmpeqd %xmm10, %xmm10, %xmm10 - LONG $0x762141c4; BYTE $0xdb // vpcmpeqd %xmm11, %xmm11, %xmm11 - LONG $0x761941c4; BYTE $0xe4 // vpcmpeqd %xmm12, %xmm12, %xmm12 - LONG $0x761141c4; BYTE $0xed // vpcmpeqd %xmm13, %xmm13, %xmm13 - LONG $0x760941c4; BYTE $0xf6 // vpcmpeqd %xmm14, %xmm14, %xmm14 - LONG $0xff76c1c5 // vpcmpeqd %xmm7, %xmm7, %xmm7 - LONG $0xc076f9c5 // vpcmpeqd %xmm0, %xmm0, %xmm0 - LONG $0xc976f1c5 // vpcmpeqd %xmm1, %xmm1, %xmm1 - LONG $0xd276e9c5 // vpcmpeqd %xmm2, %xmm2, %xmm2 - LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 - LONG $0xe476d9c5 // vpcmpeqd %xmm4, %xmm4, %xmm4 - LONG $0xed76d1c5 // vpcmpeqd %xmm5, %xmm5, %xmm5 - LONG $0xf676c9c5 // vpcmpeqd %xmm6, %xmm6, %xmm6 - JMP DX - -LBB1_9: - QUAD $0xffffff5f056ffac5 // vmovdqu $-161(%rip), %xmm0 /* LCPI1_3(%rip) */ - LONG $0x207963c4; WORD $0x0e49; BYTE $0x0e // vpinsrb $14, $14(%rcx), %xmm0, %xmm9 - -LBB1_10: - LONG $0x203163c4; WORD $0x0d51; BYTE $0x0d // vpinsrb $13, $13(%rcx), %xmm9, %xmm10 - -LBB1_11: - LONG $0x202963c4; WORD $0x0c59; BYTE $0x0c // vpinsrb $12, $12(%rcx), %xmm10, %xmm11 - -LBB1_12: - LONG $0x202163c4; WORD $0x0b61; BYTE $0x0b // vpinsrb $11, $11(%rcx), %xmm11, %xmm12 - -LBB1_13: - LONG $0x201963c4; WORD $0x0a69; BYTE $0x0a // vpinsrb $10, $10(%rcx), %xmm12, %xmm13 - -LBB1_14: - LONG $0x201163c4; WORD $0x0971; BYTE $0x09 // vpinsrb $9, $9(%rcx), %xmm13, %xmm14 - -LBB1_15: - LONG $0x2009e3c4; WORD $0x0879; BYTE $0x08 // vpinsrb $8, $8(%rcx), %xmm14, %xmm7 - -LBB1_16: - LONG $0x2041e3c4; WORD $0x0741; BYTE $0x07 // vpinsrb $7, $7(%rcx), %xmm7, %xmm0 - -LBB1_17: - LONG $0x2079e3c4; WORD $0x0649; BYTE $0x06 // vpinsrb $6, $6(%rcx), %xmm0, %xmm1 - -LBB1_18: - LONG $0x2071e3c4; WORD $0x0551; BYTE $0x05 // vpinsrb $5, $5(%rcx), %xmm1, %xmm2 - -LBB1_19: - LONG $0x2069e3c4; WORD $0x0459; BYTE $0x04 // vpinsrb $4, $4(%rcx), %xmm2, %xmm3 - -LBB1_20: - LONG $0x2061e3c4; WORD $0x0361; BYTE $0x03 // vpinsrb $3, $3(%rcx), %xmm3, %xmm4 - -LBB1_21: - LONG $0x2059e3c4; WORD $0x0269; BYTE $0x02 // vpinsrb $2, $2(%rcx), %xmm4, %xmm5 - -LBB1_22: - LONG $0x2051e3c4; WORD $0x0171; BYTE $0x01 // vpinsrb $1, $1(%rcx), %xmm5, %xmm6 - -LBB1_23: - LONG $0x2049e3c4; WORD $0x0001 // vpinsrb $0, (%rcx), %xmm6, %xmm0 - -LBB1_24: - QUAD $0xfffffebf0d6ffac5 // vmovdqu $-321(%rip), %xmm1 /* LCPI1_0(%rip) */ - QUAD $0xfffffec71574f9c5 // vpcmpeqb $-313(%rip), %xmm0, %xmm2 /* LCPI1_1(%rip) */ - QUAD $0xfffffecf1d74f9c5 // vpcmpeqb $-305(%rip), %xmm0, %xmm3 /* LCPI1_2(%rip) */ - LONG $0xc864f1c5 // vpcmpgtb %xmm0, %xmm1, %xmm1 - LONG $0xd2ebe1c5 // vpor %xmm2, %xmm3, %xmm2 - LONG $0x6479c1c4; BYTE $0xc0 // vpcmpgtb %xmm8, %xmm0, %xmm0 - LONG $0xc0dbf1c5 // vpand %xmm0, %xmm1, %xmm0 - LONG $0xc0ebe9c5 // vpor %xmm0, %xmm2, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - ORL $-65536, AX - BSFL AX, AX - -LBB1_25: - ADDQ SI, AX - BYTE $0x5d // popq %rbp - RET - -LBB1_1: - XORL AX, AX - ADDQ SI, AX - BYTE $0x5d // popq %rbp - RET - -LBB1_3: - LEAQ -16(R10), R9 - ANDQ $-16, R9 - XORL AX, AX - QUAD $0xfffffe70056ffac5 // vmovdqu $-400(%rip), %xmm0 /* LCPI1_0(%rip) */ - QUAD $0xfffffe780d6ffac5 // vmovdqu $-392(%rip), %xmm1 /* LCPI1_1(%rip) */ - QUAD $0xfffffe80156ffac5 // vmovdqu $-384(%rip), %xmm2 /* LCPI1_2(%rip) */ - LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 - MOVQ R10, DX - -LBB1_4: - LONG $0x216ffac5 // vmovdqu (%rcx), %xmm4 - LONG $0xec64f9c5 // vpcmpgtb %xmm4, %xmm0, %xmm5 - LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 - LONG $0xfa74d9c5 // vpcmpeqb %xmm2, %xmm4, %xmm7 - LONG $0xf6ebc1c5 // vpor %xmm6, %xmm7, %xmm6 - LONG $0xe364d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm4 - LONG $0xe4dbd1c5 // vpand %xmm4, %xmm5, %xmm4 - LONG $0xe4ebc9c5 // vpor %xmm4, %xmm6, %xmm4 - LONG $0xfcd7f9c5 // vpmovmskb %xmm4, %edi - ORL $-65536, DI - BSFL DI, DI - ADDQ DI, AX - CMPL DI, $16 - JB LBB1_25 - ADDQ $16, CX - ADDQ $-16, DX - CMPQ DX, $15 - JA LBB1_4 - LONG $0x6f7a81c4; WORD $0x034c; BYTE $0xf0 // vmovdqu $-16(%r11,%r8), %xmm1 - QUAD $0xfffffe171574f1c5 // vpcmpeqb $-489(%rip), %xmm1, %xmm2 /* LCPI1_1(%rip) */ - QUAD $0xfffffe1f1d74f1c5 // vpcmpeqb $-481(%rip), %xmm1, %xmm3 /* LCPI1_2(%rip) */ - LONG $0xc164f9c5 // vpcmpgtb %xmm1, %xmm0, %xmm0 - LONG $0xd2ebe1c5 // vpor %xmm2, %xmm3, %xmm2 - LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 - LONG $0xcb64f1c5 // vpcmpgtb %xmm3, %xmm1, %xmm1 - LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 - LONG $0xc0ebe9c5 // vpor %xmm0, %xmm2, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - ORL $-65536, CX - BSFL CX, CX - SUBQ R9, R10 - ADDQ AX, R10 - LEAQ -32(CX)(R10*1), AX - ADDQ SI, AX - BYTE $0x5d // popq %rbp - RET - -// .set L1_0_set_23, LBB1_23-LJTI1_0 -// .set L1_0_set_22, LBB1_22-LJTI1_0 -// .set L1_0_set_21, LBB1_21-LJTI1_0 -// .set L1_0_set_20, LBB1_20-LJTI1_0 -// .set L1_0_set_19, LBB1_19-LJTI1_0 -// .set L1_0_set_18, LBB1_18-LJTI1_0 -// .set L1_0_set_17, LBB1_17-LJTI1_0 -// .set L1_0_set_16, LBB1_16-LJTI1_0 -// .set L1_0_set_15, LBB1_15-LJTI1_0 -// .set L1_0_set_14, LBB1_14-LJTI1_0 -// .set L1_0_set_13, LBB1_13-LJTI1_0 -// .set L1_0_set_12, LBB1_12-LJTI1_0 -// .set L1_0_set_11, LBB1_11-LJTI1_0 -// .set L1_0_set_10, LBB1_10-LJTI1_0 -// .set L1_0_set_9, LBB1_9-LJTI1_0 -LJTI1_0: - LONG $0xfffffefd // .long L1_0_set_23 - LONG $0xfffffef6 // .long L1_0_set_22 - LONG $0xfffffeef // .long L1_0_set_21 - LONG $0xfffffee8 // .long L1_0_set_20 - LONG $0xfffffee1 // .long L1_0_set_19 - LONG $0xfffffeda // .long L1_0_set_18 - LONG $0xfffffed3 // .long L1_0_set_17 - LONG $0xfffffecc // .long L1_0_set_16 - LONG $0xfffffec5 // .long L1_0_set_15 - LONG $0xfffffebe // .long L1_0_set_14 - LONG $0xfffffeb7 // .long L1_0_set_13 - LONG $0xfffffeb0 // .long L1_0_set_12 - LONG $0xfffffea9 // .long L1_0_set_11 - LONG $0xfffffea2 // .long L1_0_set_10 - LONG $0xfffffe93 // .long L1_0_set_9 - -LCPI2_0: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - -LCPI2_1: QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' -LCPI2_2: +LCPI1_2: QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' -LCPI2_3: +LCPI1_3: QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' -LCPI2_4: - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0x00 // .space 1, '\x00' - BYTE $0xff // .byte 255 - _lspace: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - MOVQ SI, R8 - SUBQ DX, R8 - JE LBB2_1 - LEAQ 0(DI)(DX*1), R10 - CMPQ R8, $16 - JAE LBB2_3 - LONG $0xc076f9c5 // vpcmpeqd %xmm0, %xmm0, %xmm0 - DECQ R8 - CMPQ R8, $14 - JA LBB2_24 - LONG $0x72058d48; WORD $0x0001; BYTE $0x00 // leaq $370(%rip), %rax /* LJTI2_0(%rip) */ - MOVLQSX 0(AX)(R8*4), CX - ADDQ AX, CX - JMP CX - -LBB2_9: - QUAD $0xffffffa9056ffac5 // vmovdqu $-87(%rip), %xmm0 /* LCPI2_4(%rip) */ - LONG $0x2079c3c4; WORD $0x0e42; BYTE $0x0e // vpinsrb $14, $14(%r10), %xmm0, %xmm0 - -LBB2_10: - LONG $0x2079c3c4; WORD $0x0d42; BYTE $0x0d // vpinsrb $13, $13(%r10), %xmm0, %xmm0 - -LBB2_11: - LONG $0x2079c3c4; WORD $0x0c42; BYTE $0x0c // vpinsrb $12, $12(%r10), %xmm0, %xmm0 - -LBB2_12: - LONG $0x2079c3c4; WORD $0x0b42; BYTE $0x0b // vpinsrb $11, $11(%r10), %xmm0, %xmm0 - -LBB2_13: - LONG $0x2079c3c4; WORD $0x0a42; BYTE $0x0a // vpinsrb $10, $10(%r10), %xmm0, %xmm0 - -LBB2_14: - LONG $0x2079c3c4; WORD $0x0942; BYTE $0x09 // vpinsrb $9, $9(%r10), %xmm0, %xmm0 - -LBB2_15: - LONG $0x2079c3c4; WORD $0x0842; BYTE $0x08 // vpinsrb $8, $8(%r10), %xmm0, %xmm0 - -LBB2_16: - LONG $0x2079c3c4; WORD $0x0742; BYTE $0x07 // vpinsrb $7, $7(%r10), %xmm0, %xmm0 - -LBB2_17: - LONG $0x2079c3c4; WORD $0x0642; BYTE $0x06 // vpinsrb $6, $6(%r10), %xmm0, %xmm0 - -LBB2_18: - LONG $0x2079c3c4; WORD $0x0542; BYTE $0x05 // vpinsrb $5, $5(%r10), %xmm0, %xmm0 - -LBB2_19: - LONG $0x2079c3c4; WORD $0x0442; BYTE $0x04 // vpinsrb $4, $4(%r10), %xmm0, %xmm0 - -LBB2_20: - LONG $0x2079c3c4; WORD $0x0342; BYTE $0x03 // vpinsrb $3, $3(%r10), %xmm0, %xmm0 - -LBB2_21: - LONG $0x2079c3c4; WORD $0x0242; BYTE $0x02 // vpinsrb $2, $2(%r10), %xmm0, %xmm0 - -LBB2_22: - LONG $0x2079c3c4; WORD $0x0142; BYTE $0x01 // vpinsrb $1, $1(%r10), %xmm0, %xmm0 - -LBB2_23: - LONG $0x2079c3c4; WORD $0x0002 // vpinsrb $0, (%r10), %xmm0, %xmm0 - -LBB2_24: - QUAD $0xfffffef90d74f9c5 // vpcmpeqb $-263(%rip), %xmm0, %xmm1 /* LCPI2_0(%rip) */ - QUAD $0xffffff011574f9c5 // vpcmpeqb $-255(%rip), %xmm0, %xmm2 /* LCPI2_1(%rip) */ - QUAD $0xffffff091d74f9c5 // vpcmpeqb $-247(%rip), %xmm0, %xmm3 /* LCPI2_2(%rip) */ - LONG $0xcaebf1c5 // vpor %xmm2, %xmm1, %xmm1 - QUAD $0xffffff0d0574f9c5 // vpcmpeqb $-243(%rip), %xmm0, %xmm0 /* LCPI2_3(%rip) */ - LONG $0xc3ebf9c5 // vpor %xmm3, %xmm0, %xmm0 - LONG $0xc1ebf9c5 // vpor %xmm1, %xmm0, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - NOTL AX - BSFL AX, AX - -LBB2_25: - ADDQ DX, AX - BYTE $0x5d // popq %rbp - RET - -LBB2_1: - XORL AX, AX - ADDQ DX, AX - BYTE $0x5d // popq %rbp - RET - -LBB2_3: - LEAQ -16(R8), R9 - ANDQ $-16, R9 - XORL AX, AX - QUAD $0xfffffeae056ffac5 // vmovdqu $-338(%rip), %xmm0 /* LCPI2_0(%rip) */ - QUAD $0xfffffeb60d6ffac5 // vmovdqu $-330(%rip), %xmm1 /* LCPI2_1(%rip) */ - QUAD $0xfffffebe156ffac5 // vmovdqu $-322(%rip), %xmm2 /* LCPI2_2(%rip) */ - QUAD $0xfffffec61d6ffac5 // vmovdqu $-314(%rip), %xmm3 /* LCPI2_3(%rip) */ - MOVQ R8, R11 - -LBB2_4: - LONG $0x6f7ac1c4; BYTE $0x22 // vmovdqu (%r10), %xmm4 - LONG $0xe874d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm5 - LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 - LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 - LONG $0xf274d9c5 // vpcmpeqb %xmm2, %xmm4, %xmm6 - LONG $0xe374d9c5 // vpcmpeqb %xmm3, %xmm4, %xmm4 - LONG $0xe6ebd9c5 // vpor %xmm6, %xmm4, %xmm4 - LONG $0xe5ebd9c5 // vpor %xmm5, %xmm4, %xmm4 - LONG $0xccd7f9c5 // vpmovmskb %xmm4, %ecx - NOTL CX - BSFL CX, CX - ADDQ CX, AX - CMPL CX, $16 - JB LBB2_25 - ADDQ $16, R10 - ADDQ $-16, R11 - CMPQ R11, $15 - JA LBB2_4 - LONG $0x446ffac5; WORD $0xf037 // vmovdqu $-16(%rdi,%rsi), %xmm0 - QUAD $0xfffffe450d74f9c5 // vpcmpeqb $-443(%rip), %xmm0, %xmm1 /* LCPI2_0(%rip) */ - QUAD $0xfffffe4d1574f9c5 // vpcmpeqb $-435(%rip), %xmm0, %xmm2 /* LCPI2_1(%rip) */ - LONG $0xcaebf1c5 // vpor %xmm2, %xmm1, %xmm1 - QUAD $0xfffffe511574f9c5 // vpcmpeqb $-431(%rip), %xmm0, %xmm2 /* LCPI2_2(%rip) */ - QUAD $0xfffffe590574f9c5 // vpcmpeqb $-423(%rip), %xmm0, %xmm0 /* LCPI2_3(%rip) */ - LONG $0xc2ebf9c5 // vpor %xmm2, %xmm0, %xmm0 - LONG $0xc1ebf9c5 // vpor %xmm1, %xmm0, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - NOTL CX - BSFL CX, CX - SUBQ R9, R8 - ADDQ AX, R8 - LEAQ -32(CX)(R8*1), AX - ADDQ DX, AX - BYTE $0x5d // popq %rbp - RET - -// .set L2_0_set_23, LBB2_23-LJTI2_0 -// .set L2_0_set_22, LBB2_22-LJTI2_0 -// .set L2_0_set_21, LBB2_21-LJTI2_0 -// .set L2_0_set_20, LBB2_20-LJTI2_0 -// .set L2_0_set_19, LBB2_19-LJTI2_0 -// .set L2_0_set_18, LBB2_18-LJTI2_0 -// .set L2_0_set_17, LBB2_17-LJTI2_0 -// .set L2_0_set_16, LBB2_16-LJTI2_0 -// .set L2_0_set_15, LBB2_15-LJTI2_0 -// .set L2_0_set_14, LBB2_14-LJTI2_0 -// .set L2_0_set_13, LBB2_13-LJTI2_0 -// .set L2_0_set_12, LBB2_12-LJTI2_0 -// .set L2_0_set_11, LBB2_11-LJTI2_0 -// .set L2_0_set_10, LBB2_10-LJTI2_0 -// .set L2_0_set_9, LBB2_9-LJTI2_0 -LJTI2_0: - LONG $0xffffff01 // .long L2_0_set_23 - LONG $0xfffffefa // .long L2_0_set_22 - LONG $0xfffffef3 // .long L2_0_set_21 - LONG $0xfffffeec // .long L2_0_set_20 - LONG $0xfffffee5 // .long L2_0_set_19 - LONG $0xfffffede // .long L2_0_set_18 - LONG $0xfffffed7 // .long L2_0_set_17 - LONG $0xfffffed0 // .long L2_0_set_16 - LONG $0xfffffec9 // .long L2_0_set_15 - LONG $0xfffffec2 // .long L2_0_set_14 - LONG $0xfffffebb // .long L2_0_set_13 - LONG $0xfffffeb4 // .long L2_0_set_12 - LONG $0xfffffead // .long L2_0_set_11 - LONG $0xfffffea6 // .long L2_0_set_10 - LONG $0xfffffe97 // .long L2_0_set_9 - -_strchr1: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - MOVQ 8(DI), R10 - SUBQ SI, R10 - MOVQ 0(DI), R11 - ADDQ SI, R11 - LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - LONG $0xc9eff1c5 // vpxor %xmm1, %xmm1, %xmm1 - LONG $0x0079e2c4; BYTE $0xc1 // vpshufb %xmm1, %xmm0, %xmm0 - MOVQ R11, CX - MOVQ R10, AX - MOVQ R11, DX - ANDQ $15, CX - JE LBB3_5 - MOVQ R11, AX - ANDQ $-16, AX - LONG $0x0874f9c5 // vpcmpeqb (%rax), %xmm0, %xmm1 - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - SHRQ CX, AX - TESTQ AX, AX - JE LBB3_4 - ORQ $65536, AX - BSFQ AX, CX - CMPQ CX, R10 - MOVQ $-1, AX - LONG $0xc14c0f48 // cmovlq %rcx, %rax - JMP LBB3_3 - -LBB3_4: - MOVL $16, DI - SUBQ CX, DI - LEAQ 0(R11)(DI*1), DX - MOVQ R10, AX - SUBQ DI, AX - -LBB3_5: - CMPQ AX, $64 - JL LBB3_6 - -LBB3_12: - LONG $0x2274f9c5 // vpcmpeqb (%rdx), %xmm0, %xmm4 - LONG $0x5a74f9c5; BYTE $0x10 // vpcmpeqb $16(%rdx), %xmm0, %xmm3 - LONG $0x5274f9c5; BYTE $0x20 // vpcmpeqb $32(%rdx), %xmm0, %xmm2 - LONG $0x4a74f9c5; BYTE $0x30 // vpcmpeqb $48(%rdx), %xmm0, %xmm1 - LONG $0xecebe1c5 // vpor %xmm4, %xmm3, %xmm5 - LONG $0xf1ebe9c5 // vpor %xmm1, %xmm2, %xmm6 - LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 - LONG $0xcdd7f9c5 // vpmovmskb %xmm5, %ecx - TESTW CX, CX - JNE LBB3_14 - ADDQ $64, DX - LEAQ -64(AX), CX - CMPQ AX, $127 - MOVQ CX, AX - JG LBB3_12 - MOVQ R10, AX + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + LEAQ 0(DI)(DX*1), AX + SUBQ DX, SI + JE LBB1_7 + MOVL AX, CX + ANDL $15, CX TESTQ CX, CX - JNS LBB3_8 - JMP LBB3_3 + JE LBB1_7 + LEAQ -1(SI), R9 + XORL DX, DX + MOVQ $4294977024, R8 -LBB3_6: - MOVQ AX, CX - MOVQ R10, AX - TESTQ CX, CX - JS LBB3_3 +LBB1_3: + MOVBLSX 0(AX)(DX*1), CX + CMPL CX, $32 + JA LBB1_5 + BTQ CX, R8 + JAE LBB1_5 + LEAQ 1(DX), R10 + CMPQ R9, DX + JE LBB1_6 + LEAQ 1(AX)(DX*1), CX + ANDL $15, CX + MOVQ R10, DX + TESTQ CX, CX + JNE LBB1_3 -LBB3_8: - LONG $0x0a74f9c5 // vpcmpeqb (%rdx), %xmm0, %xmm1 - LONG $0xc9d779c5 // vpmovmskb %xmm1, %r9d - TESTW R9, R9 - JE LBB3_21 +LBB1_6: + ADDQ R10, AX + SUBQ R10, SI -LBB3_9: - MOVQ DX, R8 +LBB1_7: + CMPQ SI, $16 + JB LBB1_14 + QUAD $0xffffff55056ffac5 // vmovdqu $-171(%rip), %xmm0 /* LCPI1_0(%rip) */ + QUAD $0xffffff5d0d6ffac5 // vmovdqu $-163(%rip), %xmm1 /* LCPI1_1(%rip) */ + QUAD $0xffffff65156ffac5 // vmovdqu $-155(%rip), %xmm2 /* LCPI1_2(%rip) */ + QUAD $0xffffff6d1d6ffac5 // vmovdqu $-147(%rip), %xmm3 /* LCPI1_3(%rip) */ -LBB3_10: - MOVWLZX R9, AX - ORQ $65536, AX - BSFQ AX, DX - MOVQ $-1, AX - CMPQ DX, CX - JGE LBB3_3 - SUBQ R11, R8 - ADDQ DX, R8 +LBB1_9: + LONG $0x206ff9c5 // vmovdqa (%rax), %xmm4 + LONG $0xe874d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm5 + LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 + LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 + LONG $0xf274d9c5 // vpcmpeqb %xmm2, %xmm4, %xmm6 + LONG $0xe374d9c5 // vpcmpeqb %xmm3, %xmm4, %xmm4 + LONG $0xe6ebd9c5 // vpor %xmm6, %xmm4, %xmm4 + LONG $0xe5ebd9c5 // vpor %xmm5, %xmm4, %xmm4 + LONG $0xccd7f9c5 // vpmovmskb %xmm4, %ecx + CMPW CX, $-1 + JNE LBB1_10 + ADDQ $16, AX + ADDQ $-16, SI + CMPQ SI, $15 + JA LBB1_9 + +LBB1_14: + TESTQ SI, SI + JE LBB1_21 + LEAQ 0(AX)(SI*1), R8 + INCQ AX + MOVQ $4294977024, DX + +LBB1_16: + MOVBLSX -1(AX), CX + CMPL CX, $32 + JA LBB1_18 + BTQ CX, DX + JAE LBB1_18 + DECQ SI + INCQ AX + TESTQ SI, SI + JNE LBB1_16 MOVQ R8, AX - JMP LBB3_3 + JMP LBB1_21 -LBB3_14: - LONG $0xc4d7f9c5 // vpmovmskb %xmm4, %eax - TESTW AX, AX - JE LBB3_16 - MOVWLZX AX, AX - SUBQ R11, DX - ORQ $65536, AX - BSFQ AX, AX - ADDQ DX, AX - JMP LBB3_3 - -LBB3_21: - MOVQ R10, AX - CMPQ CX, $15 - JLE LBB3_3 - LEAQ 16(DX), R8 - LONG $0x7479c1c4; BYTE $0x08 // vpcmpeqb (%r8), %xmm0, %xmm1 - LONG $0xc9d779c5 // vpmovmskb %xmm1, %r9d - TESTW R9, R9 - JE LBB3_24 - ADDQ $-16, CX - JMP LBB3_10 - -LBB3_16: - LONG $0xc3d7f9c5 // vpmovmskb %xmm3, %eax - TESTW AX, AX - JE LBB3_18 - MOVWLZX AX, AX - ORQ $65536, AX - BSFQ AX, AX - SUBQ R11, DX - LEAQ 16(DX)(AX*1), AX - JMP LBB3_3 - -LBB3_18: - LONG $0xc2d7f9c5 // vpmovmskb %xmm2, %eax - SUBQ R11, DX - TESTW AX, AX - JE LBB3_20 - MOVWLZX AX, AX - ORQ $65536, AX - BSFQ AX, AX - LEAQ 32(DX)(AX*1), AX - JMP LBB3_3 - -LBB3_24: - MOVQ R10, AX - CMPQ CX, $32 - JL LBB3_3 - LEAQ 32(DX), R8 - LONG $0x7479c1c4; BYTE $0x08 // vpcmpeqb (%r8), %xmm0, %xmm1 - LONG $0xc9d779c5 // vpmovmskb %xmm1, %r9d - TESTW R9, R9 - JE LBB3_27 - ADDQ $-32, CX - JMP LBB3_10 - -LBB3_20: - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - ORQ $65536, AX - BSFQ AX, AX - LEAQ 48(DX)(AX*1), AX - -LBB3_3: - ADDQ AX, SI - CMPQ AX, R10 - MOVQ $-1, AX - LONG $0xc6420f48 // cmovbq %rsi, %rax - BYTE $0x5d // popq %rbp +LBB1_10: + MOVWLZX CX, CX + SUBQ DI, AX + NOTL CX + BSFL CX, CX + ADDQ CX, AX + BYTE $0x5d // popq %rbp RET -LBB3_27: - MOVQ R10, AX - CMPQ CX, $48 - JL LBB3_3 - ADDQ $48, DX - LONG $0x0274f9c5 // vpcmpeqb (%rdx), %xmm0, %xmm0 - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - MOVQ R10, AX - TESTW R9, R9 - JE LBB3_3 - ADDQ $-48, CX - JMP LBB3_9 +LBB1_5: + ADDQ DX, AX -LCPI4_0: - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0x00 // .space 1, '\x00' - BYTE $0xff // .byte 255 - -_strchr2: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - MOVQ 8(DI), R8 - MOVQ R8, R10 - SUBQ SI, R10 - JE LBB4_1 - MOVQ 0(DI), R9 - LEAQ 0(R9)(SI*1), DI - CMPQ R10, $16 - JAE LBB4_3 - LONG $0xc076f9c5 // vpcmpeqd %xmm0, %xmm0, %xmm0 - LEAQ -1(R10), AX - CMPQ AX, $14 - JA LBB4_24 - LONG $0x55058d4c; WORD $0x0001; BYTE $0x00 // leaq $341(%rip), %r8 /* LJTI4_0(%rip) */ - MOVLQSX 0(R8)(AX*4), AX - ADDQ R8, AX - JMP AX - -LBB4_9: - QUAD $0xffffffa1056ffac5 // vmovdqu $-95(%rip), %xmm0 /* LCPI4_0(%rip) */ - LONG $0x2079e3c4; WORD $0x0e47; BYTE $0x0e // vpinsrb $14, $14(%rdi), %xmm0, %xmm0 - -LBB4_10: - LONG $0x2079e3c4; WORD $0x0d47; BYTE $0x0d // vpinsrb $13, $13(%rdi), %xmm0, %xmm0 - -LBB4_11: - LONG $0x2079e3c4; WORD $0x0c47; BYTE $0x0c // vpinsrb $12, $12(%rdi), %xmm0, %xmm0 - -LBB4_12: - LONG $0x2079e3c4; WORD $0x0b47; BYTE $0x0b // vpinsrb $11, $11(%rdi), %xmm0, %xmm0 - -LBB4_13: - LONG $0x2079e3c4; WORD $0x0a47; BYTE $0x0a // vpinsrb $10, $10(%rdi), %xmm0, %xmm0 - -LBB4_14: - LONG $0x2079e3c4; WORD $0x0947; BYTE $0x09 // vpinsrb $9, $9(%rdi), %xmm0, %xmm0 - -LBB4_15: - LONG $0x2079e3c4; WORD $0x0847; BYTE $0x08 // vpinsrb $8, $8(%rdi), %xmm0, %xmm0 - -LBB4_16: - LONG $0x2079e3c4; WORD $0x0747; BYTE $0x07 // vpinsrb $7, $7(%rdi), %xmm0, %xmm0 - -LBB4_17: - LONG $0x2079e3c4; WORD $0x0647; BYTE $0x06 // vpinsrb $6, $6(%rdi), %xmm0, %xmm0 - -LBB4_18: - LONG $0x2079e3c4; WORD $0x0547; BYTE $0x05 // vpinsrb $5, $5(%rdi), %xmm0, %xmm0 - -LBB4_19: - LONG $0x2079e3c4; WORD $0x0447; BYTE $0x04 // vpinsrb $4, $4(%rdi), %xmm0, %xmm0 - -LBB4_20: - LONG $0x2079e3c4; WORD $0x0347; BYTE $0x03 // vpinsrb $3, $3(%rdi), %xmm0, %xmm0 - -LBB4_21: - LONG $0x2079e3c4; WORD $0x0247; BYTE $0x02 // vpinsrb $2, $2(%rdi), %xmm0, %xmm0 - -LBB4_22: - LONG $0x2079e3c4; WORD $0x0147; BYTE $0x01 // vpinsrb $1, $1(%rdi), %xmm0, %xmm0 - -LBB4_23: - LONG $0x2079e3c4; WORD $0x0007 // vpinsrb $0, (%rdi), %xmm0, %xmm0 - -LBB4_24: - MOVBLZX DX, AX - LONG $0xc86ef9c5 // vmovd %eax, %xmm1 - LONG $0xd2efe9c5 // vpxor %xmm2, %xmm2, %xmm2 - LONG $0x0071e2c4; BYTE $0xca // vpshufb %xmm2, %xmm1, %xmm1 - LONG $0xc874f1c5 // vpcmpeqb %xmm0, %xmm1, %xmm1 - MOVBLZX CX, AX - LONG $0xd86ef9c5 // vmovd %eax, %xmm3 - LONG $0x0061e2c4; BYTE $0xd2 // vpshufb %xmm2, %xmm3, %xmm2 - LONG $0xc074e9c5 // vpcmpeqb %xmm0, %xmm2, %xmm0 - LONG $0xc1ebf9c5 // vpor %xmm1, %xmm0, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - ORL $-65536, AX - BSFL AX, CX - JMP LBB4_25 - -LBB4_1: - XORL CX, CX - JMP LBB4_25 - -LBB4_3: - MOVBLZX DX, AX - LONG $0xc06ef9c5 // vmovd %eax, %xmm0 - LONG $0xc9eff1c5 // vpxor %xmm1, %xmm1, %xmm1 - LONG $0x0079e2c4; BYTE $0xc1 // vpshufb %xmm1, %xmm0, %xmm0 - MOVBLZX CX, AX - LONG $0xd06ef9c5 // vmovd %eax, %xmm2 - LONG $0x0069e2c4; BYTE $0xc9 // vpshufb %xmm1, %xmm2, %xmm1 - LEAQ -16(R10), R11 - ANDQ $-16, R11 - XORL CX, CX - MOVQ R10, AX - -LBB4_4: - LONG $0x176ffac5 // vmovdqu (%rdi), %xmm2 - LONG $0xda74f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm3 - LONG $0xd274f1c5 // vpcmpeqb %xmm2, %xmm1, %xmm2 - LONG $0xd3ebe9c5 // vpor %xmm3, %xmm2, %xmm2 - LONG $0xd2d7f9c5 // vpmovmskb %xmm2, %edx - ORL $-65536, DX - BSFL DX, DX - ADDQ DX, CX - CMPL DX, $16 - JB LBB4_25 - ADDQ $16, DI - ADDQ $-16, AX - CMPQ AX, $15 - JA LBB4_4 - LONG $0x6f7a81c4; WORD $0x0154; BYTE $0xf0 // vmovdqu $-16(%r9,%r8), %xmm2 - LONG $0xc274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm0 - LONG $0xca74f1c5 // vpcmpeqb %xmm2, %xmm1, %xmm1 - LONG $0xc0ebf1c5 // vpor %xmm0, %xmm1, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - ORL $-65536, AX - BSFL AX, AX - MOVQ R10, DX - SUBQ R11, DX - ADDQ CX, DX - LEAQ -32(AX)(DX*1), CX - -LBB4_25: - ADDQ CX, SI - CMPQ CX, R10 - MOVQ $-1, AX - LONG $0xc6420f48 // cmovbq %rsi, %rax - BYTE $0x5d // popq %rbp +LBB1_21: + SUBQ DI, AX + BYTE $0x5d // popq %rbp RET -// .set L4_0_set_23, LBB4_23-LJTI4_0 -// .set L4_0_set_22, LBB4_22-LJTI4_0 -// .set L4_0_set_21, LBB4_21-LJTI4_0 -// .set L4_0_set_20, LBB4_20-LJTI4_0 -// .set L4_0_set_19, LBB4_19-LJTI4_0 -// .set L4_0_set_18, LBB4_18-LJTI4_0 -// .set L4_0_set_17, LBB4_17-LJTI4_0 -// .set L4_0_set_16, LBB4_16-LJTI4_0 -// .set L4_0_set_15, LBB4_15-LJTI4_0 -// .set L4_0_set_14, LBB4_14-LJTI4_0 -// .set L4_0_set_13, LBB4_13-LJTI4_0 -// .set L4_0_set_12, LBB4_12-LJTI4_0 -// .set L4_0_set_11, LBB4_11-LJTI4_0 -// .set L4_0_set_10, LBB4_10-LJTI4_0 -// .set L4_0_set_9, LBB4_9-LJTI4_0 -LJTI4_0: - LONG $0xffffff1e // .long L4_0_set_23 - LONG $0xffffff17 // .long L4_0_set_22 - LONG $0xffffff10 // .long L4_0_set_21 - LONG $0xffffff09 // .long L4_0_set_20 - LONG $0xffffff02 // .long L4_0_set_19 - LONG $0xfffffefb // .long L4_0_set_18 - LONG $0xfffffef4 // .long L4_0_set_17 - LONG $0xfffffeed // .long L4_0_set_16 - LONG $0xfffffee6 // .long L4_0_set_15 - LONG $0xfffffedf // .long L4_0_set_14 - LONG $0xfffffed8 // .long L4_0_set_13 - LONG $0xfffffed1 // .long L4_0_set_12 - LONG $0xfffffeca // .long L4_0_set_11 - LONG $0xfffffec3 // .long L4_0_set_10 - LONG $0xfffffeb4 // .long L4_0_set_9 +LBB1_18: + NOTQ DI + ADDQ DI, AX + BYTE $0x5d // popq %rbp + RET -LCPI5_0: +LCPI2_0: QUAD $0x8000000000000000 // .quad 0x8000000000000000 QUAD $0x8000000000000000 // .quad 0x8000000000000000 -LCPI5_1: +LCPI2_1: QUAD $0x3fd34413509f79fe // .quad 0x3fd34413509f79fe -LCPI5_2: +LCPI2_2: QUAD $0x4075b00000000000 // .quad 0x4075b00000000000 -LCPI5_3: +LCPI2_3: QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' @@ -884,25 +221,25 @@ _f64toa: MOVQ DI, R15 LONG $0xc957f1c5 // vxorpd %xmm1, %xmm1, %xmm1 LONG $0xc12ef9c5 // vucomisd %xmm1, %xmm0 - JNE LBB5_2 - JP LBB5_2 + JNE LBB2_2 + JP LBB2_2 MOVB $48, 0(R15) MOVL $1, AX - JMP LBB5_89 + JMP LBB2_89 -LBB5_2: +LBB2_2: LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 - JBE LBB5_4 - QUAD $0xffffff840557f9c5 // vxorpd $-124(%rip), %xmm0, %xmm0 /* LCPI5_0(%rip) */ + JBE LBB2_4 + QUAD $0xffffff840557f9c5 // vxorpd $-124(%rip), %xmm0, %xmm0 /* LCPI2_0(%rip) */ MOVB $45, 0(R15) INCQ R15 MOVL $1, -44(BP) - JMP LBB5_5 + JMP LBB2_5 -LBB5_4: +LBB2_4: MOVL $0, -44(BP) -LBB5_5: +LBB2_5: LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx MOVQ $4503599627370496, DX LEAQ -1(DX), SI @@ -937,8 +274,8 @@ LBB5_5: MOVL $-61, CX SUBL R12, CX LONG $0xc12aebc5 // vcvtsi2sd %ecx, %xmm2, %xmm0 - QUAD $0xfffffef90559fbc5 // vmulsd $-263(%rip), %xmm0, %xmm0 /* LCPI5_1(%rip) */ - QUAD $0xfffffef90558fbc5 // vaddsd $-263(%rip), %xmm0, %xmm0 /* LCPI5_2(%rip) */ + QUAD $0xfffffef90559fbc5 // vmulsd $-263(%rip), %xmm0, %xmm0 /* LCPI2_1(%rip) */ + QUAD $0xfffffef90558fbc5 // vaddsd $-263(%rip), %xmm0, %xmm0 /* LCPI2_2(%rip) */ LONG $0xc82cfbc5 // vcvttsd2si %xmm0, %ecx LONG $0xc8e6f9c5 // vcvttpd2dq %xmm0, %xmm1 LONG $0xc9e6fac5 // vcvtdq2pd %xmm1, %xmm1 @@ -953,9 +290,9 @@ LBB5_5: INCL DX MOVL $348, CX MOVQ CX, -64(BP) - LONG $0x150d8d48; WORD $0x0035; BYTE $0x00 // leaq $13589(%rip), %rcx /* _TabPowE(%rip) */ - MOVBLSX 0(CX)(DX*2), SI - LONG $0xb80d8d48; WORD $0x0035; BYTE $0x00 // leaq $13752(%rip), %rcx /* _TabPowF(%rip) */ + LONG $0x5d0d8d48; WORD $0x0038; BYTE $0x00 // leaq $14429(%rip), %rcx /* _TabPowE(%rip) */ + MOVWLSX 0(CX)(DX*2), SI + LONG $0x000d8d48; WORD $0x0039; BYTE $0x00 // leaq $14592(%rip), %rcx /* _TabPowF(%rip) */ MOVQ 0(CX)(DX*8), R8 BSRQ AX, CX XORL $63, CX @@ -996,33 +333,33 @@ LBB5_5: DECQ DI MOVL $1, SI CMPQ R9, $10 - JB LBB5_14 + JB LBB2_14 MOVL $2, SI CMPQ R9, $100 - JB LBB5_14 + JB LBB2_14 MOVL $3, SI CMPQ R9, $1000 - JB LBB5_14 + JB LBB2_14 MOVL $4, SI CMPQ R9, $10000 - JB LBB5_14 + JB LBB2_14 MOVL $5, SI CMPQ R9, $100000 - JB LBB5_14 + JB LBB2_14 MOVL $6, SI CMPQ R9, $1000000 - JB LBB5_14 + JB LBB2_14 MOVL $7, SI CMPQ R9, $10000000 - JB LBB5_14 + JB LBB2_14 MOVL $8, SI CMPQ R9, $100000000 - JB LBB5_14 + JB LBB2_14 CMPQ R9, $1000000000 MOVL $10, SI SBBL $0, SI -LBB5_14: +LBB2_14: MOVQ -64(BP), CX MOVQ R14, -72(BP) SUBL R14, CX @@ -1032,16 +369,16 @@ LBB5_14: MOVQ AX, -80(BP) MOVQ DI, -128(BP) ANDQ DI, R12 - LONG $0x813d8d48; WORD $0x0009; BYTE $0x00 // leaq $2433(%rip), %rdi /* LJTI5_0(%rip) */ + LONG $0x813d8d48; WORD $0x0009; BYTE $0x00 // leaq $2433(%rip), %rdi /* LJTI2_0(%rip) */ MOVQ R15, -56(BP) - JMP LBB5_17 + JMP LBB2_17 -LBB5_15: +LBB2_15: ADDB $48, R9 MOVB R9, 0(R15) INCQ R15 -LBB5_16: +LBB2_16: MOVQ R13, BX MOVL R10, CX SHLQ CX, BX @@ -1049,86 +386,86 @@ LBB5_16: MOVQ R8, R14 MOVQ R13, R9 SUBQ AX, R14 - JAE LBB5_43 + JAE LBB2_43 -LBB5_17: +LBB2_17: TESTL SI, SI - JLE LBB5_31 + JLE LBB2_31 DECL SI MOVLQSX 0(DI)(SI*4), AX ADDQ DI, AX XORL R13, R13 JMP AX -LBB5_19: +LBB2_19: MOVQ R9, AX MOVQ $-3689348814741910323, CX MULQ CX SHRQ $3, DX LEAQ 0(DX)(DX*1), AX LEAQ 0(AX)(AX*4), AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_20: +LBB2_20: MOVQ R9, AX SHRQ $2, AX MOVQ $2951479051793528259, CX MULQ CX SHRQ $2, DX IMUL3Q $100, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_21: +LBB2_21: MOVQ R9, AX SHRQ $3, AX MOVQ $2361183241434822607, CX MULQ CX SHRQ $4, DX IMUL3Q $1000, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_22: +LBB2_22: MOVQ R9, AX MOVQ $3777893186295716171, CX MULQ CX SHRQ $11, DX IMUL3Q $10000, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_23: +LBB2_23: MOVQ R9, AX SHRQ $5, AX MOVQ $755578637259143235, CX MULQ CX SHRQ $7, DX IMUL3Q $100000, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_24: +LBB2_24: MOVQ R9, AX MOVQ $4835703278458516699, CX MULQ CX SHRQ $18, DX IMUL3Q $1000000, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_25: +LBB2_25: MOVQ R9, AX MOVQ $-2972493582642298179, CX MULQ CX SHRQ $23, DX IMUL3Q $10000000, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_26: +LBB2_26: MOVQ R9, AX MOVQ $-6067343680855748867, CX MULQ CX SHRQ $26, DX IMUL3Q $100000000, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_27: +LBB2_27: MOVQ R9, AX SHRQ $9, AX MOVQ $19342813113834067, CX @@ -1136,37 +473,37 @@ LBB5_27: SHRQ $11, DX IMUL3Q $1000000000, DX, AX -LBB5_28: +LBB2_28: SUBQ AX, R9 MOVQ R9, R13 MOVQ DX, R9 -LBB5_29: +LBB2_29: CMPQ R15, -56(BP) - JA LBB5_15 + JA LBB2_15 TESTL R9, R9 - JE LBB5_16 - JMP LBB5_15 + JE LBB2_16 + JMP LBB2_15 -LBB5_31: +LBB2_31: XORL SI, SI MOVQ -56(BP), R14 MOVQ -136(BP), R9 MOVQ -128(BP), DI - JMP LBB5_34 + JMP LBB2_34 -LBB5_32: +LBB2_32: ADDB $48, DX MOVB DX, 0(R15) INCQ R15 -LBB5_33: +LBB2_33: DECL SI MOVQ R8, CX SUBQ R12, CX - JA LBB5_36 + JA LBB2_36 -LBB5_34: +LBB2_34: MOVQ R8, AX ADDQ R12, R12 LEAQ 0(R12)(R12*4), R12 @@ -1177,24 +514,24 @@ LBB5_34: LEAQ 0(AX)(AX*4), R8 ANDQ DI, R12 CMPQ R15, R14 - JA LBB5_32 + JA LBB2_32 MOVBLZX DX, CX TESTQ CX, CX - JE LBB5_33 - JMP LBB5_32 + JE LBB2_33 + JMP LBB2_32 -LBB5_36: +LBB2_36: CMPQ CX, R9 - JB LBB5_50 + JB LBB2_50 MOVL SI, CX NEGL CX MOVLQSX CX, CX - LONG $0x5e158d48; WORD $0x0035; BYTE $0x00 // leaq $13662(%rip), %rdx /* _TabPow10(%rip) */ + LONG $0xa6158d48; WORD $0x0038; BYTE $0x00 // leaq $14502(%rip), %rdx /* _TabPow10(%rip) */ MOVQ -80(BP), DI IMULQ 0(DX)(CX*8), DI CMPQ R12, DI MOVQ -64(BP), R10 - JAE LBB5_53 + JAE LBB2_53 LEAQ 0(AX)(AX*4), AX LEAQ 0(R9)(R12*1), CX SUBQ CX, AX @@ -1203,37 +540,37 @@ LBB5_36: MOVQ DI, BX SUBQ R12, BX -LBB5_39: +LBB2_39: CMPQ CX, DI - JB LBB5_41 + JB LBB2_41 LEAQ 0(R8)(CX*1), DX CMPQ BX, DX - JBE LBB5_53 + JBE LBB2_53 -LBB5_41: +LBB2_41: DECB -1(R15) SUBQ R9, AX SETCS DX CMPQ CX, DI - JAE LBB5_53 + JAE LBB2_53 ADDQ R9, CX SUBQ R9, BX TESTB DX, DX - JE LBB5_39 - JMP LBB5_53 + JE LBB2_39 + JMP LBB2_53 -LBB5_43: +LBB2_43: MOVL SI, CX - LONG $0xf4158d48; WORD $0x0034; BYTE $0x00 // leaq $13556(%rip), %rdx /* _TabPow10(%rip) */ + LONG $0x3c158d48; WORD $0x0038; BYTE $0x00 // leaq $14396(%rip), %rdx /* _TabPow10(%rip) */ MOVQ 0(DX)(CX*8), DI MOVL R10, CX SHLQ CX, DI MOVQ -80(BP), R8 CMPQ AX, R8 - JAE LBB5_51 + JAE LBB2_51 CMPQ R14, DI MOVQ -64(BP), R10 - JB LBB5_52 + JB LBB2_52 SUBQ -88(BP), R11 ADDQ DI, R12 LEAQ 0(R12)(BX*1), CX @@ -1255,54 +592,54 @@ LBB5_43: ADDQ DX, AX MOVQ -56(BP), R14 -LBB5_46: +LBB2_46: CMPQ CX, R8 - JB LBB5_48 + JB LBB2_48 CMPQ AX, BX - JBE LBB5_53 + JBE LBB2_53 -LBB5_48: +LBB2_48: DECB -1(R15) SUBQ DI, R11 SETCS DX CMPQ CX, R8 - JAE LBB5_53 + JAE LBB2_53 ADDQ DI, CX ADDQ DI, BX SUBQ DI, AX TESTB DX, DX - JE LBB5_46 - JMP LBB5_53 + JE LBB2_46 + JMP LBB2_53 -LBB5_50: +LBB2_50: MOVQ -64(BP), R10 - JMP LBB5_53 + JMP LBB2_53 -LBB5_51: +LBB2_51: MOVQ -56(BP), R14 MOVQ -64(BP), R10 - JMP LBB5_53 + JMP LBB2_53 -LBB5_52: +LBB2_52: MOVQ -56(BP), R14 -LBB5_53: +LBB2_53: MOVQ R15, R12 SUBQ R14, R12 ADDL SI, R10 LEAL 0(R10)(R12*1), R11 TESTL R10, R10 - JS LBB5_59 + JS LBB2_59 CMPL R11, $21 - JG LBB5_59 + JG LBB2_59 TESTL R10, R10 - JE LBB5_86 + JE LBB2_86 MOVLQSX R12, R9 ADDQ R14, R9 SUBL -72(BP), SI ADDL $347, SI CMPL SI, $127 - JB LBB5_84 + JB LBB2_84 INCQ SI MOVQ SI, R8 ANDQ $-128, R8 @@ -1313,62 +650,62 @@ LBB5_53: MOVL BX, CX ANDL $3, CX CMPQ AX, $384 - JAE LBB5_77 + JAE LBB2_77 XORL DX, DX - JMP LBB5_79 + JMP LBB2_79 -LBB5_59: +LBB2_59: LEAL -1(R11), DI CMPL DI, $20 - JA LBB5_63 + JA LBB2_63 LEAL 1(R12), AX CMPL AX, R11 - JLE LBB5_72 + JLE LBB2_72 MOVLQSX AX, DX MOVL R11, CX -LBB5_62: +LBB2_62: MOVBLZX -2(R14)(DX*1), BX MOVB BX, -1(R14)(DX*1) LEAQ -1(DX), SI MOVQ SI, DX CMPQ SI, CX - JG LBB5_62 - JMP LBB5_73 + JG LBB2_62 + JMP LBB2_73 -LBB5_63: +LBB2_63: LEAL 5(R11), AX CMPL AX, $5 - JA LBB5_74 + JA LBB2_74 MOVQ R10, R15 MOVL $2, AX MOVL $2, DX SUBL R11, DX LEAL 0(DX)(R12*1), CX TESTL CX, CX - JLE LBB5_68 + JLE LBB2_68 MOVL CX, BX MOVL DX, R10 CMPL CX, $128 - JAE LBB5_96 + JAE LBB2_96 -LBB5_66: +LBB2_66: INCQ BX MOVQ R14, CX SUBQ R10, CX -LBB5_67: +LBB2_67: MOVBLZX -2(CX)(BX*1), DX MOVB DX, -2(R14)(BX*1) DECQ BX CMPQ BX, $1 - JG LBB5_67 + JG LBB2_67 -LBB5_68: +LBB2_68: SUBL R15, AX MOVW $11824, 0(R14) TESTL R11, R11 - JE LBB5_87 + JE LBB2_87 NEGL R11 LEAQ 2(R14), DI MOVQ -72(BP), DX @@ -1376,7 +713,7 @@ LBB5_68: SUBL R12, DX ADDL $-349, DX CMPL DX, $127 - JB LBB5_121 + JB LBB2_121 INCQ DX MOVQ DX, R8 ANDQ $-128, DX @@ -1387,39 +724,39 @@ LBB5_68: MOVL CX, SI ANDL $3, SI CMPQ BX, $384 - JAE LBB5_113 + JAE LBB2_113 XORL BX, BX - JMP LBB5_115 + JMP LBB2_115 -LBB5_72: +LBB2_72: MOVL R11, CX -LBB5_73: +LBB2_73: MOVL -44(BP), BX MOVB $46, 0(R14)(CX*1) - JMP LBB5_88 + JMP LBB2_88 -LBB5_74: +LBB2_74: CMPL R12, $1 - JNE LBB5_90 + JNE LBB2_90 MOVB $101, 1(R14) LEAQ 2(R14), DX TESTL DI, DI - JS LBB5_103 + JS LBB2_103 MOVQ DX, R14 MOVL DI, CX MOVL -44(BP), BX - JMP LBB5_105 + JMP LBB2_105 -LBB5_77: +LBB2_77: MOVLQSX R12, AX LEAQ 480(AX)(R14*1), AX ANDQ $-4, BX NEGQ BX XORL DX, DX - QUAD $0xfffff8f60528fdc5 // vmovapd $-1802(%rip), %ymm0 /* LCPI5_3(%rip) */ + QUAD $0xfffff8f60528fdc5 // vmovapd $-1802(%rip), %ymm0 /* LCPI2_3(%rip) */ -LBB5_78: +LBB2_78: QUAD $0xfffe20108411fdc5; BYTE $0xff // vmovupd %ymm0, $-480(%rax,%rdx) QUAD $0xfffe40108411fdc5; BYTE $0xff // vmovupd %ymm0, $-448(%rax,%rdx) QUAD $0xfffe60108411fdc5; BYTE $0xff // vmovupd %ymm0, $-416(%rax,%rdx) @@ -1438,53 +775,53 @@ LBB5_78: LONG $0x0411fdc5; BYTE $0x10 // vmovupd %ymm0, (%rax,%rdx) ADDQ $512, DX ADDQ $4, BX - JNE LBB5_78 + JNE LBB2_78 -LBB5_79: +LBB2_79: TESTQ CX, CX - JE LBB5_82 + JE LBB2_82 SUBL R14, R15 MOVLQSX R15, AX ADDQ AX, DX LEAQ 96(R14)(DX*1), AX NEGQ CX - QUAD $0xfffff8470528fdc5 // vmovapd $-1977(%rip), %ymm0 /* LCPI5_3(%rip) */ + QUAD $0xfffff8470528fdc5 // vmovapd $-1977(%rip), %ymm0 /* LCPI2_3(%rip) */ -LBB5_81: +LBB2_81: LONG $0x4011fdc5; BYTE $0xa0 // vmovupd %ymm0, $-96(%rax) LONG $0x4011fdc5; BYTE $0xc0 // vmovupd %ymm0, $-64(%rax) LONG $0x4011fdc5; BYTE $0xe0 // vmovupd %ymm0, $-32(%rax) LONG $0x0011fdc5 // vmovupd %ymm0, (%rax) SUBQ $-128, AX INCQ CX - JNE LBB5_81 + JNE LBB2_81 -LBB5_82: +LBB2_82: CMPQ SI, R8 - JE LBB5_86 + JE LBB2_86 SUBL R8, R10 ADDQ R8, R9 -LBB5_84: +LBB2_84: MOVL R10, AX XORL CX, CX -LBB5_85: +LBB2_85: MOVB $48, 0(R9)(CX*1) INCQ CX CMPL AX, CX - JNE LBB5_85 + JNE LBB2_85 -LBB5_86: +LBB2_86: MOVL R11, AX -LBB5_87: +LBB2_87: MOVL -44(BP), BX -LBB5_88: +LBB2_88: ADDL BX, AX -LBB5_89: +LBB2_89: ADDQ $96, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 @@ -1495,42 +832,42 @@ LBB5_89: WORD $0xf8c5; BYTE $0x77 // vzeroupper RET -LBB5_90: +LBB2_90: LEAL 1(R12), AX CMPL AX, $2 - JL LBB5_93 + JL LBB2_93 MOVL AX, AX INCQ AX -LBB5_92: +LBB2_92: MOVBLZX -3(R14)(AX*1), CX MOVB CX, -2(R14)(AX*1) DECQ AX CMPQ AX, $2 - JG LBB5_92 + JG LBB2_92 -LBB5_93: +LBB2_93: MOVB $46, 1(R14) MOVLQSX R12, AX MOVB $101, 1(R14)(AX*1) LEAQ 2(R14)(AX*1), DX TESTL DI, DI MOVL -44(BP), BX - JS LBB5_108 + JS LBB2_108 MOVQ DX, CX - JMP LBB5_109 + JMP LBB2_109 -LBB5_96: +LBB2_96: LEAQ -1(BX), DI LEAQ -1(R14)(BX*1), DX CMPQ DI, DX - JA LBB5_66 + JA LBB2_66 MOVQ R10, R8 NOTQ R8 LEAQ 0(R8)(BX*1), DX ADDQ R14, DX CMPQ DI, DX - JA LBB5_66 + JA LBB2_66 TESTL CX, CX MOVL $1, CX LONG $0xcb440f48 // cmoveq %rbx, %rcx @@ -1539,14 +876,14 @@ LBB5_96: SUBQ R10, DI ADDQ R14, DI CMPQ DX, DI - JAE LBB5_100 + JAE LBB2_100 LEAQ 0(R14)(BX*1), DX ADDQ R8, CX ADDQ R14, CX CMPQ CX, DX - JB LBB5_66 + JB LBB2_66 -LBB5_100: +LBB2_100: MOVL BX, R8 ANDL $-128, R8 LEAQ -128(R8), CX @@ -1554,7 +891,7 @@ LBB5_100: SHRQ $7, R9 INCQ R9 TESTQ CX, CX - JE LBB5_125 + JE LBB2_125 LEAQ -32(BX)(R14*1), CX MOVQ R10, DI NEGQ DI @@ -1563,7 +900,7 @@ LBB5_100: NEGQ DX MOVQ $-1, R14 -LBB5_102: +LBB2_102: LONG $0x4410fcc5; WORD $0xa039 // vmovups $-96(%rcx,%rdi), %ymm0 LONG $0x4c10fcc5; WORD $0xc039 // vmovups $-64(%rcx,%rdi), %ymm1 LONG $0x5410fcc5; WORD $0xe039 // vmovups $-32(%rcx,%rdi), %ymm2 @@ -1583,39 +920,39 @@ LBB5_102: ADDQ $-256, R14 ADDQ $-256, CX ADDQ $2, DX - JNE LBB5_102 - JMP LBB5_126 + JNE LBB2_102 + JMP LBB2_126 -LBB5_103: +LBB2_103: MOVL DI, CX NEGL CX MOVB $45, 2(R14) ADDQ $3, R14 CMPL DI, $-9 MOVL -44(BP), BX - JL LBB5_105 + JL LBB2_105 ADDB $48, CX MOVB CX, 0(R14) MOVL $4, AX - JMP LBB5_88 + JMP LBB2_88 -LBB5_105: +LBB2_105: MOVL R14, AX SUBL DX, AX CMPL CX, $99 - JG LBB5_107 + JG LBB2_107 ADDL $4, AX MOVL CX, CX - LONG $0x63358d48; WORD $0x0030; BYTE $0x00 // leaq $12387(%rip), %rsi /* _Digits(%rip) */ + LONG $0xab358d48; WORD $0x0033; BYTE $0x00 // leaq $13227(%rip), %rsi /* _Digits(%rip) */ MOVB 0(SI)(CX*2), DX ADDQ CX, CX MOVB DX, 0(R14) ORL $1, CX MOVB 0(CX)(SI*1), CX MOVB CX, 1(R14) - JMP LBB5_88 + JMP LBB2_88 -LBB5_107: +LBB2_107: ADDL $5, AX MOVL CX, DX IMUL3Q $1374389535, DX, DX @@ -1624,53 +961,53 @@ LBB5_107: MOVB SI, 0(R14) WORD $0xd26b; BYTE $0x64 // imull $100, %edx, %edx SUBL DX, CX - LONG $0x29358d48; WORD $0x0030; BYTE $0x00 // leaq $12329(%rip), %rsi /* _Digits(%rip) */ + LONG $0x71358d48; WORD $0x0033; BYTE $0x00 // leaq $13169(%rip), %rsi /* _Digits(%rip) */ MOVB 0(SI)(CX*2), DX MOVB 1(SI)(CX*2), CX MOVB DX, 1(R14) MOVB CX, 2(R14) - JMP LBB5_88 + JMP LBB2_88 -LBB5_108: +LBB2_108: NEGL DI LEAQ 1(DX), CX MOVB $45, 0(DX) -LBB5_109: +LBB2_109: CMPL DI, $9 - JG LBB5_111 + JG LBB2_111 MOVL CX, AX SUBL DX, AX LEAL 3(R12)(AX*1), AX ADDB $48, DI MOVB DI, 0(CX) - JMP LBB5_88 + JMP LBB2_88 -LBB5_111: +LBB2_111: LEAL 2(R12), SI MOVL CX, AX SUBL DX, AX ADDL SI, AX CMPL DI, $99 - JG LBB5_124 + JG LBB2_124 ADDL $2, AX MOVL DI, DX - LONG $0xd2358d48; WORD $0x002f; BYTE $0x00 // leaq $12242(%rip), %rsi /* _Digits(%rip) */ + LONG $0x1a358d48; WORD $0x0033; BYTE $0x00 // leaq $13082(%rip), %rsi /* _Digits(%rip) */ MOVB 0(SI)(DX*2), DI ADDQ DX, DX MOVB DI, 0(CX) ORL $1, DX MOVB 0(DX)(SI*1), DX MOVB DX, 1(CX) - JMP LBB5_88 + JMP LBB2_88 -LBB5_113: +LBB2_113: ANDQ $-4, CX NEGQ CX XORL BX, BX - QUAD $0xfffff5a30528fdc5 // vmovapd $-2653(%rip), %ymm0 /* LCPI5_3(%rip) */ + QUAD $0xfffff5a30528fdc5 // vmovapd $-2653(%rip), %ymm0 /* LCPI2_3(%rip) */ -LBB5_114: +LBB2_114: LONG $0x117dc1c4; WORD $0x1e44; BYTE $0x02 // vmovupd %ymm0, $2(%r14,%rbx) LONG $0x117dc1c4; WORD $0x1e44; BYTE $0x22 // vmovupd %ymm0, $34(%r14,%rbx) LONG $0x117dc1c4; WORD $0x1e44; BYTE $0x42 // vmovupd %ymm0, $66(%r14,%rbx) @@ -1689,42 +1026,42 @@ LBB5_114: QUAD $0x01e21e84117dc1c4; WORD $0x0000 // vmovupd %ymm0, $482(%r14,%rbx) ADDQ $512, BX ADDQ $4, CX - JNE LBB5_114 + JNE LBB2_114 -LBB5_115: +LBB2_115: TESTQ SI, SI - JE LBB5_118 + JE LBB2_118 LEAQ 98(BX)(R14*1), CX NEGQ SI - QUAD $0xfffff4e90528fdc5 // vmovapd $-2839(%rip), %ymm0 /* LCPI5_3(%rip) */ + QUAD $0xfffff4e90528fdc5 // vmovapd $-2839(%rip), %ymm0 /* LCPI2_3(%rip) */ -LBB5_117: +LBB2_117: LONG $0x4111fdc5; BYTE $0xa0 // vmovupd %ymm0, $-96(%rcx) LONG $0x4111fdc5; BYTE $0xc0 // vmovupd %ymm0, $-64(%rcx) LONG $0x4111fdc5; BYTE $0xe0 // vmovupd %ymm0, $-32(%rcx) LONG $0x0111fdc5 // vmovupd %ymm0, (%rcx) SUBQ $-128, CX INCQ SI - JNE LBB5_117 + JNE LBB2_117 -LBB5_118: +LBB2_118: CMPQ R8, DX - JE LBB5_87 + JE LBB2_87 SUBL DX, R11 ADDQ DX, DI -LBB5_121: +LBB2_121: MOVL R11, CX XORL DX, DX -LBB5_122: +LBB2_122: MOVB $48, 0(DI)(DX*1) INCQ DX CMPL CX, DX - JNE LBB5_122 - JMP LBB5_87 + JNE LBB2_122 + JMP LBB2_87 -LBB5_124: +LBB2_124: ADDL $3, AX MOVL DI, DX IMUL3Q $1374389535, DX, DX @@ -1733,19 +1070,19 @@ LBB5_124: MOVB SI, 0(CX) WORD $0xd26b; BYTE $0x64 // imull $100, %edx, %edx SUBL DX, DI - LONG $0x8d158d48; WORD $0x002e; BYTE $0x00 // leaq $11917(%rip), %rdx /* _Digits(%rip) */ + LONG $0xd5158d48; WORD $0x0031; BYTE $0x00 // leaq $12757(%rip), %rdx /* _Digits(%rip) */ MOVB 0(DX)(DI*2), SI MOVB 1(DX)(DI*2), DX MOVB SI, 1(CX) MOVB DX, 2(CX) - JMP LBB5_88 + JMP LBB2_88 -LBB5_125: +LBB2_125: MOVQ $-1, R14 -LBB5_126: +LBB2_126: TESTB $1, R9 - JE LBB5_128 + JE LBB2_128 ADDQ BX, R14 MOVQ R14, CX SUBQ R10, CX @@ -1759,41 +1096,41 @@ LBB5_126: LONG $0x117da1c4; WORD $0x324c; BYTE $0xa1 // vmovupd %ymm1, $-95(%rdx,%r14) LONG $0x117da1c4; WORD $0x3244; BYTE $0x81 // vmovupd %ymm0, $-127(%rdx,%r14) -LBB5_128: +LBB2_128: CMPQ R8, BX MOVQ -56(BP), R14 - JE LBB5_68 + JE LBB2_68 ANDL $127, BX - JMP LBB5_66 + JMP LBB2_66 -// .set L5_0_set_29, LBB5_29-LJTI5_0 -// .set L5_0_set_19, LBB5_19-LJTI5_0 -// .set L5_0_set_20, LBB5_20-LJTI5_0 -// .set L5_0_set_21, LBB5_21-LJTI5_0 -// .set L5_0_set_22, LBB5_22-LJTI5_0 -// .set L5_0_set_23, LBB5_23-LJTI5_0 -// .set L5_0_set_24, LBB5_24-LJTI5_0 -// .set L5_0_set_25, LBB5_25-LJTI5_0 -// .set L5_0_set_26, LBB5_26-LJTI5_0 -// .set L5_0_set_27, LBB5_27-LJTI5_0 -LJTI5_0: - LONG $0xfffff7e7 // .long L5_0_set_29 - LONG $0xfffff6c1 // .long L5_0_set_19 - LONG $0xfffff6e2 // .long L5_0_set_20 - LONG $0xfffff703 // .long L5_0_set_21 - LONG $0xfffff727 // .long L5_0_set_22 - LONG $0xfffff747 // .long L5_0_set_23 - LONG $0xfffff768 // .long L5_0_set_24 - LONG $0xfffff785 // .long L5_0_set_25 - LONG $0xfffff7a2 // .long L5_0_set_26 - LONG $0xfffff7bf // .long L5_0_set_27 +// .set L2_0_set_29, LBB2_29-LJTI2_0 +// .set L2_0_set_19, LBB2_19-LJTI2_0 +// .set L2_0_set_20, LBB2_20-LJTI2_0 +// .set L2_0_set_21, LBB2_21-LJTI2_0 +// .set L2_0_set_22, LBB2_22-LJTI2_0 +// .set L2_0_set_23, LBB2_23-LJTI2_0 +// .set L2_0_set_24, LBB2_24-LJTI2_0 +// .set L2_0_set_25, LBB2_25-LJTI2_0 +// .set L2_0_set_26, LBB2_26-LJTI2_0 +// .set L2_0_set_27, LBB2_27-LJTI2_0 +LJTI2_0: + LONG $0xfffff7e7 // .long L2_0_set_29 + LONG $0xfffff6c1 // .long L2_0_set_19 + LONG $0xfffff6e2 // .long L2_0_set_20 + LONG $0xfffff703 // .long L2_0_set_21 + LONG $0xfffff727 // .long L2_0_set_22 + LONG $0xfffff747 // .long L2_0_set_23 + LONG $0xfffff768 // .long L2_0_set_24 + LONG $0xfffff785 // .long L2_0_set_25 + LONG $0xfffff7a2 // .long L2_0_set_26 + LONG $0xfffff7bf // .long L2_0_set_27 _i64toa: TESTQ SI, SI - JS LBB6_1 + JS LBB3_1 JMP _u64toa -LBB6_1: +LBB3_1: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp MOVB $45, 0(DI) @@ -1804,11 +1141,11 @@ LBB6_1: BYTE $0x5d // popq %rbp RET -LCPI7_0: +LCPI4_0: QUAD $0x00000000d1b71759 // .quad 3518437209 QUAD $0x00000000d1b71759 // .quad 3518437209 -LCPI7_3: +LCPI4_3: WORD $0x000a // .word 10 WORD $0x000a // .word 10 WORD $0x000a // .word 10 @@ -1818,20 +1155,20 @@ LCPI7_3: WORD $0x000a // .word 10 WORD $0x000a // .word 10 -LCPI7_4: +LCPI4_4: QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' -LCPI7_1: +LCPI4_1: QUAD $0x80003334147b20c5 // .quad -9223315738079846203 -LCPI7_2: +LCPI4_2: QUAD $0x8000200008000080 // .quad -9223336852348469120 _u64toa: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp CMPQ SI, $9999 - JA LBB7_8 + JA LBB4_8 MOVWLZX SI, AX SHRL $2, AX LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax @@ -1843,38 +1180,38 @@ _u64toa: MOVWLZX CX, AX ADDQ AX, AX CMPL SI, $1000 - JB LBB7_3 - LONG $0x510d8d48; WORD $0x002d; BYTE $0x00 // leaq $11601(%rip), %rcx /* _Digits(%rip) */ + JB LBB4_3 + LONG $0x990d8d48; WORD $0x0030; BYTE $0x00 // leaq $12441(%rip), %rcx /* _Digits(%rip) */ MOVB 0(DX)(CX*1), CX MOVB CX, 0(DI) MOVL $1, CX - JMP LBB7_4 + JMP LBB4_4 -LBB7_3: +LBB4_3: XORL CX, CX CMPL SI, $100 - JB LBB7_5 + JB LBB4_5 -LBB7_4: +LBB4_4: MOVWLZX DX, DX ORQ $1, DX - LONG $0x30358d48; WORD $0x002d; BYTE $0x00 // leaq $11568(%rip), %rsi /* _Digits(%rip) */ + LONG $0x78358d48; WORD $0x0030; BYTE $0x00 // leaq $12408(%rip), %rsi /* _Digits(%rip) */ MOVB 0(DX)(SI*1), DX MOVL CX, SI INCL CX MOVB DX, 0(DI)(SI*1) -LBB7_6: - LONG $0x1f158d48; WORD $0x002d; BYTE $0x00 // leaq $11551(%rip), %rdx /* _Digits(%rip) */ +LBB4_6: + LONG $0x67158d48; WORD $0x0030; BYTE $0x00 // leaq $12391(%rip), %rdx /* _Digits(%rip) */ MOVB 0(AX)(DX*1), DX MOVL CX, SI INCL CX MOVB DX, 0(DI)(SI*1) -LBB7_7: +LBB4_7: MOVWLZX AX, AX ORQ $1, AX - LONG $0x07158d48; WORD $0x002d; BYTE $0x00 // leaq $11527(%rip), %rdx /* _Digits(%rip) */ + LONG $0x4f158d48; WORD $0x0030; BYTE $0x00 // leaq $12367(%rip), %rdx /* _Digits(%rip) */ MOVB 0(AX)(DX*1), AX MOVL CX, DX INCL CX @@ -1883,15 +1220,15 @@ LBB7_7: BYTE $0x5d // popq %rbp RET -LBB7_5: +LBB4_5: XORL CX, CX CMPL SI, $10 - JAE LBB7_6 - JMP LBB7_7 + JAE LBB4_6 + JMP LBB4_7 -LBB7_8: +LBB4_8: CMPQ SI, $99999999 - JA LBB7_16 + JA LBB4_16 MOVL SI, AX MOVL $3518437209, DX IMULQ AX, DX @@ -1920,38 +1257,38 @@ LBB7_8: MOVWLZX CX, R11 ADDQ R11, R11 CMPL SI, $10000000 - JB LBB7_11 - LONG $0x70058d48; WORD $0x002c; BYTE $0x00 // leaq $11376(%rip), %rax /* _Digits(%rip) */ + JB LBB4_11 + LONG $0xb8058d48; WORD $0x002f; BYTE $0x00 // leaq $12216(%rip), %rax /* _Digits(%rip) */ MOVB 0(R10)(AX*1), AX MOVB AX, 0(DI) MOVL $1, CX - JMP LBB7_12 + JMP LBB4_12 -LBB7_11: +LBB4_11: XORL CX, CX CMPL SI, $1000000 - JB LBB7_13 + JB LBB4_13 -LBB7_12: +LBB4_12: MOVL R10, AX ORQ $1, AX - LONG $0x4b358d48; WORD $0x002c; BYTE $0x00 // leaq $11339(%rip), %rsi /* _Digits(%rip) */ + LONG $0x93358d48; WORD $0x002f; BYTE $0x00 // leaq $12179(%rip), %rsi /* _Digits(%rip) */ MOVB 0(AX)(SI*1), AX MOVL CX, SI INCL CX MOVB AX, 0(DI)(SI*1) -LBB7_14: - LONG $0x3a058d48; WORD $0x002c; BYTE $0x00 // leaq $11322(%rip), %rax /* _Digits(%rip) */ +LBB4_14: + LONG $0x82058d48; WORD $0x002f; BYTE $0x00 // leaq $12162(%rip), %rax /* _Digits(%rip) */ MOVB 0(R9)(AX*1), AX MOVL CX, SI INCL CX MOVB AX, 0(DI)(SI*1) -LBB7_15: +LBB4_15: MOVWLZX R9, AX ORQ $1, AX - LONG $0x20358d48; WORD $0x002c; BYTE $0x00 // leaq $11296(%rip), %rsi /* _Digits(%rip) */ + LONG $0x68358d48; WORD $0x002f; BYTE $0x00 // leaq $12136(%rip), %rsi /* _Digits(%rip) */ MOVB 0(AX)(SI*1), AX MOVL CX, DX MOVB AX, 0(DI)(DX*1) @@ -1972,16 +1309,16 @@ LBB7_15: BYTE $0x5d // popq %rbp RET -LBB7_13: +LBB4_13: XORL CX, CX CMPL SI, $100000 - JAE LBB7_14 - JMP LBB7_15 + JAE LBB4_14 + JMP LBB4_15 -LBB7_16: +LBB4_16: MOVQ $9999999999999999, AX CMPQ SI, AX - JA LBB7_18 + JA LBB4_18 MOVQ $-6067343680855748867, CX MOVQ SI, AX MULQ CX @@ -1989,7 +1326,7 @@ LBB7_16: LONG $0xe100c269; WORD $0x05f5 // imull $100000000, %edx, %eax SUBL AX, SI LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - QUAD $0xfffffdcb0d6ffac5 // vmovdqu $-565(%rip), %xmm1 /* LCPI7_0(%rip) */ + QUAD $0xfffffdcb0d6ffac5 // vmovdqu $-565(%rip), %xmm1 /* LCPI4_0(%rip) */ LONG $0xd1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm2 LONG $0xd273e9c5; BYTE $0x2d // vpsrlq $45, %xmm2, %xmm2 MOVL $10000, AX @@ -2000,11 +1337,11 @@ LBB7_16: LONG $0xf073f9c5; BYTE $0x02 // vpsllq $2, %xmm0, %xmm0 LONG $0xc070fbc5; BYTE $0x50 // vpshuflw $80, %xmm0, %xmm0 LONG $0xc070f9c5; BYTE $0x50 // vpshufd $80, %xmm0, %xmm0 - QUAD $0xfffffdc51512fbc5 // vmovddup $-571(%rip), %xmm2 /* LCPI7_1(%rip) */ + QUAD $0xfffffdc51512fbc5 // vmovddup $-571(%rip), %xmm2 /* LCPI4_1(%rip) */ LONG $0xc2e4f9c5 // vpmulhuw %xmm2, %xmm0, %xmm0 - QUAD $0xfffffdc12512fbc5 // vmovddup $-575(%rip), %xmm4 /* LCPI7_2(%rip) */ + QUAD $0xfffffdc12512fbc5 // vmovddup $-575(%rip), %xmm4 /* LCPI4_2(%rip) */ LONG $0xc4e4f9c5 // vpmulhuw %xmm4, %xmm0, %xmm0 - QUAD $0xfffffd8d2d6ffac5 // vmovdqu $-627(%rip), %xmm5 /* LCPI7_3(%rip) */ + QUAD $0xfffffd8d2d6ffac5 // vmovdqu $-627(%rip), %xmm5 /* LCPI4_3(%rip) */ LONG $0xf5d5f9c5 // vpmullw %xmm5, %xmm0, %xmm6 LONG $0xf673c9c5; BYTE $0x10 // vpsllq $16, %xmm6, %xmm6 LONG $0xc6f9f9c5 // vpsubw %xmm6, %xmm0, %xmm0 @@ -2023,7 +1360,7 @@ LBB7_16: LONG $0xf273e9c5; BYTE $0x10 // vpsllq $16, %xmm2, %xmm2 LONG $0xcaf9f1c5 // vpsubw %xmm2, %xmm1, %xmm1 LONG $0xc167f9c5 // vpackuswb %xmm1, %xmm0, %xmm0 - QUAD $0xfffffd470dfcf9c5 // vpaddb $-697(%rip), %xmm0, %xmm1 /* LCPI7_4(%rip) */ + QUAD $0xfffffd470dfcf9c5 // vpaddb $-697(%rip), %xmm0, %xmm1 /* LCPI4_4(%rip) */ LONG $0xd2efe9c5 // vpxor %xmm2, %xmm2, %xmm2 LONG $0xc274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm0 LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax @@ -2033,14 +1370,14 @@ LBB7_16: MOVL $16, CX SUBL AX, CX SHLQ $4, AX - LONG $0x95158d48; WORD $0x002b; BYTE $0x00 // leaq $11157(%rip), %rdx /* _VecShiftShuffles(%rip) */ + LONG $0xdd158d48; WORD $0x002e; BYTE $0x00 // leaq $11997(%rip), %rdx /* _VecShiftShuffles(%rip) */ LONG $0x0071e2c4; WORD $0x1004 // vpshufb (%rax,%rdx), %xmm1, %xmm0 LONG $0x077ffac5 // vmovdqu %xmm0, (%rdi) MOVL CX, AX BYTE $0x5d // popq %rbp RET -LBB7_18: +LBB4_18: MOVQ $4153837486827862103, CX MOVQ SI, AX MULQ CX @@ -2049,31 +1386,31 @@ LBB7_18: IMULQ DX, AX SUBQ AX, SI CMPL DX, $9 - JA LBB7_20 + JA LBB4_20 ADDB $48, DX MOVB DX, 0(DI) MOVL $1, CX - JMP LBB7_25 + JMP LBB4_25 -LBB7_20: +LBB4_20: CMPL DX, $99 - JA LBB7_22 + JA LBB4_22 MOVL DX, AX - LONG $0x780d8d48; WORD $0x002a; BYTE $0x00 // leaq $10872(%rip), %rcx /* _Digits(%rip) */ + LONG $0xc00d8d48; WORD $0x002d; BYTE $0x00 // leaq $11712(%rip), %rcx /* _Digits(%rip) */ MOVB 0(CX)(AX*2), DX MOVB 1(CX)(AX*2), AX MOVB DX, 0(DI) MOVB AX, 1(DI) MOVL $2, CX - JMP LBB7_25 + JMP LBB4_25 -LBB7_22: +LBB4_22: MOVL DX, AX SHRL $2, AX LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax SHRL $17, AX CMPL DX, $999 - JA LBB7_24 + JA LBB4_24 ADDL $48, AX MOVB AX, 0(DI) MOVWLZX DX, AX @@ -2084,19 +1421,19 @@ LBB7_22: WORD $0xc96b; BYTE $0x64 // imull $100, %ecx, %ecx SUBL CX, AX MOVWLZX AX, AX - LONG $0x270d8d48; WORD $0x002a; BYTE $0x00 // leaq $10791(%rip), %rcx /* _Digits(%rip) */ + LONG $0x6f0d8d48; WORD $0x002d; BYTE $0x00 // leaq $11631(%rip), %rcx /* _Digits(%rip) */ MOVB 0(CX)(AX*2), DX MOVB 1(CX)(AX*2), AX MOVB DX, 1(DI) MOVB AX, 2(DI) MOVL $3, CX - JMP LBB7_25 + JMP LBB4_25 -LBB7_24: +LBB4_24: WORD $0xc86b; BYTE $0x64 // imull $100, %eax, %ecx SUBL CX, DX MOVWLZX AX, AX - LONG $0x04058d4c; WORD $0x002a; BYTE $0x00 // leaq $10756(%rip), %r8 /* _Digits(%rip) */ + LONG $0x4c058d4c; WORD $0x002d; BYTE $0x00 // leaq $11596(%rip), %r8 /* _Digits(%rip) */ MOVB 0(R8)(AX*2), CX MOVB 1(R8)(AX*2), AX MOVB CX, 0(DI) @@ -2111,13 +1448,13 @@ LBB7_24: MOVB AX, 3(DI) MOVL $4, CX -LBB7_25: +LBB4_25: MOVQ $-6067343680855748867, DX MOVQ SI, AX MULQ DX SHRQ $26, DX LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - QUAD $0xfffffbe60d6ffac5 // vmovdqu $-1050(%rip), %xmm1 /* LCPI7_0(%rip) */ + QUAD $0xfffffbe60d6ffac5 // vmovdqu $-1050(%rip), %xmm1 /* LCPI4_0(%rip) */ LONG $0xd1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm2 LONG $0xd273e9c5; BYTE $0x2d // vpsrlq $45, %xmm2, %xmm2 MOVL $10000, AX @@ -2128,11 +1465,11 @@ LBB7_25: LONG $0xf073f9c5; BYTE $0x02 // vpsllq $2, %xmm0, %xmm0 LONG $0xc070fbc5; BYTE $0x50 // vpshuflw $80, %xmm0, %xmm0 LONG $0xc070f9c5; BYTE $0x50 // vpshufd $80, %xmm0, %xmm0 - QUAD $0xfffffbe01512fbc5 // vmovddup $-1056(%rip), %xmm2 /* LCPI7_1(%rip) */ + QUAD $0xfffffbe01512fbc5 // vmovddup $-1056(%rip), %xmm2 /* LCPI4_1(%rip) */ LONG $0xc2e4f9c5 // vpmulhuw %xmm2, %xmm0, %xmm0 - QUAD $0xfffffbdc2512fbc5 // vmovddup $-1060(%rip), %xmm4 /* LCPI7_2(%rip) */ + QUAD $0xfffffbdc2512fbc5 // vmovddup $-1060(%rip), %xmm4 /* LCPI4_2(%rip) */ LONG $0xc4e4f9c5 // vpmulhuw %xmm4, %xmm0, %xmm0 - QUAD $0xfffffba82d6ffac5 // vmovdqu $-1112(%rip), %xmm5 /* LCPI7_3(%rip) */ + QUAD $0xfffffba82d6ffac5 // vmovdqu $-1112(%rip), %xmm5 /* LCPI4_3(%rip) */ LONG $0xf5d5f9c5 // vpmullw %xmm5, %xmm0, %xmm6 LONG $0xf673c9c5; BYTE $0x10 // vpsllq $16, %xmm6, %xmm6 LONG $0xc6f9f9c5 // vpsubw %xmm6, %xmm0, %xmm0 @@ -2153,7 +1490,7 @@ LBB7_25: LONG $0xf273e9c5; BYTE $0x10 // vpsllq $16, %xmm2, %xmm2 LONG $0xcaf9f1c5 // vpsubw %xmm2, %xmm1, %xmm1 LONG $0xc167f9c5 // vpackuswb %xmm1, %xmm0, %xmm0 - QUAD $0xfffffb5a05fcf9c5 // vpaddb $-1190(%rip), %xmm0, %xmm0 /* LCPI7_4(%rip) */ + QUAD $0xfffffb5a05fcf9c5 // vpaddb $-1190(%rip), %xmm0, %xmm0 /* LCPI4_4(%rip) */ MOVL CX, AX LONG $0x047ffac5; BYTE $0x07 // vmovdqu %xmm0, (%rdi,%rax) ORL $16, CX @@ -2161,7 +1498,380 @@ LBB7_25: BYTE $0x5d // popq %rbp RET -LCPI8_0: +LCPI5_0: + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + +LCPI5_1: + QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + +LCPI5_2: + QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + +_quote: + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5741 // pushq %r15 + WORD $0x5641 // pushq %r14 + WORD $0x5541 // pushq %r13 + WORD $0x5441 // pushq %r12 + BYTE $0x53 // pushq %rbx + SUBQ $32, SP + MOVQ CX, R10 + MOVQ DX, CX + TESTB $1, R8 + LONG $0x4b058d48; WORD $0x002d; BYTE $0x00 // leaq $11595(%rip), %rax /* __SingleQuoteTab(%rip) */ + LONG $0x44158d48; WORD $0x003d; BYTE $0x00 // leaq $15684(%rip), %rdx /* __DoubleQuoteTab(%rip) */ + LONG $0xd0440f48 // cmoveq %rax, %rdx + MOVQ CX, R8 + MOVQ DI, AX + TESTQ SI, SI + JE LBB5_55 + MOVQ 0(R10), R9 + QUAD $0xffffff89056ffac5 // vmovdqu $-119(%rip), %xmm0 /* LCPI5_0(%rip) */ + QUAD $0xffffff910d6ffac5 // vmovdqu $-111(%rip), %xmm1 /* LCPI5_1(%rip) */ + QUAD $0xffffff99156ffac5 // vmovdqu $-103(%rip), %xmm2 /* LCPI5_2(%rip) */ + LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 + MOVQ DI, AX + MOVQ CX, R8 + MOVQ DI, -56(BP) + MOVQ CX, -48(BP) + +LBB5_2: + MOVQ R10, DI + CMPQ SI, $15 + SETGT R12 + CMPQ R9, $16 + MOVQ SI, -64(BP) + MOVQ R9, R11 + MOVQ R8, R15 + JL LBB5_13 + MOVQ SI, R10 + MOVQ AX, R14 + CMPQ SI, $16 + JL LBB5_8 + MOVQ AX, R14 + MOVQ -64(BP), BX + MOVQ R8, R15 + MOVQ R9, R13 + +LBB5_5: + LONG $0x6f7ac1c4; BYTE $0x26 // vmovdqu (%r14), %xmm4 + LONG $0xec64f9c5 // vpcmpgtb %xmm4, %xmm0, %xmm5 + LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 + LONG $0xfa74d9c5 // vpcmpeqb %xmm2, %xmm4, %xmm7 + LONG $0xf6ebc1c5 // vpor %xmm6, %xmm7, %xmm6 + LONG $0x7f7ac1c4; BYTE $0x27 // vmovdqu %xmm4, (%r15) + LONG $0xe364d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm4 + LONG $0xe4dbd1c5 // vpand %xmm4, %xmm5, %xmm4 + LONG $0xe4ebc9c5 // vpor %xmm4, %xmm6, %xmm4 + LONG $0xccd7f9c5 // vpmovmskb %xmm4, %ecx + TESTW CX, CX + JNE LBB5_12 + ADDQ $16, R14 + ADDQ $16, R15 + LEAQ -16(BX), R10 + LEAQ -16(R13), R11 + CMPQ BX, $31 + SETGT R12 + CMPQ BX, $32 + JL LBB5_8 + MOVQ R10, BX + CMPQ R13, $31 + MOVQ R11, R13 + JG LBB5_5 + +LBB5_8: + TESTB R12, R12 + JE LBB5_14 + +LBB5_9: + LONG $0x6f7ac1c4; BYTE $0x26 // vmovdqu (%r14), %xmm4 + LONG $0xec64f9c5 // vpcmpgtb %xmm4, %xmm0, %xmm5 + LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 + LONG $0xfa74d9c5 // vpcmpeqb %xmm2, %xmm4, %xmm7 + LONG $0xf6ebc1c5 // vpor %xmm6, %xmm7, %xmm6 + LONG $0xfb64d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm7 + LONG $0xefdbd1c5 // vpand %xmm7, %xmm5, %xmm5 + LONG $0xedebc9c5 // vpor %xmm5, %xmm6, %xmm5 + LONG $0xcdd7f9c5 // vpmovmskb %xmm5, %ecx + ORL $65536, CX + BSFL CX, R12 + LONG $0x7ef9e1c4; BYTE $0xe6 // vmovq %xmm4, %rsi + CMPQ R11, R12 + JGE LBB5_19 + CMPQ R11, $8 + JB LBB5_22 + MOVQ SI, 0(R15) + LEAQ 8(R14), R12 + ADDQ $8, R15 + LEAQ -8(R11), BX + JMP LBB5_23 + +LBB5_12: + MOVWLZX CX, CX + SUBQ AX, R14 + BSFL CX, R11 + ADDQ R14, R11 + JMP LBB5_37 + +LBB5_13: + MOVQ SI, R10 + MOVQ AX, R14 + TESTB R12, R12 + JNE LBB5_9 + +LBB5_14: + TESTQ R11, R11 + MOVQ DI, -72(BP) + JLE LBB5_28 + MOVQ R10, BX + TESTQ R10, R10 + MOVQ -48(BP), CX + MOVQ -56(BP), DI + LONG $0xd02d8d4c; WORD $0x002b; BYTE $0x00 // leaq $11216(%rip), %r13 /* __SingleQuoteTab(%rip) */ + JLE LBB5_29 + +LBB5_16: + MOVBLZX 0(R14), R12 + MOVQ R12, BX + SHLQ $4, BX + CMPQ 0(BX)(R13*1), $0 + JNE LBB5_21 + LEAQ -1(R10), BX + INCQ R14 + MOVB R12, 0(R15) + CMPQ R10, $2 + JL LBB5_29 + LEAQ -1(R11), R12 + INCQ R15 + MOVQ BX, R10 + CMPQ R11, $1 + MOVQ R12, R11 + JG LBB5_16 + JMP LBB5_29 + +LBB5_19: + CMPL R12, $8 + JB LBB5_31 + MOVQ SI, 0(R15) + LEAQ 8(R14), R13 + ADDQ $8, R15 + LEAQ -8(R12), BX + CMPQ BX, $4 + JAE LBB5_32 + JMP LBB5_33 + +LBB5_21: + SUBQ AX, R14 + MOVQ R14, R11 + JMP LBB5_30 + +LBB5_22: + MOVQ R14, R12 + MOVQ R11, BX + +LBB5_23: + MOVQ DI, R10 + MOVQ -48(BP), CX + MOVQ -56(BP), DI + CMPQ BX, $4 + JB LBB5_24 + MOVL 0(R12), SI + MOVL SI, 0(R15) + ADDQ $4, R12 + ADDQ $4, R15 + ADDQ $-4, BX + CMPQ BX, $2 + JAE LBB5_53 + +LBB5_25: + TESTQ BX, BX + JE LBB5_27 + +LBB5_26: + MOVB 0(R12), BX + MOVB BX, 0(R15) + +LBB5_27: + SUBQ AX, R11 + ADDQ R14, R11 + NOTQ R11 + JMP LBB5_38 + +LBB5_24: + CMPQ BX, $2 + JB LBB5_25 + +LBB5_53: + MOVWLZX 0(R12), SI + MOVW SI, 0(R15) + ADDQ $2, R12 + ADDQ $2, R15 + ADDQ $-2, BX + TESTQ BX, BX + JNE LBB5_26 + JMP LBB5_27 + +LBB5_28: + MOVQ R10, BX + MOVQ -48(BP), CX + MOVQ -56(BP), DI + +LBB5_29: + SUBQ AX, R14 + NEGQ BX + SBBQ R11, R11 + XORQ R14, R11 + +LBB5_30: + MOVQ -64(BP), SI + MOVQ -72(BP), R10 + JMP LBB5_39 + +LBB5_31: + MOVQ R14, R13 + MOVQ R12, BX + CMPQ BX, $4 + JB LBB5_33 + +LBB5_32: + MOVL 0(R13), CX + MOVL CX, 0(R15) + ADDQ $4, R13 + ADDQ $4, R15 + ADDQ $-4, BX + +LBB5_33: + CMPQ BX, $2 + JB LBB5_34 + MOVWLZX 0(R13), CX + MOVW CX, 0(R15) + ADDQ $2, R13 + ADDQ $2, R15 + ADDQ $-2, BX + TESTQ BX, BX + JNE LBB5_35 + JMP LBB5_36 + +LBB5_34: + TESTQ BX, BX + JE LBB5_36 + +LBB5_35: + MOVB 0(R13), CX + MOVB CX, 0(R15) + +LBB5_36: + SUBQ AX, R14 + ADDQ R12, R14 + MOVQ R14, R11 + +LBB5_37: + MOVQ DI, R10 + MOVQ -48(BP), CX + MOVQ -56(BP), DI + +LBB5_38: + MOVQ -64(BP), SI + +LBB5_39: + TESTQ R11, R11 + JS LBB5_58 + ADDQ R11, AX + ADDQ R11, R8 + CMPQ SI, R11 + JE LBB5_55 + SUBQ R11, R9 + SUBQ SI, R11 + JMP LBB5_43 + +LBB5_42: + INCQ AX + ADDQ R12, R8 + INCQ R11 + JE LBB5_55 + +LBB5_43: + MOVBLZX 0(AX), BX + SHLQ $4, BX + MOVQ 0(DX)(BX*1), SI + TESTL SI, SI + JE LBB5_51 + MOVLQSX SI, R12 + SUBQ R12, R9 + JL LBB5_56 + LEAQ 8(DX)(BX*1), R15 + CMPQ R12, $4 + JB LBB5_47 + MOVL 0(R15), SI + MOVL SI, 0(R8) + LEAQ 12(DX)(BX*1), R15 + LEAQ 4(R8), R14 + LEAQ -4(R12), BX + CMPQ BX, $2 + JAE LBB5_48 + JMP LBB5_49 + +LBB5_47: + MOVQ R8, R14 + MOVQ R12, BX + CMPQ BX, $2 + JB LBB5_49 + +LBB5_48: + MOVWLZX 0(R15), SI + MOVW SI, 0(R14) + ADDQ $2, R15 + ADDQ $2, R14 + ADDQ $-2, BX + +LBB5_49: + TESTQ BX, BX + JE LBB5_42 + MOVBLZX 0(R15), BX + MOVB BX, 0(R14) + JMP LBB5_42 + +LBB5_51: + MOVQ R11, SI + NEGQ SI + TESTQ R11, R11 + JNE LBB5_2 + +LBB5_55: + SUBQ CX, R8 + MOVQ R8, 0(R10) + SUBQ DI, AX + JMP LBB5_57 + +LBB5_56: + SUBQ CX, R8 + MOVQ R8, 0(R10) + NOTQ AX + ADDQ DI, AX + +LBB5_57: + ADDQ $32, SP + BYTE $0x5b // popq %rbx + WORD $0x5c41 // popq %r12 + WORD $0x5d41 // popq %r13 + WORD $0x5e41 // popq %r14 + WORD $0x5f41 // popq %r15 + BYTE $0x5d // popq %rbp + RET + +LBB5_58: + SUBQ CX, R8 + MOVQ R11, DX + NOTQ DX + ADDQ R8, DX + MOVQ DX, 0(R10) + SUBQ AX, DI + ADDQ R11, DI + MOVQ DI, AX + JMP LBB5_57 + +LCPI6_0: QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' _unquote: @@ -2174,111 +1884,110 @@ _unquote: BYTE $0x53 // pushq %rbx SUBQ $16, SP TESTQ SI, SI - JE LBB8_1 + JE LBB6_1 MOVQ CX, -48(BP) MOVQ R8, AX MOVQ R8, -56(BP) MOVL R8, R10 ANDL $1, R10 - LONG $0x12058d4c; WORD $0x002a; BYTE $0x00 // leaq $10770(%rip), %r8 /* __UnquoteTab(%rip) */ - QUAD $0xffffffb5056ffac5 // vmovdqu $-75(%rip), %xmm0 /* LCPI8_0(%rip) */ + LONG $0x3d058d4c; WORD $0x0049; BYTE $0x00 // leaq $18749(%rip), %r8 /* __UnquoteTab(%rip) */ + QUAD $0xffffffb5056ffac5 // vmovdqu $-75(%rip), %xmm0 /* LCPI6_0(%rip) */ MOVQ DI, R9 MOVQ SI, R14 MOVQ DX, AX -LBB8_3: +LBB6_3: CMPB 0(R9), $92 - JNE LBB8_5 + JNE LBB6_5 XORL R15, R15 - JMP LBB8_15 + JMP LBB6_15 -LBB8_5: +LBB6_5: MOVQ R14, R11 MOVQ AX, R15 MOVQ R9, R12 CMPQ R14, $16 - JL LBB8_6 + JL LBB6_6 -LBB8_11: +LBB6_11: LONG $0x6f7ac1c4; WORD $0x240c // vmovdqu (%r12), %xmm1 LONG $0x7f7ac1c4; BYTE $0x0f // vmovdqu %xmm1, (%r15) LONG $0xc874f1c5 // vpcmpeqb %xmm0, %xmm1, %xmm1 LONG $0xd9d7f9c5 // vpmovmskb %xmm1, %ebx TESTW BX, BX - JNE LBB8_12 + JNE LBB6_12 ADDQ $16, R12 ADDQ $16, R15 LEAQ -16(R11), CX CMPQ R11, $31 MOVQ CX, R11 - JG LBB8_11 + JG LBB6_11 -LBB8_6: +LBB6_6: TESTQ R11, R11 - JE LBB8_90 + JE LBB6_90 XORL BX, BX -LBB8_8: +LBB6_8: MOVBLZX 0(R12)(BX*1), CX CMPB CX, $92 - JE LBB8_13 + JE LBB6_13 MOVB CX, 0(R15)(BX*1) INCQ BX CMPQ R11, BX - JNE LBB8_8 - JMP LBB8_90 + JNE LBB6_8 + JMP LBB6_90 -LBB8_13: +LBB6_13: ADDQ BX, R12 SUBQ R9, R12 MOVQ R12, R15 CMPQ R15, $-1 - JNE LBB8_15 - JMP LBB8_90 + JNE LBB6_15 + JMP LBB6_90 -LBB8_12: +LBB6_12: MOVWLZX BX, CX SUBQ R9, R12 - ORQ $65536, CX BSFQ CX, R15 ADDQ R12, R15 CMPQ R15, $-1 - JE LBB8_90 + JE LBB6_90 -LBB8_15: +LBB6_15: LEAQ 2(R15), CX SUBQ CX, R14 - JS LBB8_16 + JS LBB6_16 LEAQ 2(R9)(R15*1), R9 TESTQ R10, R10 - JNE LBB8_18 + JNE LBB6_18 -LBB8_29: +LBB6_29: ADDQ R15, AX MOVBLZX -1(R9), CX MOVB 0(CX)(R8*1), CX CMPB CX, $-1 - JE LBB8_33 + JE LBB6_33 TESTB CX, CX - JE LBB8_31 + JE LBB6_31 MOVB CX, 0(AX) INCQ AX - JMP LBB8_88 + JMP LBB6_88 -LBB8_33: +LBB6_33: CMPQ R14, $3 - JLE LBB8_16 + JLE LBB6_16 MOVL 0(R9), R15 MOVL R15, CX NOTL CX LEAL -808464432(R15), BX ANDL $-2139062144, CX TESTL BX, CX - JNE LBB8_38 + JNE LBB6_38 LEAL 421075225(R15), BX ORL R15, BX TESTL $-2139062144, BX - JNE LBB8_38 + JNE LBB6_38 MOVL R15, BX ANDL $2139062143, BX MOVL $-1061109568, R11 @@ -2286,13 +1995,13 @@ LBB8_33: LEAL 1179010630(BX), R12 ANDL CX, R11 TESTL R12, R11 - JNE LBB8_38 + JNE LBB6_38 MOVL $-522133280, R11 SUBL BX, R11 ADDL $960051513, BX ANDL R11, CX TESTL BX, CX - JNE LBB8_38 + JNE LBB6_38 BSWAPL R15 MOVL R15, CX SHRL $4, CX @@ -2312,13 +2021,13 @@ LBB8_33: LEAQ 4(R9), R15 LEAQ -4(R14), R12 CMPL R13, $127 - JBE LBB8_48 + JBE LBB6_48 CMPL R13, $2047 - JBE LBB8_51 + JBE LBB6_51 MOVL R11, BX ANDL $16252928, BX CMPL BX, $14155776 - JE LBB8_54 + JE LBB6_54 SHRL $12, CX ORB $-32, CX MOVB CX, 0(AX) @@ -2331,45 +2040,45 @@ LBB8_33: MOVB R11, 2(AX) ADDQ $3, AX -LBB8_49: +LBB6_49: MOVQ R12, R14 MOVQ R15, R9 -LBB8_88: +LBB6_88: TESTQ R14, R14 - JNE LBB8_3 - JMP LBB8_89 + JNE LBB6_3 + JMP LBB6_89 -LBB8_18: +LBB6_18: TESTL R14, R14 - JE LBB8_16 + JE LBB6_16 CMPB -1(R9), $92 - JNE LBB8_20 + JNE LBB6_20 CMPB 0(R9), $92 - JNE LBB8_28 + JNE LBB6_28 CMPL R14, $1 - JLE LBB8_16 + JLE LBB6_16 MOVB 1(R9), CX CMPB CX, $34 - JE LBB8_27 + JE LBB6_27 CMPB CX, $92 - JNE LBB8_26 + JNE LBB6_26 -LBB8_27: +LBB6_27: INCQ R9 DECQ R14 -LBB8_28: +LBB6_28: INCQ R9 DECQ R14 - JMP LBB8_29 + JMP LBB6_29 -LBB8_48: +LBB6_48: MOVB R11, 0(AX) INCQ AX - JMP LBB8_49 + JMP LBB6_49 -LBB8_51: +LBB6_51: SHRL $6, R13 ORB $-64, R13 MOVB R13, 0(AX) @@ -2377,43 +2086,43 @@ LBB8_51: ORB $-128, R11 MOVB R11, 1(AX) ADDQ $2, AX - JMP LBB8_49 + JMP LBB6_49 -LBB8_54: +LBB6_54: TESTQ R10, R10 - JNE LBB8_56 + JNE LBB6_56 MOVQ R12, R14 MOVQ R15, R9 - JMP LBB8_60 + JMP LBB6_60 -LBB8_56: +LBB6_56: CMPQ R14, $4 - JLE LBB8_16 + JLE LBB6_16 CMPB 0(R15), $92 - JNE LBB8_58 + JNE LBB6_58 ADDQ $-5, R14 ADDQ $5, R9 -LBB8_60: +LBB6_60: CMPL R13, $56319 - JA LBB8_64 + JA LBB6_64 CMPQ R14, $6 - JL LBB8_64 + JL LBB6_64 CMPB 0(R9), $92 - JNE LBB8_64 + JNE LBB6_64 CMPB 1(R9), $117 - JNE LBB8_64 + JNE LBB6_64 MOVL 2(R9), R11 MOVL R11, CX NOTL CX LEAL -808464432(R11), BX ANDL $-2139062144, CX TESTL BX, CX - JNE LBB8_72 + JNE LBB6_72 LEAL 421075225(R11), BX ORL R11, BX TESTL $-2139062144, BX - JNE LBB8_72 + JNE LBB6_72 MOVL R11, BX ANDL $2139062143, BX MOVL $-1061109568, R15 @@ -2421,13 +2130,13 @@ LBB8_60: LEAL 1179010630(BX), R12 ANDL CX, R15 TESTL R12, R15 - JNE LBB8_72 + JNE LBB6_72 MOVL $-522133280, R15 SUBL BX, R15 ADDL $960051513, BX ANDL R15, CX TESTL BX, CX - JNE LBB8_72 + JNE LBB6_72 BSWAPL R11 MOVL R11, CX SHRL $4, CX @@ -2444,7 +2153,7 @@ LBB8_60: MOVL BX, CX ANDL $16515072, CX CMPL CX, $14417920 - JNE LBB8_82 + JNE LBB6_82 MOVL BX, CX SHRL $8, CX ANDL $65280, CX @@ -2453,30 +2162,30 @@ LBB8_60: SHLL $10, R13 LEAL -56613888(R13)(BX*1), BX CMPL BX, $1114112 - JB LBB8_87 + JB LBB6_87 TESTB $2, -56(BP) - JE LBB8_83 - JMP LBB8_65 + JE LBB6_83 + JMP LBB6_65 -LBB8_64: +LBB6_64: TESTB $2, -56(BP) - JE LBB8_66 + JE LBB6_66 -LBB8_65: +LBB6_65: MOVW $-16401, 0(AX) MOVB $-67, 2(AX) ADDQ $3, AX - JMP LBB8_88 + JMP LBB6_88 -LBB8_82: +LBB6_82: TESTB $2, -56(BP) - JE LBB8_83 + JE LBB6_83 MOVL $-272777233, 0(AX) MOVW $-16961, 4(AX) ADDQ $6, AX - JMP LBB8_88 + JMP LBB6_88 -LBB8_87: +LBB6_87: MOVL BX, CX SHRL $18, CX ORB $-16, CX @@ -2495,17 +2204,17 @@ LBB8_87: ORB $-128, BX MOVB BX, 3(AX) ADDQ $4, AX - JMP LBB8_88 + JMP LBB6_88 -LBB8_1: +LBB6_1: XORL R14, R14 MOVQ DX, AX -LBB8_90: +LBB6_90: ADDQ R14, AX SUBQ DX, AX -LBB8_91: +LBB6_91: ADDQ $16, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 @@ -2515,7 +2224,7 @@ LBB8_91: BYTE $0x5d // popq %rbp RET -LBB8_38: +LBB6_38: MOVQ R9, DX SUBQ DI, DX MOVQ -48(BP), DI @@ -2524,105 +2233,105 @@ LBB8_38: LEAL -48(CX), SI MOVQ $-2, AX CMPB SI, $10 - JB LBB8_40 + JB LBB6_40 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_91 + JA LBB6_91 -LBB8_40: +LBB6_40: LEAQ 1(DX), CX MOVQ CX, 0(DI) MOVB 1(R9), CX LEAL -48(CX), SI CMPB SI, $10 - JB LBB8_42 + JB LBB6_42 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_91 + JA LBB6_91 -LBB8_42: +LBB6_42: LEAQ 2(DX), CX MOVQ CX, 0(DI) MOVB 2(R9), CX LEAL -48(CX), SI CMPB SI, $10 - JB LBB8_44 + JB LBB6_44 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_91 + JA LBB6_91 -LBB8_44: +LBB6_44: LEAQ 3(DX), CX MOVQ CX, 0(DI) MOVB 3(R9), CX LEAL -48(CX), SI CMPB SI, $10 - JB LBB8_46 + JB LBB6_46 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_91 + JA LBB6_91 -LBB8_46: +LBB6_46: ADDQ $4, DX MOVQ DX, 0(DI) - JMP LBB8_91 + JMP LBB6_91 -LBB8_16: +LBB6_16: MOVQ -48(BP), AX MOVQ SI, 0(AX) MOVQ $-1, AX - JMP LBB8_91 + JMP LBB6_91 -LBB8_31: +LBB6_31: NOTQ DI ADDQ DI, R9 MOVQ -48(BP), AX MOVQ R9, 0(AX) MOVQ $-3, AX - JMP LBB8_91 + JMP LBB6_91 -LBB8_89: +LBB6_89: XORL R14, R14 - JMP LBB8_90 + JMP LBB6_90 -LBB8_83: +LBB6_83: SUBQ DI, R9 ADDQ $-4, R9 -LBB8_67: +LBB6_67: MOVQ -48(BP), AX MOVQ R9, 0(AX) MOVQ $-4, AX - JMP LBB8_91 + JMP LBB6_91 -LBB8_20: +LBB6_20: NOTQ DI ADDQ DI, R9 - JMP LBB8_21 + JMP LBB6_21 -LBB8_26: +LBB6_26: SUBQ DI, R9 INCQ R9 -LBB8_21: +LBB6_21: MOVQ -48(BP), AX MOVQ R9, 0(AX) MOVQ $-2, AX - JMP LBB8_91 + JMP LBB6_91 -LBB8_58: +LBB6_58: SUBQ DI, R15 ADDQ $-4, R15 MOVQ -48(BP), AX MOVQ R15, 0(AX) MOVQ $-4, AX - JMP LBB8_91 + JMP LBB6_91 -LBB8_72: +LBB6_72: MOVQ R9, DX SUBQ DI, DX ADDQ $2, DX @@ -2632,109 +2341,448 @@ LBB8_72: LEAL -48(CX), SI MOVQ $-2, AX CMPB SI, $10 - JB LBB8_74 + JB LBB6_74 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_91 + JA LBB6_91 -LBB8_74: +LBB6_74: LEAQ 1(DX), CX MOVQ -48(BP), SI MOVQ CX, 0(SI) MOVB 3(R9), CX LEAL -48(CX), SI CMPB SI, $10 - JB LBB8_76 + JB LBB6_76 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_91 + JA LBB6_91 -LBB8_76: +LBB6_76: LEAQ 2(DX), CX MOVQ -48(BP), SI MOVQ CX, 0(SI) MOVB 4(R9), CX LEAL -48(CX), SI CMPB SI, $10 - JB LBB8_78 + JB LBB6_78 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_91 + JA LBB6_91 -LBB8_78: +LBB6_78: LEAQ 3(DX), CX MOVQ -48(BP), SI MOVQ CX, 0(SI) MOVB 5(R9), CX LEAL -48(CX), SI CMPB SI, $10 - JB LBB8_80 + JB LBB6_80 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_91 + JA LBB6_91 -LBB8_80: +LBB6_80: ADDQ $4, DX MOVQ -48(BP), CX MOVQ DX, 0(CX) - JMP LBB8_91 + JMP LBB6_91 -LBB8_66: +LBB6_66: LEAQ 4(R10)(DI*1), AX SUBQ AX, R9 - JMP LBB8_67 + JMP LBB6_67 + +LCPI7_0: + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + +LCPI7_1: + QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' + +LCPI7_2: + QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' + +LCPI7_3: + QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' _value: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - SUBQ $32, SP - MOVL R8, R12 - MOVQ CX, R14 - MOVQ SI, BX - MOVQ DI, R15 - MOVQ DI, -56(BP) - MOVQ SI, -48(BP) - LONG $0xffe275e8; BYTE $0xff // callq _lspace - MOVQ AX, -40(BP) - CMPQ AX, BX - JAE LBB9_4 - LEAQ 1(AX), CX - MOVQ CX, -40(BP) - MOVBLSX 0(R15)(AX*1), DX - CMPL DX, $125 - JA LBB9_8 - LONG $0x1b358d48; WORD $0x0002; BYTE $0x00 // leaq $539(%rip), %rsi /* LJTI9_0(%rip) */ - MOVLQSX 0(SI)(DX*4), DX - ADDQ SI, DX - JMP DX + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5741 // pushq %r15 + WORD $0x5641 // pushq %r14 + WORD $0x5441 // pushq %r12 + BYTE $0x53 // pushq %rbx + SUBQ $32, SP + MOVQ CX, R14 + MOVQ DX, R12 + MOVQ SI, R15 + MOVQ DX, -40(BP) + MOVQ DI, -56(BP) + MOVQ SI, -48(BP) + MOVQ DX, AX + CMPQ DX, SI + JAE LBB7_18 + MOVB 0(DI)(R12*1), CX + CMPB CX, $13 + JE LBB7_5 + CMPB CX, $32 + JE LBB7_5 + LEAL -9(CX), AX + CMPB AX, $1 + JBE LBB7_5 + MOVQ R12, AX + JMP LBB7_40 -LBB9_3: +LBB7_5: + LEAQ 1(R12), AX + CMPQ AX, R15 + JAE LBB7_18 + MOVB 0(DI)(AX*1), CX + CMPB CX, $13 + JE LBB7_9 + CMPB CX, $32 + JE LBB7_9 + LEAL -9(CX), DX + CMPB DX, $1 + JA LBB7_40 + +LBB7_9: + LEAQ 2(R12), AX + CMPQ AX, R15 + JAE LBB7_18 + MOVB 0(DI)(AX*1), CX + CMPB CX, $13 + JE LBB7_13 + CMPB CX, $32 + JE LBB7_13 + LEAL -9(CX), DX + CMPB DX, $1 + JA LBB7_40 + +LBB7_13: + LEAQ 3(R12), AX + CMPQ AX, R15 + JAE LBB7_18 + MOVB 0(DI)(AX*1), CX + CMPB CX, $13 + JE LBB7_17 + CMPB CX, $32 + JE LBB7_17 + LEAL -9(CX), DX + CMPB DX, $1 + JA LBB7_40 + +LBB7_17: + LEAQ 4(R12), AX + +LBB7_18: + LEAQ 0(DI)(AX*1), CX + MOVQ R15, DX + SUBQ AX, DX + JE LBB7_26 + MOVL CX, AX + ANDL $15, AX + TESTQ AX, AX + JE LBB7_26 + LEAQ -1(DX), R10 + XORL BX, BX + MOVQ $4294977024, R9 + +LBB7_21: + MOVBLSX 0(CX)(BX*1), SI + CMPL SI, $32 + JA LBB7_37 + BTQ SI, R9 + JAE LBB7_37 + LEAQ 1(BX), SI + CMPQ R10, BX + JE LBB7_25 + LEAQ 1(CX)(BX*1), AX + ANDL $15, AX + MOVQ SI, BX + TESTQ AX, AX + JNE LBB7_21 + +LBB7_25: + ADDQ SI, CX + SUBQ SI, DX + +LBB7_26: + CMPQ DX, $16 + JB LBB7_30 + QUAD $0xfffffe9b056ffac5 // vmovdqu $-357(%rip), %xmm0 /* LCPI7_0(%rip) */ + QUAD $0xfffffea30d6ffac5 // vmovdqu $-349(%rip), %xmm1 /* LCPI7_1(%rip) */ + QUAD $0xfffffeab156ffac5 // vmovdqu $-341(%rip), %xmm2 /* LCPI7_2(%rip) */ + QUAD $0xfffffeb31d6ffac5 // vmovdqu $-333(%rip), %xmm3 /* LCPI7_3(%rip) */ + +LBB7_28: + LONG $0x216ff9c5 // vmovdqa (%rcx), %xmm4 + LONG $0xe874d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm5 + LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 + LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 + LONG $0xf274d9c5 // vpcmpeqb %xmm2, %xmm4, %xmm6 + LONG $0xe374d9c5 // vpcmpeqb %xmm3, %xmm4, %xmm4 + LONG $0xe6ebd9c5 // vpor %xmm6, %xmm4, %xmm4 + LONG $0xe5ebd9c5 // vpor %xmm5, %xmm4, %xmm4 + LONG $0xc4d7f9c5 // vpmovmskb %xmm4, %eax + CMPW AX, $-1 + JNE LBB7_36 + ADDQ $16, CX + ADDQ $-16, DX + CMPQ DX, $15 + JA LBB7_28 + +LBB7_30: + TESTQ DX, DX + JE LBB7_38 + LEAQ 0(CX)(DX*1), SI + INCQ CX + MOVQ $4294977024, BX + MOVQ CX, AX + +LBB7_32: + MOVBLSX -1(AX), CX + CMPL CX, $32 + JA LBB7_78 + BTQ CX, BX + JAE LBB7_78 + DECQ DX + INCQ AX + TESTQ DX, DX + JNE LBB7_32 + MOVQ SI, CX + JMP LBB7_38 + +LBB7_36: + MOVWLZX AX, AX + SUBQ DI, CX + NOTL AX + BSFL AX, AX + ADDQ CX, AX + CMPQ AX, R15 + JB LBB7_39 + JMP LBB7_79 + +LBB7_37: + ADDQ BX, CX + +LBB7_38: + SUBQ DI, CX + MOVQ CX, AX + CMPQ AX, R15 + JAE LBB7_79 + +LBB7_39: + MOVB 0(DI)(AX*1), CX + +LBB7_40: + LEAQ 1(AX), R12 + MOVQ R12, -40(BP) + MOVBLSX CX, CX + CMPL CX, $125 + JA LBB7_43 + LONG $0x37158d48; WORD $0x0002; BYTE $0x00 // leaq $567(%rip), %rdx /* LJTI7_0(%rip) */ + MOVLQSX 0(DX)(CX*4), CX + ADDQ DX, CX + JMP CX + +LBB7_42: MOVQ AX, -40(BP) LEAQ -56(BP), DI LEAQ -40(BP), SI MOVQ R14, DX - LONG $0x000944e8; BYTE $0x00 // callq _vnumber + LONG $0x000787e8; BYTE $0x00 // callq _vnumber MOVQ -40(BP), AX - JMP LBB9_7 + JMP LBB7_81 -LBB9_4: - MOVQ AX, CX +LBB7_43: + MOVQ $-2, 0(R14) + JMP LBB7_81 -LBB9_5: +LBB7_44: + LEAQ 24(R14), CX + MOVQ R15, SI + MOVQ R12, DX + LONG $0x000460e8; BYTE $0x00 // callq _advance_string + TESTQ AX, AX + JS LBB7_63 + MOVQ AX, -40(BP) + MOVQ R12, 16(R14) + MOVL $7, CX + MOVQ CX, 0(R14) + JMP LBB7_81 + +LBB7_46: + XORL AX, AX + TESTL R8, R8 + SETEQ AX + MOVQ $-2, CX + MOVL $11, DX + JMP LBB7_57 + +LBB7_47: + XORL AX, AX + TESTL R8, R8 + SETEQ AX + MOVQ $-2, CX + MOVL $10, DX + JMP LBB7_57 + +LBB7_48: + MOVQ $5, 0(R14) + JMP LBB7_80 + +LBB7_49: + LEAQ -3(R15), CX + CMPQ AX, CX + JAE LBB7_61 + MOVL 0(DI)(AX*1), DX + CMPL DX, $1819047278 + JNE LBB7_64 + ADDQ $4, AX + MOVQ AX, -40(BP) + MOVL $2, CX + JMP LBB7_71 + +LBB7_52: + LEAQ -3(R15), CX + CMPQ AX, CX + JAE LBB7_61 + MOVL 0(DI)(AX*1), DX + CMPL DX, $1702195828 + JNE LBB7_67 + ADDQ $4, AX + MOVQ AX, -40(BP) + MOVL $3, CX + JMP LBB7_71 + +LBB7_55: + XORL AX, AX + TESTL R8, R8 + SETEQ AX + MOVQ $-2, CX + MOVL $13, DX + JMP LBB7_57 + +LBB7_56: + XORL AX, AX + TESTL R8, R8 + SETEQ AX + MOVQ $-2, CX + MOVL $12, DX + +LBB7_57: + LONG $0xd1440f48 // cmoveq %rcx, %rdx + MOVQ DX, 0(R14) + SUBQ AX, R12 + JMP LBB7_80 + +LBB7_58: + LEAQ -4(R15), CX + CMPQ AX, CX + JAE LBB7_61 + MOVL 0(DI)(R12*1), DX + CMPL DX, $1702063201 + JNE LBB7_73 + ADDQ $5, AX + MOVQ AX, -40(BP) + MOVL $4, CX + JMP LBB7_71 + +LBB7_61: + MOVQ R15, -40(BP) + MOVQ $-1, CX + JMP LBB7_72 + +LBB7_62: + MOVQ $6, 0(R14) + JMP LBB7_80 + +LBB7_63: + MOVQ R15, -40(BP) + MOVQ AX, 0(R14) + MOVQ R15, AX + JMP LBB7_81 + +LBB7_64: + MOVQ AX, -40(BP) + MOVQ $-2, CX + CMPB DX, $110 + JNE LBB7_71 + MOVL $1819047278, DX + +LBB7_66: + SHRL $8, DX + MOVBLSX 1(DI)(AX*1), SI + INCQ AX + MOVBLZX DX, BX + CMPL BX, SI + JE LBB7_66 + JMP LBB7_70 + +LBB7_67: + MOVQ AX, -40(BP) + MOVQ $-2, CX + CMPB DX, $116 + JNE LBB7_71 + MOVL $1702195828, DX + +LBB7_69: + SHRL $8, DX + MOVBLSX 1(DI)(AX*1), SI + INCQ AX + MOVBLZX DX, BX + CMPL BX, SI + JE LBB7_69 + +LBB7_70: + MOVQ AX, -40(BP) + +LBB7_71: + MOVQ AX, R15 + +LBB7_72: + MOVQ CX, 0(R14) + MOVQ R15, AX + JMP LBB7_81 + +LBB7_73: + MOVQ $-2, CX + CMPB DX, $97 + JNE LBB7_77 + MOVL $1702063201, AX + +LBB7_75: + SHRL $8, AX + MOVBLSX 1(DI)(R12*1), DX + INCQ R12 + MOVBLZX AX, SI + CMPL SI, DX + JE LBB7_75 + MOVQ R12, -40(BP) + +LBB7_77: + MOVQ R12, R15 + JMP LBB7_72 + +LBB7_78: + MOVQ DI, CX + NOTQ CX + ADDQ CX, AX + CMPQ AX, R15 + JB LBB7_39 + +LBB7_79: MOVQ $1, 0(R14) -LBB9_6: - MOVQ CX, AX +LBB7_80: + MOVQ R12, AX -LBB9_7: +LBB7_81: ADDQ $32, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 @@ -2743,741 +2791,447 @@ LBB9_7: BYTE $0x5d // popq %rbp RET -LBB9_8: - MOVQ $-2, 0(R14) - JMP LBB9_7 - -LBB9_9: - LEAQ -56(BP), DI - LEAQ -40(BP), SI - MOVQ R14, DX - LONG $0x0003cde8; BYTE $0x00 // callq _vstring - MOVQ -40(BP), AX - JMP LBB9_7 - -LBB9_10: - XORL AX, AX - TESTL R12, R12 - SETEQ AX - MOVQ $-2, DX - MOVL $11, SI - JMP LBB9_22 - -LBB9_11: - XORL AX, AX - TESTL R12, R12 - SETEQ AX - MOVQ $-2, DX - MOVL $10, SI - JMP LBB9_22 - -LBB9_12: - MOVQ $5, 0(R14) - JMP LBB9_6 - -LBB9_13: - LEAQ -3(BX), CX - CMPQ AX, CX - JAE LBB9_20 - MOVL 0(R15)(AX*1), DX - CMPL DX, $1819047278 - JNE LBB9_28 - ADDQ $4, AX - MOVQ AX, -40(BP) - MOVL $2, CX - JMP LBB9_35 - -LBB9_16: - LEAQ -3(BX), CX - CMPQ AX, CX - JAE LBB9_20 - MOVL 0(R15)(AX*1), DX - CMPL DX, $1702195828 - JNE LBB9_31 - ADDQ $4, AX - MOVQ AX, -40(BP) - MOVL $3, CX - JMP LBB9_35 - -LBB9_19: - XORL AX, AX - TESTL R12, R12 - SETEQ AX - MOVQ $-2, DX - MOVL $13, SI - JMP LBB9_22 - -LBB9_20: - MOVQ BX, -40(BP) - MOVQ $-1, CX - JMP LBB9_36 - -LBB9_21: - XORL AX, AX - TESTL R12, R12 - SETEQ AX - MOVQ $-2, DX - MOVL $12, SI - -LBB9_22: - LONG $0xf2440f48 // cmoveq %rdx, %rsi - MOVQ SI, 0(R14) - SUBQ AX, CX - JMP LBB9_6 - -LBB9_23: - LEAQ -4(BX), DX - CMPQ AX, DX - JAE LBB9_27 - MOVL 0(R15)(CX*1), SI - CMPL SI, $1702063201 - JNE LBB9_37 - ADDQ $5, AX - MOVQ AX, -40(BP) - MOVL $4, DX - MOVQ AX, BX - JMP LBB9_42 - -LBB9_26: - MOVQ $6, 0(R14) - JMP LBB9_6 - -LBB9_27: - MOVQ BX, -40(BP) - MOVQ $-1, DX - JMP LBB9_42 - -LBB9_28: - MOVQ AX, -40(BP) - MOVQ $-2, CX - CMPB DX, $110 - JNE LBB9_35 - MOVL $1819047278, DX - -LBB9_30: - SHRL $8, DX - MOVBLSX 1(R15)(AX*1), SI - INCQ AX - MOVBLZX DX, DI - CMPL DI, SI - JE LBB9_30 - JMP LBB9_34 - -LBB9_31: - MOVQ AX, -40(BP) - MOVQ $-2, CX - CMPB DX, $116 - JNE LBB9_35 - MOVL $1702195828, DX - -LBB9_33: - SHRL $8, DX - MOVBLSX 1(R15)(AX*1), SI - INCQ AX - MOVBLZX DX, DI - CMPL DI, SI - JE LBB9_33 - -LBB9_34: - MOVQ AX, -40(BP) - -LBB9_35: - MOVQ AX, BX - -LBB9_36: - MOVQ CX, 0(R14) - MOVQ BX, AX - JMP LBB9_7 - -LBB9_37: - MOVQ $-2, DX - CMPB SI, $97 - JNE LBB9_41 - MOVL $1702063201, AX - -LBB9_39: - SHRL $8, AX - MOVBLSX 1(R15)(CX*1), SI - INCQ CX - MOVBLZX AX, DI - CMPL DI, SI - JE LBB9_39 - MOVQ CX, -40(BP) - -LBB9_41: - MOVQ CX, BX - -LBB9_42: - MOVQ DX, 0(R14) - MOVQ BX, AX - JMP LBB9_7 - -// .set L9_0_set_5, LBB9_5-LJTI9_0 -// .set L9_0_set_8, LBB9_8-LJTI9_0 -// .set L9_0_set_9, LBB9_9-LJTI9_0 -// .set L9_0_set_10, LBB9_10-LJTI9_0 -// .set L9_0_set_3, LBB9_3-LJTI9_0 -// .set L9_0_set_11, LBB9_11-LJTI9_0 -// .set L9_0_set_12, LBB9_12-LJTI9_0 -// .set L9_0_set_21, LBB9_21-LJTI9_0 -// .set L9_0_set_23, LBB9_23-LJTI9_0 -// .set L9_0_set_13, LBB9_13-LJTI9_0 -// .set L9_0_set_16, LBB9_16-LJTI9_0 -// .set L9_0_set_26, LBB9_26-LJTI9_0 -// .set L9_0_set_19, LBB9_19-LJTI9_0 -LJTI9_0: - LONG $0xfffffe0b // .long L9_0_set_5 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe2b // .long L9_0_set_9 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe41 // .long L9_0_set_10 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffe5a // .long L9_0_set_11 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe73 // .long L9_0_set_12 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffef8 // .long L9_0_set_21 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xffffff1b // .long L9_0_set_23 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe7c // .long L9_0_set_13 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffea7 // .long L9_0_set_16 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xffffff49 // .long L9_0_set_26 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffed2 // .long L9_0_set_19 - -LCPI10_0: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' +// .set L7_0_set_79, LBB7_79-LJTI7_0 +// .set L7_0_set_43, LBB7_43-LJTI7_0 +// .set L7_0_set_44, LBB7_44-LJTI7_0 +// .set L7_0_set_46, LBB7_46-LJTI7_0 +// .set L7_0_set_42, LBB7_42-LJTI7_0 +// .set L7_0_set_47, LBB7_47-LJTI7_0 +// .set L7_0_set_48, LBB7_48-LJTI7_0 +// .set L7_0_set_56, LBB7_56-LJTI7_0 +// .set L7_0_set_58, LBB7_58-LJTI7_0 +// .set L7_0_set_49, LBB7_49-LJTI7_0 +// .set L7_0_set_52, LBB7_52-LJTI7_0 +// .set L7_0_set_62, LBB7_62-LJTI7_0 +// .set L7_0_set_55, LBB7_55-LJTI7_0 +LJTI7_0: + LONG $0xffffffe9 // .long L7_0_set_79 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdfb // .long L7_0_set_44 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffe28 // .long L7_0_set_46 + LONG $0xfffffdd2 // .long L7_0_set_42 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdd2 // .long L7_0_set_42 + LONG $0xfffffdd2 // .long L7_0_set_42 + LONG $0xfffffdd2 // .long L7_0_set_42 + LONG $0xfffffdd2 // .long L7_0_set_42 + LONG $0xfffffdd2 // .long L7_0_set_42 + LONG $0xfffffdd2 // .long L7_0_set_42 + LONG $0xfffffdd2 // .long L7_0_set_42 + LONG $0xfffffdd2 // .long L7_0_set_42 + LONG $0xfffffdd2 // .long L7_0_set_42 + LONG $0xfffffdd2 // .long L7_0_set_42 + LONG $0xfffffe41 // .long L7_0_set_47 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffe5a // .long L7_0_set_48 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffed8 // .long L7_0_set_56 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffefb // .long L7_0_set_58 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffe66 // .long L7_0_set_49 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffe94 // .long L7_0_set_52 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xffffff30 // .long L7_0_set_62 + LONG $0xfffffdef // .long L7_0_set_43 + LONG $0xfffffec2 // .long L7_0_set_55 _vstring: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp WORD $0x5741 // pushq %r15 WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax MOVQ DX, R14 MOVQ SI, R12 MOVQ DI, BX MOVQ 0(SI), R15 - MOVQ R15, SI - MOVL $34, DX - MOVL $92, CX - LONG $0xffe1fce8; BYTE $0xff // callq _strchr2 + LEAQ 24(DX), CX + MOVQ 0(DI), DI + MOVQ 8(BX), SI + MOVQ R15, DX + LONG $0x000048e8; BYTE $0x00 // callq _advance_string TESTQ AX, AX - JS LBB10_1 - MOVQ 0(BX), R11 - MOVQ $-1, DX - CMPB 0(R11)(AX*1), $34 - JNE LBB10_5 - MOVQ AX, CX + JS LBB8_1 + MOVQ AX, 0(R12) + MOVQ R15, 16(R14) + MOVL $7, AX + JMP LBB8_3 -LBB10_4: - MOVQ DX, 24(R14) - INCQ CX +LBB8_1: + MOVQ 8(BX), CX MOVQ CX, 0(R12) - MOVQ R15, 16(R14) - MOVL $7, AX - JMP LBB10_60 -LBB10_1: - MOVQ 8(BX), R10 - -LBB10_59: - MOVQ R10, 0(R12) - MOVQ $-1, AX - -LBB10_60: +LBB8_3: MOVQ AX, 0(R14) - ADDQ $8, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 WORD $0x5e41 // popq %r14 WORD $0x5f41 // popq %r15 BYTE $0x5d // popq %rbp RET -LBB10_5: - LEAQ 1(AX), R8 - MOVQ 8(BX), R10 - MOVQ R10, DX - SUBQ R8, DX - MOVQ AX, -48(BP) - LEAQ 1(R11)(AX*1), R13 - MOVQ R13, CX - MOVQ DX, SI - MOVQ R13, DI - ANDQ $15, CX - JE LBB10_9 - MOVQ R13, SI - ANDQ $-16, SI - LONG $0x066ff9c5 // vmovdqa (%rsi), %xmm0 - QUAD $0xffffff3b0574f9c5 // vpcmpeqb $-197(%rip), %xmm0, %xmm0 /* LCPI10_0(%rip) */ - LONG $0xf0d7f9c5 // vpmovmskb %xmm0, %esi - SHRQ CX, SI - TESTQ SI, SI - JE LBB10_8 - ORQ $65536, SI - BSFQ SI, SI - CMPQ SI, DX - MOVQ $-1, CX - LONG $0xce4c0f48 // cmovlq %rsi, %rcx - JMP LBB10_29 +LCPI9_0: + QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' -LBB10_8: - MOVL $16, BX - SUBQ CX, BX - LEAQ 0(R13)(BX*1), DI - MOVQ DX, SI - SUBQ BX, SI +LCPI9_1: + QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -LBB10_9: +_advance_string: + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5741 // pushq %r15 + WORD $0x5641 // pushq %r14 + WORD $0x5541 // pushq %r13 + WORD $0x5441 // pushq %r12 + BYTE $0x53 // pushq %rbx + BYTE $0x50 // pushq %rax + SUBQ DX, SI + ADDQ DI, DX + MOVQ $-1, 0(CX) CMPQ SI, $64 - JL LBB10_10 - QUAD $0xfffffef00d6ffac5 // vmovdqu $-272(%rip), %xmm1 /* LCPI10_0(%rip) */ + JB LBB9_1 + MOVQ $-1, -48(BP) + XORL R11, R11 + QUAD $0xffffffa8056ffac5 // vmovdqu $-88(%rip), %xmm0 /* LCPI9_0(%rip) */ + QUAD $0xffffffb00d6ffac5 // vmovdqu $-80(%rip), %xmm1 /* LCPI9_1(%rip) */ + MOVQ $6148914691236517205, R10 -LBB10_17: - LONG $0x276ff9c5 // vmovdqa (%rdi), %xmm4 - LONG $0x5f6ff9c5; BYTE $0x10 // vmovdqa $16(%rdi), %xmm3 - LONG $0x576ff9c5; BYTE $0x20 // vmovdqa $32(%rdi), %xmm2 - LONG $0x476ff9c5; BYTE $0x30 // vmovdqa $48(%rdi), %xmm0 - LONG $0xe974d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm5 - LONG $0xf174e1c5 // vpcmpeqb %xmm1, %xmm3, %xmm6 - LONG $0xedebc9c5 // vpor %xmm5, %xmm6, %xmm5 - LONG $0xf174e9c5 // vpcmpeqb %xmm1, %xmm2, %xmm6 - LONG $0xf974f9c5 // vpcmpeqb %xmm1, %xmm0, %xmm7 - LONG $0xf7ebc9c5 // vpor %xmm7, %xmm6, %xmm6 - LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 - LONG $0xcdd7f9c5 // vpmovmskb %xmm5, %ecx - TESTW CX, CX - JNE LBB10_19 - ADDQ $64, DI - LEAQ -64(SI), BX - CMPQ SI, $127 - MOVQ BX, SI - JG LBB10_17 - JMP LBB10_11 - -LBB10_10: - MOVQ SI, BX - -LBB10_11: - TESTQ BX, BX - JS LBB10_59 - LONG $0x076ff9c5 // vmovdqa (%rdi), %xmm0 - QUAD $0xfffffe8d0574f9c5 // vpcmpeqb $-371(%rip), %xmm0, %xmm0 /* LCPI10_0(%rip) */ - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - TESTW R9, R9 - JE LBB10_25 - -LBB10_13: - MOVQ DI, CX - -LBB10_14: - MOVWLZX R9, SI - ORQ $65536, SI - BSFQ SI, SI - CMPQ SI, BX - JGE LBB10_59 - SUBQ R13, CX - ADDQ SI, CX - JMP LBB10_29 - -LBB10_19: - QUAD $0xfffffe550d74d9c5 // vpcmpeqb $-427(%rip), %xmm4, %xmm1 /* LCPI10_0(%rip) */ - LONG $0xc9d7f9c5 // vpmovmskb %xmm1, %ecx - TESTW CX, CX - JE LBB10_21 - MOVWLZX CX, CX - SUBQ R13, DI - ORQ $65536, CX - BSFQ CX, CX - ADDQ DI, CX - JMP LBB10_29 - -LBB10_25: - CMPQ BX, $15 - JLE LBB10_59 - LEAQ 16(DI), CX - LONG $0x016ff9c5 // vmovdqa (%rcx), %xmm0 - QUAD $0xfffffe190574f9c5 // vpcmpeqb $-487(%rip), %xmm0, %xmm0 /* LCPI10_0(%rip) */ - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - TESTW R9, R9 - JE LBB10_69 - ADDQ $-16, BX - JMP LBB10_14 - -LBB10_21: - QUAD $0xfffffe010d74e1c5 // vpcmpeqb $-511(%rip), %xmm3, %xmm1 /* LCPI10_0(%rip) */ - LONG $0xc9d7f9c5 // vpmovmskb %xmm1, %ecx - TESTW CX, CX - JE LBB10_23 - MOVWLZX CX, CX - ORQ $65536, CX - BSFQ CX, CX - SUBQ R13, DI - LEAQ 16(DI)(CX*1), CX - JMP LBB10_29 - -LBB10_23: - QUAD $0xfffffdd80d74e9c5 // vpcmpeqb $-552(%rip), %xmm2, %xmm1 /* LCPI10_0(%rip) */ - LONG $0xc9d7f9c5 // vpmovmskb %xmm1, %ecx - SUBQ R13, DI - TESTW CX, CX - JE LBB10_28 - MOVWLZX CX, CX - ORQ $65536, CX - BSFQ CX, CX - LEAQ 32(DI)(CX*1), CX - JMP LBB10_29 - -LBB10_69: - CMPQ BX, $32 - JL LBB10_59 - LEAQ 32(DI), CX - LONG $0x016ff9c5 // vmovdqa (%rcx), %xmm0 - QUAD $0xfffffd9d0574f9c5 // vpcmpeqb $-611(%rip), %xmm0, %xmm0 /* LCPI10_0(%rip) */ - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - TESTW R9, R9 - JE LBB10_72 - ADDQ $-32, BX - JMP LBB10_14 - -LBB10_28: - QUAD $0xfffffd7e0574f9c5 // vpcmpeqb $-642(%rip), %xmm0, %xmm0 /* LCPI10_0(%rip) */ - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - ORQ $65536, CX - BSFQ CX, CX - LEAQ 48(DI)(CX*1), CX - -LBB10_29: - CMPQ CX, DX - JAE LBB10_59 - ADDQ R8, CX - JS LBB10_59 - LEAQ -1(R11), R8 - QUAD $0xfffffd4c056ffac5 // vmovdqu $-692(%rip), %xmm0 /* LCPI10_0(%rip) */ - QUAD $0xfffffd44056f7ac5 // vmovdqu $-700(%rip), %xmm8 /* LCPI10_0(%rip) */ - -LBB10_32: - LEAQ 0(R8)(CX*1), SI - XORL DX, DX - -LBB10_33: - CMPB 0(SI)(DX*1), $92 - LEAQ -1(DX), DX - JE LBB10_33 - NOTL DX - TESTB $1, DX - JE LBB10_58 - LEAQ 1(CX), R13 - MOVQ R10, DX - SUBQ R13, DX - LEAQ 1(R11)(CX*1), R9 - MOVQ R9, CX - MOVQ DX, BX - MOVQ R9, DI - ANDQ $15, CX - JE LBB10_39 - MOVQ R9, DI - ANDQ $-16, DI - LONG $0x1774b9c5 // vpcmpeqb (%rdi), %xmm8, %xmm2 - LONG $0xfad7f9c5 // vpmovmskb %xmm2, %edi - SHRQ CX, DI - TESTQ DI, DI - JE LBB10_38 - ORQ $65536, DI - BSFQ DI, CX - CMPQ CX, DX - MOVQ $-1, AX - LONG $0xc84d0f48 // cmovgeq %rax, %rcx - JMP LBB10_56 - -LBB10_38: - MOVL $16, SI - SUBQ CX, SI - LEAQ 0(R9)(SI*1), DI - MOVQ DX, BX - SUBQ SI, BX - -LBB10_39: - MOVQ BX, CX - CMPQ BX, $64 - JL LBB10_40 - -LBB10_45: - LONG $0x2f6ff9c5 // vmovdqa (%rdi), %xmm5 - LONG $0x676ff9c5; BYTE $0x10 // vmovdqa $16(%rdi), %xmm4 - LONG $0x5f6ff9c5; BYTE $0x20 // vmovdqa $32(%rdi), %xmm3 - LONG $0x576ff9c5; BYTE $0x30 // vmovdqa $48(%rdi), %xmm2 +LBB9_3: + LONG $0x126ffac5 // vmovdqu (%rdx), %xmm2 + LONG $0x5a6ffac5; BYTE $0x10 // vmovdqu $16(%rdx), %xmm3 + LONG $0x626ffac5; BYTE $0x20 // vmovdqu $32(%rdx), %xmm4 + LONG $0x6a6ffac5; BYTE $0x30 // vmovdqu $48(%rdx), %xmm5 + LONG $0xf074e9c5 // vpcmpeqb %xmm0, %xmm2, %xmm6 + LONG $0xf6d779c5 // vpmovmskb %xmm6, %r14d + LONG $0xf074e1c5 // vpcmpeqb %xmm0, %xmm3, %xmm6 + LONG $0xc6d7f9c5 // vpmovmskb %xmm6, %eax + LONG $0xf074d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm6 + LONG $0xded7f9c5 // vpmovmskb %xmm6, %ebx LONG $0xf074d1c5 // vpcmpeqb %xmm0, %xmm5, %xmm6 - LONG $0xf874d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm7 - LONG $0xf6ebc1c5 // vpor %xmm6, %xmm7, %xmm6 - LONG $0xf874e1c5 // vpcmpeqb %xmm0, %xmm3, %xmm7 - LONG $0xc874e9c5 // vpcmpeqb %xmm0, %xmm2, %xmm1 - LONG $0xc9ebc1c5 // vpor %xmm1, %xmm7, %xmm1 - LONG $0xc9ebc9c5 // vpor %xmm1, %xmm6, %xmm1 - LONG $0xf1d7f9c5 // vpmovmskb %xmm1, %esi - TESTW SI, SI - JNE LBB10_47 - ADDQ $64, DI - LEAQ -64(CX), BX - CMPQ CX, $127 - MOVQ BX, CX - JG LBB10_45 + LONG $0xe6d779c5 // vpmovmskb %xmm6, %r12d + LONG $0xd174e9c5 // vpcmpeqb %xmm1, %xmm2, %xmm2 + LONG $0xfad779c5 // vpmovmskb %xmm2, %r15d + LONG $0xd174e1c5 // vpcmpeqb %xmm1, %xmm3, %xmm2 + LONG $0xead779c5 // vpmovmskb %xmm2, %r13d + LONG $0xd174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm2 + LONG $0xc2d779c5 // vpmovmskb %xmm2, %r8d + LONG $0xd174d1c5 // vpcmpeqb %xmm1, %xmm5, %xmm2 + LONG $0xcad779c5 // vpmovmskb %xmm2, %r9d + SHLQ $48, R12 + SHLQ $32, BX + SHLQ $16, AX + ORQ AX, R14 + ORQ BX, R14 + ORQ R12, R14 + SHLQ $48, R9 + SHLQ $32, R8 + SHLQ $16, R13 + ORQ R13, R15 + ORQ R8, R15 + ORQ R9, R15 + JNE LBB9_4 + TESTQ R11, R11 + JNE LBB9_6 + XORL R11, R11 + TESTQ R14, R14 + JNE LBB9_10 -LBB10_40: - TESTQ BX, BX - JS LBB10_59 - MOVQ R12, AX - MOVQ R10, R12 - MOVQ R14, R10 - MOVQ R15, R14 - MOVQ R8, R15 - LONG $0x0f74b9c5 // vpcmpeqb (%rdi), %xmm8, %xmm1 - LONG $0xc1d779c5 // vpmovmskb %xmm1, %r8d - TESTW R8, R8 - JE LBB10_53 +LBB9_12: + ADDQ $64, DX + ADDQ $-64, SI + CMPQ SI, $63 + JA LBB9_3 + JMP LBB9_13 -LBB10_42: - MOVQ DI, CX - JMP LBB10_43 +LBB9_4: + CMPQ -48(BP), $-1 + JNE LBB9_6 + MOVQ DX, AX + SUBQ DI, AX + BSFQ R15, BX + ADDQ AX, BX + MOVQ BX, -48(BP) + MOVQ BX, 0(CX) -LBB10_53: - CMPQ BX, $15 - JLE LBB10_54 - LEAQ 16(DI), CX - LONG $0x0974b9c5 // vpcmpeqb (%rcx), %xmm8, %xmm1 - LONG $0xc1d779c5 // vpmovmskb %xmm1, %r8d - TESTW R8, R8 - JE LBB10_63 - ADDQ $-16, BX - JMP LBB10_43 +LBB9_6: + MOVQ R11, R9 + NOTQ R9 + ANDQ R15, R9 + LEAQ 0(R9)(R9*1), R8 + ORQ R11, R8 + MOVQ R8, BX + NOTQ BX + ANDQ R15, BX + MOVQ $-6148914691236517206, AX + ANDQ AX, BX + XORL R11, R11 + ADDQ R9, BX + SETCS R11 + ADDQ BX, BX + XORQ R10, BX + ANDQ R8, BX + NOTQ BX + ANDQ BX, R14 + TESTQ R14, R14 + JE LBB9_12 -LBB10_47: - LONG $0xcd74b9c5 // vpcmpeqb %xmm5, %xmm8, %xmm1 - LONG $0xc9d7f9c5 // vpmovmskb %xmm1, %ecx - TESTW CX, CX - JE LBB10_49 - MOVWLZX CX, CX - SUBQ R9, DI - ORQ $65536, CX - BSFQ CX, CX - ADDQ DI, CX - JMP LBB10_56 +LBB9_10: + BSFQ R14, AX -LBB10_63: - CMPQ BX, $32 - JL LBB10_54 - LEAQ 32(DI), CX - LONG $0x0974b9c5 // vpcmpeqb (%rcx), %xmm8, %xmm1 - LONG $0xc1d779c5 // vpmovmskb %xmm1, %r8d - TESTW R8, R8 - JE LBB10_66 - ADDQ $-32, BX +LBB9_11: + SUBQ DI, DX + LEAQ 1(DX)(AX*1), AX -LBB10_43: - MOVWLZX R8, SI - ORQ $65536, SI - BSFQ SI, DI - CMPQ DI, BX - JGE LBB10_54 - SUBQ R9, CX - ADDQ DI, CX - MOVQ R15, R8 - MOVQ R14, R15 - MOVQ R10, R14 - MOVQ R12, R10 - MOVQ AX, R12 +LBB9_40: + ADDQ $8, SP + BYTE $0x5b // popq %rbx + WORD $0x5c41 // popq %r12 + WORD $0x5d41 // popq %r13 + WORD $0x5e41 // popq %r14 + WORD $0x5f41 // popq %r15 + BYTE $0x5d // popq %rbp + RET -LBB10_56: - CMPQ CX, DX - JAE LBB10_59 - ADDQ R13, CX - JNS LBB10_32 - JMP LBB10_59 +LBB9_1: + MOVQ $-1, -48(BP) + XORL R11, R11 -LBB10_49: - LONG $0xcc74b9c5 // vpcmpeqb %xmm4, %xmm8, %xmm1 - LONG $0xc9d7f9c5 // vpmovmskb %xmm1, %ecx - TESTW CX, CX - JE LBB10_51 - MOVWLZX CX, CX - ORQ $65536, CX - BSFQ CX, CX - SUBQ R9, DI - LEAQ 16(DI)(CX*1), CX - JMP LBB10_56 +LBB9_13: + CMPQ SI, $32 + JB LBB9_23 + LONG $0x026ffac5 // vmovdqu (%rdx), %xmm0 + LONG $0x4a6ffac5; BYTE $0x10 // vmovdqu $16(%rdx), %xmm1 + QUAD $0xfffffe53156ffac5 // vmovdqu $-429(%rip), %xmm2 /* LCPI9_0(%rip) */ + QUAD $0xfffffe5b1d6ffac5 // vmovdqu $-421(%rip), %xmm3 /* LCPI9_1(%rip) */ + LONG $0xe274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm4 + LONG $0xc4d779c5 // vpmovmskb %xmm4, %r8d + LONG $0xd274f1c5 // vpcmpeqb %xmm2, %xmm1, %xmm2 + LONG $0xc2d7f9c5 // vpmovmskb %xmm2, %eax + LONG $0xc374f9c5 // vpcmpeqb %xmm3, %xmm0, %xmm0 + LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d + LONG $0xc374f1c5 // vpcmpeqb %xmm3, %xmm1, %xmm0 + LONG $0xd8d7f9c5 // vpmovmskb %xmm0, %ebx + SHLQ $16, AX + ORQ AX, R8 + SHLQ $16, BX + ORQ BX, R9 + JNE LBB9_15 + TESTQ R11, R11 + JNE LBB9_17 + XORL R11, R11 + TESTQ R8, R8 + JE LBB9_22 -LBB10_66: - CMPQ BX, $48 - JL LBB10_54 - ADDQ $48, DI - LONG $0x0f74b9c5 // vpcmpeqb (%rdi), %xmm8, %xmm1 - LONG $0xc1d779c5 // vpmovmskb %xmm1, %r8d - TESTW R8, R8 - JE LBB10_54 - ADDQ $-48, BX - JMP LBB10_42 +LBB9_21: + BSFQ R8, AX + JMP LBB9_11 -LBB10_51: - LONG $0xcb74b9c5 // vpcmpeqb %xmm3, %xmm8, %xmm1 - LONG $0xc9d7f9c5 // vpmovmskb %xmm1, %ecx - SUBQ R9, DI - TESTW CX, CX - JE LBB10_55 - MOVWLZX CX, CX - ORQ $65536, CX - BSFQ CX, CX - LEAQ 32(DI)(CX*1), CX - JMP LBB10_56 +LBB9_15: + CMPQ -48(BP), $-1 + JNE LBB9_17 + MOVQ DX, AX + SUBQ DI, AX + BSFQ R9, BX + ADDQ AX, BX + MOVQ BX, -48(BP) + MOVQ BX, 0(CX) -LBB10_55: - LONG $0xca74b9c5 // vpcmpeqb %xmm2, %xmm8, %xmm1 - LONG $0xc9d7f9c5 // vpmovmskb %xmm1, %ecx - ORQ $65536, CX - BSFQ CX, CX - LEAQ 48(DI)(CX*1), CX - JMP LBB10_56 +LBB9_17: + MOVL R11, AX + NOTL AX + ANDL R9, AX + LEAL 0(R11)(AX*2), R10 + LEAL 0(AX)(AX*1), BX + NOTL BX + ANDL R9, BX + ANDL $-1431655766, BX + XORL R11, R11 + ADDL AX, BX + SETCS R11 + ADDL BX, BX + XORL $1431655765, BX + ANDL R10, BX + NOTL BX + ANDL BX, R8 + TESTQ R8, R8 + JNE LBB9_21 -LBB10_58: - MOVQ -48(BP), DX - TESTQ CX, CX - JNS LBB10_4 - JMP LBB10_59 +LBB9_22: + ADDQ $32, DX + ADDQ $-32, SI -LBB10_54: - MOVQ R10, R14 - MOVQ R12, R10 - MOVQ AX, R12 - JMP LBB10_59 +LBB9_23: + TESTQ R11, R11 + JNE LBB9_24 + MOVQ $-1, AX + TESTQ SI, SI + JE LBB9_40 -LBB10_72: - CMPQ BX, $48 - JL LBB10_59 - ADDQ $48, DI - LONG $0x076ff9c5 // vmovdqa (%rdi), %xmm0 - QUAD $0xfffffad90574f9c5 // vpcmpeqb $-1319(%rip), %xmm0, %xmm0 /* LCPI10_0(%rip) */ - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - TESTW R9, R9 - JE LBB10_59 - ADDQ $-48, BX - JMP LBB10_13 +LBB9_30: + MOVQ DI, R9 + NOTQ R9 -LCPI11_0: +LBB9_31: + LEAQ 1(DX), R11 + MOVBLZX 0(DX), BX + CMPB BX, $34 + JE LBB9_39 + LEAQ -1(SI), R10 + CMPB BX, $92 + JE LBB9_34 + MOVQ R10, SI + MOVQ R11, DX + TESTQ R10, R10 + JNE LBB9_31 + JMP LBB9_40 + +LBB9_34: + TESTQ R10, R10 + JE LBB9_40 + CMPQ -48(BP), $-1 + JNE LBB9_37 + ADDQ R9, R11 + MOVQ R11, 0(CX) + MOVQ R11, -48(BP) + +LBB9_37: + ADDQ $2, DX + ADDQ $-2, SI + MOVQ SI, R10 + TESTQ R10, R10 + JNE LBB9_31 + JMP LBB9_40 + +LBB9_39: + SUBQ DI, R11 + MOVQ R11, AX + JMP LBB9_40 + +LBB9_24: + TESTQ SI, SI + JE LBB9_25 + CMPQ -48(BP), $-1 + JNE LBB9_28 + MOVQ DI, AX + NOTQ AX + ADDQ DX, AX + MOVQ AX, -48(BP) + MOVQ AX, 0(CX) + +LBB9_28: + INCQ DX + DECQ SI + MOVQ $-1, AX + TESTQ SI, SI + JNE LBB9_30 + JMP LBB9_40 + +LBB9_25: + MOVQ $-1, AX + JMP LBB9_40 + +LCPI10_0: QUAD $0x4024000000000000 // .quad 0x4024000000000000 -LCPI11_1: +LCPI10_1: QUAD $0x7ff0000000000000 // .quad 0x7ff0000000000000 _vnumber: @@ -3497,83 +3251,83 @@ _vnumber: MOVQ 0(SI), CX MOVQ CX, 24(DX) CMPQ AX, R15 - JAE LBB11_56 + JAE LBB10_56 MOVB 0(R8)(AX*1), CX MOVL $1, R10 CMPB CX, $45 - JNE LBB11_4 + JNE LBB10_4 INCQ AX CMPQ AX, R15 - JAE LBB11_56 + JAE LBB10_56 MOVB 0(R8)(AX*1), CX MOVL $-1, R10 -LBB11_4: +LBB10_4: LEAL -48(CX), DI CMPB DI, $10 - JB LBB11_6 + JB LBB10_6 MOVQ AX, 0(SI) MOVQ $-2, 0(DX) - JMP LBB11_57 + JMP LBB10_57 -LBB11_6: +LBB10_6: CMPB CX, $48 - JNE LBB11_10 + JNE LBB10_10 LEAQ 1(AX), CX CMPQ AX, R15 - JAE LBB11_21 + JAE LBB10_21 MOVB 0(R8)(CX*1), BX ADDB $-46, BX CMPB BX, $55 - JA LBB11_21 + JA LBB10_21 MOVBLZX BX, DI MOVQ $36028797027352577, BX BTQ DI, BX - JAE LBB11_21 + JAE LBB10_21 -LBB11_10: +LBB10_10: CMPQ AX, R15 MOVQ R15, R9 LONG $0xc8470f4c // cmovaq %rax, %r9 XORL R12, R12 -LBB11_11: +LBB10_11: MOVQ R12, DI CMPQ R9, AX - JE LBB11_22 + JE LBB10_22 MOVQ AX, R13 MOVBLZX 0(R8)(AX*1), BX LEAL -48(BX), AX CMPB AX, $9 - JA LBB11_23 + JA LBB10_23 ADDL $-48, BX IMULL R10, BX IMUL3Q $10, DI, R12 - JO LBB11_15 + JO LBB10_15 LEAQ 1(R13), AX MOVLQSX BX, CX ADDQ CX, R12 - JNO LBB11_11 + JNO LBB10_11 -LBB11_15: +LBB10_15: LONG $0x2af3e1c4; BYTE $0xc7 // vcvtsi2sd %rdi, %xmm1, %xmm0 - QUAD $0xfffffef10559fbc5 // vmulsd $-271(%rip), %xmm0, %xmm0 /* LCPI11_0(%rip) */ + QUAD $0xfffffef10559fbc5 // vmulsd $-271(%rip), %xmm0, %xmm0 /* LCPI10_0(%rip) */ LONG $0xcb2af3c5 // vcvtsi2sd %ebx, %xmm1, %xmm1 LONG $0xc158fbc5 // vaddsd %xmm1, %xmm0, %xmm0 MOVQ $8, 0(DX) LEAQ 1(R13), AX CMPQ AX, R15 SETCS CX - JAE LBB11_26 + JAE LBB10_26 MOVB 1(R8)(R13*1), DI LEAL -48(DI), BX MOVB $1, CX CMPB BX, $9 - JA LBB11_26 + JA LBB10_26 ADDQ $2, R13 - QUAD $0xfffffeb70d10fbc5 // vmovsd $-329(%rip), %xmm1 /* LCPI11_0(%rip) */ + QUAD $0xfffffeb70d10fbc5 // vmovsd $-329(%rip), %xmm1 /* LCPI10_0(%rip) */ -LBB11_18: +LBB10_18: MOVQ R13, CX MOVBLZX DI, AX LONG $0xc159fbc5 // vmulsd %xmm1, %xmm0, %xmm0 @@ -3582,78 +3336,78 @@ LBB11_18: LONG $0xd02ae3c5 // vcvtsi2sd %eax, %xmm3, %xmm2 LONG $0xc258fbc5 // vaddsd %xmm2, %xmm0, %xmm0 CMPQ R15, R13 - JE LBB11_24 + JE LBB10_24 MOVBLZX 0(R8)(CX*1), DI LEAL -48(DI), AX LEAQ 1(CX), R13 CMPB AX, $9 - JBE LBB11_18 + JBE LBB10_18 DECQ R13 MOVQ R13, AX - JMP LBB11_25 + JMP LBB10_25 -LBB11_21: +LBB10_21: MOVQ CX, 0(SI) - JMP LBB11_57 + JMP LBB10_57 -LBB11_22: +LBB10_22: LONG $0x2af3e1c4; BYTE $0xc7 // vcvtsi2sd %rdi, %xmm1, %xmm0 MOVQ R9, R15 MOVQ DI, R12 - JMP LBB11_75 + JMP LBB10_75 -LBB11_23: +LBB10_23: LONG $0x2af3e1c4; BYTE $0xc7 // vcvtsi2sd %rdi, %xmm1, %xmm0 MOVB $1, R9 MOVQ DI, R12 CMPQ R13, R15 - JB LBB11_27 - JMP LBB11_49 + JB LBB10_27 + JMP LBB10_49 -LBB11_24: +LBB10_24: MOVQ R15, AX -LBB11_25: +LBB10_25: CMPQ CX, R15 SETCS CX -LBB11_26: +LBB10_26: XORL R9, R9 MOVQ AX, R13 TESTB CX, CX - JE LBB11_49 + JE LBB10_49 -LBB11_27: +LBB10_27: CMPB 0(R8)(R13*1), $46 - JNE LBB11_49 + JNE LBB10_49 LEAQ 1(R13), R11 MOVQ $8, 0(DX) CMPQ R11, R15 - JAE LBB11_56 + JAE LBB10_56 MOVB 0(R8)(R11*1), R14 LEAL -48(R14), CX CMPB CX, $9 - JBE LBB11_31 + JBE LBB10_31 MOVQ R11, 0(SI) MOVQ $-2, 0(DX) - JMP LBB11_57 + JMP LBB10_57 -LBB11_31: +LBB10_31: LONG $0xc957f1c5 // vxorpd %xmm1, %xmm1, %xmm1 MOVQ R11, AX LONG $0xd257e9c5 // vxorpd %xmm2, %xmm2, %xmm2 CMPB CX, $9 - JA LBB11_40 + JA LBB10_40 LEAL 18(R13), AX MOVLQSX AX, DI MOVQ R11, AX LONG $0xd257e9c5 // vxorpd %xmm2, %xmm2, %xmm2 CMPQ R13, DI - JGE LBB11_40 + JGE LBB10_40 ADDQ $2, R13 XORL CX, CX -LBB11_34: +LBB10_34: MOVBLZX R14, AX LEAQ 0(CX)(CX*4), CX ADDL $-48, AX @@ -3661,92 +3415,92 @@ LBB11_34: WORD $0x9848 // cltq LEAQ 0(AX)(CX*2), CX CMPQ R15, R13 - JE LBB11_38 + JE LBB10_38 MOVBLZX 0(R8)(R13*1), R14 LEAL -48(R14), BX LEAQ 1(R13), AX CMPB BX, $9 - JA LBB11_37 + JA LBB10_37 CMPQ R13, DI MOVQ AX, R13 - JLE LBB11_34 + JLE LBB10_34 -LBB11_37: +LBB10_37: DECQ AX - JMP LBB11_39 + JMP LBB10_39 -LBB11_38: +LBB10_38: MOVQ R15, AX -LBB11_39: +LBB10_39: LONG $0x2ae3e1c4; BYTE $0xd1 // vcvtsi2sd %rcx, %xmm3, %xmm2 -LBB11_40: +LBB10_40: SUBQ AX, R11 CMPL R11, $-323 - JL LBB11_44 + JL LBB10_44 CMPL R11, $308 - JLE LBB11_43 - QUAD $0xfffffd820d10fbc5 // vmovsd $-638(%rip), %xmm1 /* LCPI11_1(%rip) */ - JMP LBB11_44 + JLE LBB10_43 + QUAD $0xfffffd820d10fbc5 // vmovsd $-638(%rip), %xmm1 /* LCPI10_1(%rip) */ + JMP LBB10_44 -LBB11_43: +LBB10_43: ADDL $323, R11 - LONG $0xb10d8d48; WORD $0x0018; BYTE $0x00 // leaq $6321(%rip), %rcx /* _P10_TAB(%rip) */ + LONG $0xb10d8d48; WORD $0x0037; BYTE $0x00 // leaq $14257(%rip), %rcx /* _P10_TAB(%rip) */ LONG $0x596ba1c4; WORD $0xd90c // vmulsd (%rcx,%r11,8), %xmm2, %xmm1 -LBB11_44: +LBB10_44: LONG $0xc158fbc5 // vaddsd %xmm1, %xmm0, %xmm0 CMPQ AX, R15 - JAE LBB11_48 + JAE LBB10_48 -LBB11_45: +LBB10_45: MOVBLZX 0(R8)(AX*1), CX ADDB $-48, CX CMPB CX, $9 - JA LBB11_48 + JA LBB10_48 INCQ AX CMPQ R15, AX - JNE LBB11_45 - JMP LBB11_74 + JNE LBB10_45 + JMP LBB10_74 -LBB11_48: +LBB10_48: MOVQ AX, R13 -LBB11_49: +LBB10_49: CMPQ R13, R15 - JAE LBB11_73 + JAE LBB10_73 MOVB 0(R8)(R13*1), AX ORB $32, AX CMPB AX, $101 - JNE LBB11_73 + JNE LBB10_73 LEAQ 1(R13), CX MOVQ $8, 0(DX) CMPQ CX, R15 - JAE LBB11_56 + JAE LBB10_56 MOVB 0(R8)(CX*1), AX CMPB AX, $45 - JE LBB11_54 + JE LBB10_54 MOVL $1, R10 CMPB AX, $43 - JNE LBB11_58 + JNE LBB10_58 -LBB11_54: +LBB10_54: ADDQ $2, R13 CMPQ R13, R15 - JAE LBB11_56 + JAE LBB10_56 XORL CX, CX CMPB AX, $43 SETEQ CX LEAL -1(CX)(CX*1), R10 MOVB 0(R8)(R13*1), AX - JMP LBB11_59 + JMP LBB10_59 -LBB11_56: +LBB10_56: MOVQ R15, 0(SI) MOVQ $-1, 0(DX) -LBB11_57: +LBB10_57: BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 WORD $0x5d41 // popq %r13 @@ -3755,78 +3509,78 @@ LBB11_57: BYTE $0x5d // popq %rbp RET -LBB11_58: +LBB10_58: MOVQ CX, R13 -LBB11_59: +LBB10_59: LEAL -48(AX), CX CMPB CX, $9 - JBE LBB11_61 + JBE LBB10_61 MOVQ R13, 0(SI) MOVQ $-2, 0(DX) - JMP LBB11_57 + JMP LBB10_57 -LBB11_61: +LBB10_61: XORL R11, R11 CMPQ R13, R15 - JAE LBB11_72 + JAE LBB10_72 XORL R11, R11 CMPB CX, $9 - JA LBB11_67 + JA LBB10_67 LEAQ -1(R15), CX XORL R11, R11 -LBB11_64: +LBB10_64: LEAL 0(R11)(R11*4), DI MOVBLZX AX, AX ADDL $-48, AX IMULL R10, AX LEAL 0(AX)(DI*2), R11 CMPQ CX, R13 - JE LBB11_66 + JE LBB10_66 MOVBLZX 1(R8)(R13*1), AX INCQ R13 LEAL -48(AX), DI CMPB DI, $10 - JB LBB11_64 - JMP LBB11_67 + JB LBB10_64 + JMP LBB10_67 -LBB11_66: +LBB10_66: MOVQ R15, R13 -LBB11_67: +LBB10_67: CMPL R11, $1 - JE LBB11_73 + JE LBB10_73 CMPL R11, $-323 - JGE LBB11_70 + JGE LBB10_70 LONG $0xc057f9c5 // vxorpd %xmm0, %xmm0, %xmm0 - JMP LBB11_73 + JMP LBB10_73 -LBB11_70: +LBB10_70: CMPL R11, $308 - JLE LBB11_72 - QUAD $0xfffffc5b0510fbc5 // vmovsd $-933(%rip), %xmm0 /* LCPI11_1(%rip) */ - JMP LBB11_73 + JLE LBB10_72 + QUAD $0xfffffc5b0510fbc5 // vmovsd $-933(%rip), %xmm0 /* LCPI10_1(%rip) */ + JMP LBB10_73 -LBB11_72: +LBB10_72: ADDL $323, R11 - LONG $0x8a058d48; WORD $0x0017; BYTE $0x00 // leaq $6026(%rip), %rax /* _P10_TAB(%rip) */ + LONG $0x8a058d48; WORD $0x0036; BYTE $0x00 // leaq $13962(%rip), %rax /* _P10_TAB(%rip) */ LONG $0x597ba1c4; WORD $0xd804 // vmulsd (%rax,%r11,8), %xmm0, %xmm0 -LBB11_73: +LBB10_73: MOVQ R13, R15 -LBB11_74: +LBB10_74: TESTB R9, R9 - JE LBB11_76 + JE LBB10_76 -LBB11_75: +LBB10_75: MOVQ R12, 16(DX) -LBB11_76: +LBB10_76: MOVQ R15, 0(SI) LONG $0x4211fbc5; BYTE $0x08 // vmovsd %xmm0, $8(%rdx) - JMP LBB11_57 + JMP LBB10_57 _vsigned: BYTE $0x55 // pushq %rbp @@ -3841,71 +3595,71 @@ _vsigned: MOVQ 0(SI), CX MOVQ CX, 24(DX) CMPQ AX, R11 - JAE LBB12_1 + JAE LBB11_1 MOVB 0(R8)(AX*1), CX MOVL $1, R9 CMPB CX, $45 - JNE LBB12_5 + JNE LBB11_5 INCQ AX CMPQ AX, R11 - JAE LBB12_1 + JAE LBB11_1 MOVB 0(R8)(AX*1), CX MOVQ $-1, R9 -LBB12_5: +LBB11_5: LEAL -48(CX), DI CMPB DI, $10 - JB LBB12_7 + JB LBB11_7 MOVQ AX, 0(SI) MOVQ $-2, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB12_1: +LBB11_1: MOVQ R11, 0(SI) MOVQ $-1, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB12_7: +LBB11_7: CMPB CX, $48 - JNE LBB12_12 + JNE LBB11_12 LEAQ 1(AX), DI CMPQ AX, R11 - JAE LBB12_11 + JAE LBB11_11 MOVB 0(R8)(DI*1), CX ADDB $-46, CX CMPB CX, $55 - JA LBB12_11 + JA LBB11_11 MOVBLZX CX, R10 MOVQ $36028797027352577, CX BTQ R10, CX - JAE LBB12_11 + JAE LBB11_11 -LBB12_12: +LBB11_12: CMPQ AX, R11 MOVQ R11, R10 LONG $0xd0470f4c // cmovaq %rax, %r10 XORL DI, DI -LBB12_13: +LBB11_13: CMPQ R10, AX - JE LBB12_23 + JE LBB11_23 MOVBQSX 0(R8)(AX*1), CX LEAL -48(CX), BX CMPB BX, $9 - JA LBB12_18 + JA LBB11_18 IMUL3Q $10, DI, DI - JO LBB12_17 + JO LBB11_17 INCQ AX ADDL $-48, CX IMULQ R9, CX ADDQ CX, DI - JNO LBB12_13 + JNO LBB11_13 -LBB12_17: +LBB11_17: DECQ AX MOVQ AX, 0(SI) MOVQ $-5, 0(DX) @@ -3913,33 +3667,33 @@ LBB12_17: BYTE $0x5d // popq %rbp RET -LBB12_11: +LBB11_11: MOVQ DI, 0(SI) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB12_18: +LBB11_18: CMPQ AX, R11 - JAE LBB12_22 + JAE LBB11_22 CMPB CX, $46 - JE LBB12_25 + JE LBB11_25 CMPB CX, $69 - JE LBB12_25 + JE LBB11_25 CMPB CX, $101 - JNE LBB12_22 + JNE LBB11_22 -LBB12_25: +LBB11_25: MOVQ AX, 0(SI) MOVQ $-6, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB12_22: +LBB11_22: MOVQ AX, R10 -LBB12_23: +LBB11_23: MOVQ R10, 0(SI) MOVQ DI, 16(DX) BYTE $0x5b // popq %rbx @@ -3960,60 +3714,60 @@ _vunsigned: MOVQ 0(SI), AX MOVQ AX, 24(DX) CMPQ CX, R11 - JAE LBB13_1 + JAE LBB12_1 MOVB 0(R9)(CX*1), AX CMPB AX, $45 - JNE LBB13_4 + JNE LBB12_4 -LBB13_3: +LBB12_3: MOVQ CX, 0(SI) MOVQ $-6, 0(R8) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB13_1: +LBB12_1: MOVQ R11, 0(SI) MOVQ $-1, 0(R8) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB13_4: +LBB12_4: LEAL -48(AX), DX CMPB DX, $10 - JB LBB13_6 + JB LBB12_6 MOVQ CX, 0(SI) MOVQ $-2, 0(R8) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB13_6: +LBB12_6: CMPB AX, $48 - JNE LBB13_7 + JNE LBB12_7 MOVB 1(R9)(CX*1), AX ADDB $-46, AX CMPB AX, $55 - JA LBB13_16 + JA LBB12_16 MOVBLZX AX, AX MOVQ $36028797027352577, DX BTQ AX, DX - JAE LBB13_16 + JAE LBB12_16 -LBB13_7: +LBB12_7: XORL AX, AX MOVL $10, R10 -LBB13_8: +LBB12_8: CMPQ R11, CX - JE LBB13_22 + JE LBB12_22 MOVBLSX 0(R9)(CX*1), DI LEAL -48(DI), DX CMPB DX, $9 - JA LBB13_17 + JA LBB12_17 MULQ R10 - JO LBB13_13 + JO LBB12_13 INCQ CX ADDL $-48, DI XORL BX, BX @@ -4022,11 +3776,11 @@ LBB13_8: MOVQ BX, DX NEGQ DX XORQ DX, BX - JNE LBB13_13 + JNE LBB12_13 TESTQ DX, DX - JNS LBB13_8 + JNS LBB12_8 -LBB13_13: +LBB12_13: DECQ CX MOVQ CX, 0(SI) MOVQ $-5, 0(R8) @@ -4034,27 +3788,27 @@ LBB13_13: BYTE $0x5d // popq %rbp RET -LBB13_17: +LBB12_17: CMPQ CX, R11 - JAE LBB13_21 + JAE LBB12_21 CMPB DI, $46 - JE LBB13_3 + JE LBB12_3 CMPB DI, $69 - JE LBB13_3 + JE LBB12_3 CMPB DI, $101 - JE LBB13_3 + JE LBB12_3 -LBB13_21: +LBB12_21: MOVQ CX, R11 -LBB13_22: +LBB12_22: MOVQ R11, 0(SI) MOVQ AX, 16(R8) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB13_16: +LBB12_16: INCQ CX MOVQ CX, 0(SI) BYTE $0x5b // popq %rbx @@ -4072,6 +3826,18 @@ _skip_one: BYTE $0x5d // popq %rbp JMP _fsm_exec +LCPI14_0: + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + +LCPI14_1: + QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' + +LCPI14_2: + QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' + +LCPI14_3: + QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' + _fsm_exec: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp @@ -4080,288 +3846,491 @@ _fsm_exec: WORD $0x5541 // pushq %r13 WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx - SUBQ $56, SP - MOVQ SI, -56(BP) - MOVL 0(DI), R15 - TESTL R15, R15 - JE LBB15_48 - MOVQ DX, R13 - MOVQ DI, R8 - MOVQ $-1, R9 + SUBQ $40, SP MOVQ DX, -48(BP) + MOVQ SI, -56(BP) + MOVL 0(DI), R10 + TESTL R10, R10 + JE LBB14_92 + MOVQ DI, R9 + MOVQ -48(BP), AX + MOVQ 0(AX), R12 + MOVQ $-1, R13 + MOVQ $4294977024, R14 + QUAD $0xffffff781d6ffac5 // vmovdqu $-136(%rip), %xmm3 /* LCPI14_0(%rip) */ + QUAD $0xffffff80256ffac5 // vmovdqu $-128(%rip), %xmm4 /* LCPI14_1(%rip) */ + QUAD $0xffffff882d6ffac5 // vmovdqu $-120(%rip), %xmm5 /* LCPI14_2(%rip) */ + QUAD $0xffffff90356ffac5 // vmovdqu $-112(%rip), %xmm6 /* LCPI14_3(%rip) */ + MOVQ R12, R8 MOVQ DI, -64(BP) - JMP LBB15_7 + JMP LBB14_7 -LBB15_2: - CMPL R15, $65535 - JG LBB15_51 - INCL R15 - MOVL R15, 0(R8) - MOVL $0, 4(R8)(SI*4) +LBB14_2: + CMPL R10, $65535 + JG LBB14_101 + INCL R10 + MOVL R10, 0(R9) + MOVL $0, 4(R9)(SI*4) -LBB15_4: - MOVQ -48(BP), R13 - -LBB15_5: - MOVL 0(R8), DX - MOVL DX, R15 - MOVQ R9, AX - TESTL DX, DX - JE LBB15_50 - -LBB15_7: - MOVQ R9, R12 - MOVQ -56(BP), BX - MOVQ 0(BX), R14 - MOVQ 8(BX), SI - MOVQ 0(R13), DX - MOVQ R14, DI - LONG $0xffd263e8; BYTE $0xff // callq _lspace - MOVQ AX, CX - MOVQ AX, 0(R13) - CMPQ AX, 8(BX) - JAE LBB15_9 - MOVQ CX, DX - INCQ DX - MOVQ DX, 0(R13) - MOVBLZX 0(R14)(CX*1), AX - MOVQ DX, CX - JMP LBB15_10 - -LBB15_9: - XORL AX, AX - -LBB15_10: - MOVQ -64(BP), R8 - MOVQ R12, R9 - LEAL -1(R15), DX - MOVLQSX R15, SI - MOVL 0(R8)(SI*4), BX - LEAQ -1(CX), R12 - CMPQ R9, $-1 - LONG $0xcc440f4d // cmoveq %r12, %r9 - DECL BX - CMPL BX, $5 - JA LBB15_14 - LEAQ -1(SI), R10 - LONG $0x663d8d48; WORD $0x0003; BYTE $0x00 // leaq $870(%rip), %rdi /* LJTI15_0(%rip) */ - MOVLQSX 0(DI)(BX*4), BX - ADDQ DI, BX - JMP BX - -LBB15_12: - MOVBLSX AX, AX - CMPL AX, $44 - JE LBB15_2 - CMPL AX, $93 - JE LBB15_29 - JMP LBB15_49 - -LBB15_14: - MOVL DX, 0(R8) - MOVBLSX AX, DX - CMPL DX, $123 - MOVQ -48(BP), R13 - JBE LBB15_24 - JMP LBB15_49 - -LBB15_15: - MOVBLSX AX, AX - CMPL AX, $44 - JNE LBB15_28 - CMPL R15, $65535 - JG LBB15_51 - INCL R15 - MOVL R15, 0(R8) - MOVL $3, 4(R8)(SI*4) - JMP LBB15_4 - -LBB15_18: - CMPB AX, $34 - JNE LBB15_49 - MOVL $4, 4(R8)(R10*4) - MOVQ -56(BP), DI - MOVQ -48(BP), R13 - MOVQ R13, SI - MOVQ R9, R14 - LONG $0x000538e8; BYTE $0x00 // callq _skip_string - MOVQ R14, R9 - MOVQ -64(BP), R8 - TESTQ AX, AX - JNS LBB15_5 - JMP LBB15_50 - -LBB15_20: - CMPB AX, $58 - JNE LBB15_49 - MOVL $0, 4(R8)(R10*4) - JMP LBB15_4 - -LBB15_22: - CMPB AX, $93 - JE LBB15_29 - MOVL $1, 4(R8)(R10*4) - MOVBLSX AX, DX - CMPL DX, $123 - MOVQ -48(BP), R13 - JA LBB15_49 - -LBB15_24: - MOVQ $-1, AX - LONG $0x98358d48; WORD $0x0002; BYTE $0x00 // leaq $664(%rip), %rsi /* LJTI15_1(%rip) */ - MOVLQSX 0(SI)(DX*4), DX - ADDQ SI, DX - JMP DX - -LBB15_25: - MOVQ -56(BP), AX - MOVQ 8(AX), SI - MOVQ R14, DI - MOVQ R13, DX +LBB14_4: MOVQ R12, CX -LBB15_26: - LEAQ -96(BP), R8 - MOVQ R9, R14 - MOVQ R12, R9 - LONG $0x0009f3e8; BYTE $0x00 // callq _advance_number - MOVQ R14, R9 - MOVQ -64(BP), R8 - TESTQ AX, AX - LONG $0xe0480f4c // cmovsq %rax, %r12 - MOVQ R12, AX - TESTQ R12, R12 - JNS LBB15_5 - JMP LBB15_50 +LBB14_5: + MOVL 0(R9), DX + MOVQ CX, R12 + MOVL DX, R10 + MOVQ R13, AX + TESTL DX, DX + JE LBB14_97 -LBB15_27: +LBB14_7: + MOVQ -56(BP), AX + MOVQ 0(AX), DI + MOVQ 8(AX), R11 + MOVQ R8, DX + CMPQ R8, R11 + JAE LBB14_25 + MOVB 0(DI)(R8*1), AX + CMPB AX, $13 + JE LBB14_12 + CMPB AX, $32 + JE LBB14_12 + ADDB $-9, AX + CMPB AX, $1 + JBE LBB14_12 + MOVQ R8, DX + JMP LBB14_45 + +LBB14_12: + LEAQ 1(R8), DX + CMPQ DX, R11 + JAE LBB14_25 + MOVB 0(DI)(DX*1), AX + CMPB AX, $13 + JE LBB14_16 + CMPB AX, $32 + JE LBB14_16 + ADDB $-9, AX + CMPB AX, $1 + JA LBB14_45 + +LBB14_16: + LEAQ 2(R8), DX + CMPQ DX, R11 + JAE LBB14_25 + MOVB 0(DI)(DX*1), AX + CMPB AX, $13 + JE LBB14_20 + CMPB AX, $32 + JE LBB14_20 + ADDB $-9, AX + CMPB AX, $1 + JA LBB14_45 + +LBB14_20: + LEAQ 3(R8), DX + CMPQ DX, R11 + JAE LBB14_25 + MOVB 0(DI)(DX*1), AX + CMPB AX, $13 + JE LBB14_24 + CMPB AX, $32 + JE LBB14_24 + ADDB $-9, AX + CMPB AX, $1 + JA LBB14_45 + +LBB14_24: + LEAQ 4(R8), DX + +LBB14_25: + LEAQ 0(DI)(DX*1), SI + MOVQ R11, AX + SUBQ DX, AX + JE LBB14_33 + MOVL SI, CX + ANDL $15, CX + TESTQ CX, CX + JE LBB14_33 + LEAQ -1(AX), R9 + XORL CX, CX + +LBB14_28: + MOVBLSX 0(SI)(CX*1), BX + CMPL BX, $32 + JA LBB14_44 + BTQ BX, R14 + JAE LBB14_44 + LEAQ 1(CX), BX + CMPQ R9, CX + JE LBB14_32 + LEAQ 1(SI)(CX*1), DX + ANDL $15, DX + MOVQ BX, CX + TESTQ DX, DX + JNE LBB14_28 + +LBB14_32: + ADDQ BX, SI + SUBQ BX, AX + MOVQ -64(BP), R9 + +LBB14_33: + CMPQ AX, $16 + JB LBB14_36 + +LBB14_34: + LONG $0x066ff9c5 // vmovdqa (%rsi), %xmm0 + LONG $0xcb74f9c5 // vpcmpeqb %xmm3, %xmm0, %xmm1 + LONG $0xd474f9c5 // vpcmpeqb %xmm4, %xmm0, %xmm2 + LONG $0xcaebf1c5 // vpor %xmm2, %xmm1, %xmm1 + LONG $0xd574f9c5 // vpcmpeqb %xmm5, %xmm0, %xmm2 + LONG $0xc674f9c5 // vpcmpeqb %xmm6, %xmm0, %xmm0 + LONG $0xc2ebf9c5 // vpor %xmm2, %xmm0, %xmm0 + LONG $0xc1ebf9c5 // vpor %xmm1, %xmm0, %xmm0 + LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx + CMPW CX, $-1 + JNE LBB14_43 + ADDQ $16, SI + ADDQ $-16, AX + CMPQ AX, $15 + JA LBB14_34 + +LBB14_36: + TESTQ AX, AX + JE LBB14_42 + LEAQ 0(SI)(AX*1), R9 + INCQ SI + MOVQ SI, DX + +LBB14_38: + MOVBLSX -1(DX), CX + CMPL CX, $32 + JA LBB14_46 + BTQ CX, R14 + JAE LBB14_46 + DECQ AX + INCQ DX + TESTQ AX, AX + JNE LBB14_38 + MOVQ R9, SI + MOVQ -64(BP), R9 + +LBB14_42: + SUBQ DI, SI + MOVQ SI, DX + CMPQ DX, R11 + JB LBB14_45 + JMP LBB14_47 + +LBB14_43: + MOVWLZX CX, AX + SUBQ DI, SI + NOTL AX + BSFL AX, DX + ADDQ SI, DX + CMPQ DX, R11 + JAE LBB14_47 + +LBB14_45: + LEAQ 1(DX), R12 + MOVQ -48(BP), AX + MOVQ R12, 0(AX) + MOVB 0(DI)(DX*1), AX + MOVQ R12, R8 + JMP LBB14_48 + +LBB14_44: + ADDQ CX, SI + SUBQ DI, SI + MOVQ SI, DX + MOVQ -64(BP), R9 + CMPQ DX, R11 + JB LBB14_45 + +LBB14_47: + XORL AX, AX + +LBB14_48: + LEAL -1(R10), DX + MOVLQSX R10, SI + MOVL 0(R9)(SI*4), CX + LEAQ -1(R12), R15 + CMPQ R13, $-1 + LONG $0xc4440f4d // cmoveq %r12, %r8 + LONG $0xef440f4d // cmoveq %r15, %r13 + DECL CX + CMPL CX, $5 + JA LBB14_53 + LEAQ -1(SI), R11 + LONG $0x481d8d48; WORD $0x0004; BYTE $0x00 // leaq $1096(%rip), %rbx /* LJTI14_0(%rip) */ + MOVLQSX 0(BX)(CX*4), CX + ADDQ BX, CX + JMP CX + +LBB14_50: + MOVBLSX AX, AX + CMPL AX, $44 + JE LBB14_2 + CMPL AX, $93 + JE LBB14_52 + JMP LBB14_96 + +LBB14_53: + MOVL DX, 0(R9) + MOVBLSX AX, CX + CMPL CX, $123 + JBE LBB14_64 + JMP LBB14_96 + +LBB14_54: + MOVBLSX AX, AX + CMPL AX, $44 + JNE LBB14_55 + CMPL R10, $65535 + JG LBB14_101 + INCL R10 + MOVL R10, 0(R9) + MOVL $3, 4(R9)(SI*4) + JMP LBB14_4 + +LBB14_56: + CMPB AX, $34 + JNE LBB14_96 + MOVL $4, 4(R9)(R11*4) + +LBB14_58: + MOVQ -56(BP), AX + MOVQ 8(AX), SI + MOVQ R12, DX + LEAQ -72(BP), CX + LONG $0xfff3c0e8; BYTE $0xff // callq _advance_string + MOVQ AX, CX + TESTQ AX, AX + JS LBB14_93 + +LBB14_59: + MOVQ -48(BP), AX + MOVQ CX, 0(AX) + MOVQ CX, R8 + MOVQ R15, AX + TESTQ R12, R12 + MOVQ -64(BP), R9 + QUAD $0xfffffca71d6ffac5 // vmovdqu $-857(%rip), %xmm3 /* LCPI14_0(%rip) */ + QUAD $0xfffffcaf256ffac5 // vmovdqu $-849(%rip), %xmm4 /* LCPI14_1(%rip) */ + QUAD $0xfffffcb72d6ffac5 // vmovdqu $-841(%rip), %xmm5 /* LCPI14_2(%rip) */ + QUAD $0xfffffcbf356ffac5 // vmovdqu $-833(%rip), %xmm6 /* LCPI14_3(%rip) */ + JG LBB14_5 + JMP LBB14_97 + +LBB14_60: + CMPB AX, $58 + JNE LBB14_96 + MOVL $0, 4(R9)(R11*4) + JMP LBB14_4 + +LBB14_62: + CMPB AX, $93 + JE LBB14_52 + MOVL $1, 4(R9)(R11*4) + MOVBLSX AX, CX + CMPL CX, $123 + JA LBB14_96 + +LBB14_64: + MOVQ $-1, AX + LONG $0x4b158d48; WORD $0x0003; BYTE $0x00 // leaq $843(%rip), %rdx /* LJTI14_1(%rip) */ + MOVLQSX 0(DX)(CX*4), CX + ADDQ DX, CX + JMP CX + +LBB14_67: + ADDQ R15, DI + MOVQ -56(BP), AX + MOVQ 8(AX), SI + SUBQ R15, SI + LONG $0x000667e8; BYTE $0x00 // callq _skip_number + QUAD $0xfffffc4f356ffac5 // vmovdqu $-945(%rip), %xmm6 /* LCPI14_3(%rip) */ + QUAD $0xfffffc372d6ffac5 // vmovdqu $-969(%rip), %xmm5 /* LCPI14_2(%rip) */ + QUAD $0xfffffc1f256ffac5 // vmovdqu $-993(%rip), %xmm4 /* LCPI14_1(%rip) */ + QUAD $0xfffffc071d6ffac5 // vmovdqu $-1017(%rip), %xmm3 /* LCPI14_0(%rip) */ + MOVQ -64(BP), R9 + LEAQ -1(AX), DX + MOVQ $-2, CX + SUBQ AX, CX + TESTQ AX, AX + LONG $0xca490f48 // cmovnsq %rdx, %rcx + MOVQ $-2, AX + LONG $0xf8480f4c // cmovsq %rax, %r15 + ADDQ R12, CX + MOVQ -48(BP), AX + MOVQ CX, 0(AX) + MOVQ CX, R8 + MOVQ R15, AX + TESTQ R15, R15 + JNS LBB14_5 + JMP LBB14_97 + +LBB14_65: MOVBLSX AX, AX CMPL AX, $34 - JE LBB15_30 + JE LBB14_70 -LBB15_28: +LBB14_55: CMPL AX, $125 - JNE LBB15_49 + JNE LBB14_96 -LBB15_29: - MOVL DX, 0(R8) - MOVQ -48(BP), R13 - MOVL DX, R15 - MOVQ R9, AX +LBB14_52: + MOVL DX, 0(R9) + MOVL DX, R10 + MOVQ R13, AX TESTL DX, DX - JNE LBB15_7 - JMP LBB15_50 + JNE LBB14_7 + JMP LBB14_97 -LBB15_30: - MOVQ R9, R15 - MOVL $2, 4(R8)(R10*4) - MOVQ -56(BP), DI - MOVQ -48(BP), SI - MOVQ SI, R13 - MOVQ R8, BX - LONG $0x00044ce8; BYTE $0x00 // callq _skip_string +LBB14_70: + MOVL $2, 4(R9)(R11*4) + MOVQ -56(BP), AX + MOVQ 8(AX), SI + MOVQ R12, DX + LEAQ -72(BP), CX + LONG $0xfff272e8; BYTE $0xff // callq _advance_string + MOVQ AX, CX TESTQ AX, AX - JS LBB15_50 - MOVLQSX 0(BX), AX + JS LBB14_93 + MOVQ -48(BP), AX + MOVQ CX, 0(AX) + MOVQ R15, AX + TESTQ R12, R12 + MOVQ -64(BP), R9 + QUAD $0xfffffb5c1d6ffac5 // vmovdqu $-1188(%rip), %xmm3 /* LCPI14_0(%rip) */ + QUAD $0xfffffb64256ffac5 // vmovdqu $-1180(%rip), %xmm4 /* LCPI14_1(%rip) */ + QUAD $0xfffffb6c2d6ffac5 // vmovdqu $-1172(%rip), %xmm5 /* LCPI14_2(%rip) */ + QUAD $0xfffffb74356ffac5 // vmovdqu $-1164(%rip), %xmm6 /* LCPI14_3(%rip) */ + JLE LBB14_97 + MOVLQSX 0(R9), AX CMPQ AX, $65535 - JG LBB15_51 - MOVQ BX, R8 - LEAL 1(AX), CX - MOVL CX, 0(BX) - MOVL $4, 4(BX)(AX*4) - MOVQ R15, R9 - JMP LBB15_5 + JG LBB14_101 + LEAL 1(AX), DX + MOVL DX, 0(R9) + MOVL $4, 4(R9)(AX*4) + MOVQ CX, R8 + JMP LBB14_5 -LBB15_33: - MOVQ -56(BP), DI - MOVQ R13, SI - MOVQ R9, BX - LONG $0x00040de8; BYTE $0x00 // callq _skip_string - MOVQ BX, R9 - MOVQ -64(BP), R8 +LBB14_74: + ADDQ R12, DI + MOVQ -56(BP), AX + MOVQ 8(AX), SI + SUBQ R12, SI + LONG $0x000545e8; BYTE $0x00 // callq _skip_number + MOVQ AX, CX TESTQ AX, AX - JNS LBB15_5 - JMP LBB15_50 + JS LBB14_95 + ADDQ R12, CX + JMP LBB14_59 -LBB15_34: - MOVQ -56(BP), AX - MOVQ 8(AX), SI - MOVQ R14, DI - MOVQ R13, DX - JMP LBB15_26 - -LBB15_35: - MOVLQSX 0(R8), AX +LBB14_76: + MOVLQSX 0(R9), AX CMPQ AX, $65535 - JG LBB15_51 + JG LBB14_101 LEAL 1(AX), CX - MOVL CX, 0(R8) - MOVL $5, 4(R8)(AX*4) - JMP LBB15_5 + MOVL CX, 0(R9) + MOVL $5, 4(R9)(AX*4) + JMP LBB14_4 -LBB15_37: - MOVQ -56(BP), DX - MOVQ 8(DX), DX - LEAQ -4(DX), SI - CMPQ CX, SI - JA LBB15_54 - MOVL 0(R14)(CX*1), DX - CMPL DX, $1702063201 - JNE LBB15_56 - LEAQ 4(CX), AX - JMP LBB15_45 +LBB14_78: + MOVQ -56(BP), CX + MOVQ 8(CX), CX + LEAQ -4(CX), DX + CMPQ R12, DX + JA LBB14_94 + MOVL 0(DI)(R12*1), CX + CMPL CX, $1702063201 + JNE LBB14_102 + LEAQ 4(R12), CX + JMP LBB14_89 -LBB15_40: - MOVQ -56(BP), DX - MOVQ 8(DX), DX - LEAQ -3(DX), SI - CMPQ CX, SI - JA LBB15_54 - CMPL -1(R14)(CX*1), $1819047278 - JE LBB15_44 - JMP LBB15_63 +LBB14_81: + MOVQ -56(BP), CX + MOVQ 8(CX), CX + LEAQ -3(CX), DX + CMPQ R12, DX + JA LBB14_94 + CMPL -1(DI)(R12*1), $1819047278 + JE LBB14_88 + JMP LBB14_83 -LBB15_42: - MOVQ -56(BP), DX - MOVQ 8(DX), DX - LEAQ -3(DX), SI - CMPQ CX, SI - JA LBB15_54 - CMPL -1(R14)(CX*1), $1702195828 - JNE LBB15_59 +LBB14_86: + MOVQ -56(BP), CX + MOVQ 8(CX), CX + LEAQ -3(CX), DX + CMPQ R12, DX + JA LBB14_94 + CMPL -1(DI)(R12*1), $1702195828 + JNE LBB14_98 -LBB15_44: - LEAQ 3(CX), AX +LBB14_88: + LEAQ 3(R12), CX -LBB15_45: - MOVQ AX, 0(R13) - MOVQ R12, AX - TESTQ CX, CX - JG LBB15_5 - JMP LBB15_50 +LBB14_89: + MOVQ -48(BP), AX + MOVQ CX, 0(AX) + MOVQ CX, R8 + MOVQ R15, AX + TESTQ R12, R12 + JG LBB14_5 + JMP LBB14_97 -LBB15_46: - MOVLQSX 0(R8), AX +LBB14_90: + MOVLQSX 0(R9), AX CMPQ AX, $65535 - JG LBB15_51 + JG LBB14_101 LEAL 1(AX), CX - MOVL CX, 0(R8) - MOVL $6, 4(R8)(AX*4) - JMP LBB15_5 + MOVL CX, 0(R9) + MOVL $6, 4(R9)(AX*4) + JMP LBB14_4 -LBB15_48: +LBB14_46: + MOVQ DI, AX + NOTQ AX + ADDQ AX, DX + MOVQ -64(BP), R9 + CMPQ DX, R11 + JB LBB14_45 + JMP LBB14_47 + +LBB14_92: MOVQ $-1, AX - JMP LBB15_50 + JMP LBB14_97 -LBB15_49: - MOVQ $-2, AX - JMP LBB15_50 - -LBB15_51: +LBB14_101: MOVQ $-7, AX + JMP LBB14_97 -LBB15_50: - ADDQ $56, SP +LBB14_93: + MOVQ -56(BP), AX + MOVQ 8(AX), AX + MOVQ -48(BP), DX + MOVQ AX, 0(DX) + MOVQ CX, AX + JMP LBB14_97 + +LBB14_94: + MOVQ -48(BP), DX + MOVQ CX, 0(DX) + JMP LBB14_97 + +LBB14_95: + NOTQ CX + ADDQ CX, R12 + MOVQ -48(BP), AX + MOVQ R12, 0(AX) + +LBB14_96: + MOVQ $-2, AX + +LBB14_97: + ADDQ $40, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 WORD $0x5d41 // popq %r13 @@ -4370,210 +4339,211 @@ LBB15_50: BYTE $0x5d // popq %rbp RET -LBB15_54: - MOVQ DX, 0(R13) - JMP LBB15_50 - -LBB15_56: +LBB14_83: + MOVQ -48(BP), AX + MOVQ R15, 0(AX) MOVQ $-2, AX - CMPB DX, $97 - JNE LBB15_50 - INCQ CX - MOVL $1702063201, DX + CMPB 0(DI)(R15*1), $110 + JNE LBB14_97 + MOVL $1819047278, CX -LBB15_58: - SHRL $8, DX - MOVQ CX, 0(R13) - MOVBLSX 0(R14)(CX*1), SI - MOVBLZX DX, DI - INCQ CX - CMPL DI, SI - JE LBB15_58 - JMP LBB15_50 +LBB14_85: + SHRL $8, CX + MOVQ -48(BP), DX + MOVQ R12, 0(DX) + MOVBLSX 0(DI)(R12*1), DX + MOVBLZX CX, SI + INCQ R12 + CMPL SI, DX + JE LBB14_85 + JMP LBB14_97 -LBB15_59: - MOVQ R12, 0(R13) +LBB14_98: + MOVQ -48(BP), AX + MOVQ R15, 0(AX) MOVQ $-2, AX - CMPB 0(R14)(R12*1), $116 - JNE LBB15_50 - MOVL $1702195828, DX + CMPB 0(DI)(R15*1), $116 + JNE LBB14_97 + MOVL $1702195828, CX -LBB15_61: - SHRL $8, DX - MOVQ CX, 0(R13) - MOVBLSX 0(R14)(CX*1), SI - MOVBLZX DX, DI - INCQ CX - CMPL DI, SI - JE LBB15_61 - JMP LBB15_50 +LBB14_100: + SHRL $8, CX + MOVQ -48(BP), DX + MOVQ R12, 0(DX) + MOVBLSX 0(DI)(R12*1), DX + MOVBLZX CX, SI + INCQ R12 + CMPL SI, DX + JE LBB14_100 + JMP LBB14_97 -LBB15_63: - MOVQ R12, 0(R13) +LBB14_102: MOVQ $-2, AX - CMPB 0(R14)(R12*1), $110 - JNE LBB15_50 - MOVL $1819047278, DX + CMPB CX, $97 + JNE LBB14_97 + INCQ R12 + MOVL $1702063201, CX -LBB15_65: - SHRL $8, DX - MOVQ CX, 0(R13) - MOVBLSX 0(R14)(CX*1), SI - MOVBLZX DX, DI - INCQ CX - CMPL DI, SI - JE LBB15_65 - JMP LBB15_50 +LBB14_104: + SHRL $8, CX + MOVQ -48(BP), DX + MOVQ R12, 0(DX) + MOVBLSX 0(DI)(R12*1), DX + MOVBLZX CX, SI + INCQ R12 + CMPL SI, DX + JE LBB14_104 + JMP LBB14_97 -// .set L15_0_set_12, LBB15_12-LJTI15_0 -// .set L15_0_set_15, LBB15_15-LJTI15_0 -// .set L15_0_set_18, LBB15_18-LJTI15_0 -// .set L15_0_set_20, LBB15_20-LJTI15_0 -// .set L15_0_set_22, LBB15_22-LJTI15_0 -// .set L15_0_set_27, LBB15_27-LJTI15_0 -LJTI15_0: - LONG $0xfffffca3 // .long L15_0_set_12 - LONG $0xfffffcd5 // .long L15_0_set_15 - LONG $0xfffffd02 // .long L15_0_set_18 - LONG $0xfffffd3b // .long L15_0_set_20 - LONG $0xfffffd51 // .long L15_0_set_22 - LONG $0xfffffdc8 // .long L15_0_set_27 +// .set L14_0_set_50, LBB14_50-LJTI14_0 +// .set L14_0_set_54, LBB14_54-LJTI14_0 +// .set L14_0_set_56, LBB14_56-LJTI14_0 +// .set L14_0_set_60, LBB14_60-LJTI14_0 +// .set L14_0_set_62, LBB14_62-LJTI14_0 +// .set L14_0_set_65, LBB14_65-LJTI14_0 +LJTI14_0: + LONG $0xfffffbc1 // .long L14_0_set_50 + LONG $0xfffffbef // .long L14_0_set_54 + LONG $0xfffffc1c // .long L14_0_set_56 + LONG $0xfffffc8c // .long L14_0_set_60 + LONG $0xfffffca2 // .long L14_0_set_62 + LONG $0xfffffd4b // .long L14_0_set_65 - // .set L15_1_set_50, LBB15_50-LJTI15_1 - // .set L15_1_set_49, LBB15_49-LJTI15_1 - // .set L15_1_set_33, LBB15_33-LJTI15_1 - // .set L15_1_set_34, LBB15_34-LJTI15_1 - // .set L15_1_set_25, LBB15_25-LJTI15_1 - // .set L15_1_set_35, LBB15_35-LJTI15_1 - // .set L15_1_set_37, LBB15_37-LJTI15_1 - // .set L15_1_set_40, LBB15_40-LJTI15_1 - // .set L15_1_set_42, LBB15_42-LJTI15_1 - // .set L15_1_set_46, LBB15_46-LJTI15_1 -LJTI15_1: - LONG $0xffffff42 // .long L15_1_set_50 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xfffffe2a // .long L15_1_set_33 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xfffffe4e // .long L15_1_set_34 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xfffffd71 // .long L15_1_set_25 - LONG $0xfffffd71 // .long L15_1_set_25 - LONG $0xfffffd71 // .long L15_1_set_25 - LONG $0xfffffd71 // .long L15_1_set_25 - LONG $0xfffffd71 // .long L15_1_set_25 - LONG $0xfffffd71 // .long L15_1_set_25 - LONG $0xfffffd71 // .long L15_1_set_25 - LONG $0xfffffd71 // .long L15_1_set_25 - LONG $0xfffffd71 // .long L15_1_set_25 - LONG $0xfffffd71 // .long L15_1_set_25 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xfffffe61 // .long L15_1_set_35 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xfffffe84 // .long L15_1_set_37 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xfffffeaf // .long L15_1_set_40 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xfffffed4 // .long L15_1_set_42 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff32 // .long L15_1_set_49 - LONG $0xffffff0a // .long L15_1_set_46 + // .set L14_1_set_97, LBB14_97-LJTI14_1 + // .set L14_1_set_96, LBB14_96-LJTI14_1 + // .set L14_1_set_58, LBB14_58-LJTI14_1 + // .set L14_1_set_74, LBB14_74-LJTI14_1 + // .set L14_1_set_67, LBB14_67-LJTI14_1 + // .set L14_1_set_76, LBB14_76-LJTI14_1 + // .set L14_1_set_78, LBB14_78-LJTI14_1 + // .set L14_1_set_81, LBB14_81-LJTI14_1 + // .set L14_1_set_86, LBB14_86-LJTI14_1 + // .set L14_1_set_90, LBB14_90-LJTI14_1 +LJTI14_1: + LONG $0xffffff39 // .long L14_1_set_97 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xfffffc15 // .long L14_1_set_58 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xfffffde0 // .long L14_1_set_74 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xfffffcbe // .long L14_1_set_67 + LONG $0xfffffcbe // .long L14_1_set_67 + LONG $0xfffffcbe // .long L14_1_set_67 + LONG $0xfffffcbe // .long L14_1_set_67 + LONG $0xfffffcbe // .long L14_1_set_67 + LONG $0xfffffcbe // .long L14_1_set_67 + LONG $0xfffffcbe // .long L14_1_set_67 + LONG $0xfffffcbe // .long L14_1_set_67 + LONG $0xfffffcbe // .long L14_1_set_67 + LONG $0xfffffcbe // .long L14_1_set_67 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xfffffe07 // .long L14_1_set_76 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xfffffe2a // .long L14_1_set_78 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xfffffe56 // .long L14_1_set_81 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xfffffe7b // .long L14_1_set_86 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xffffff32 // .long L14_1_set_96 + LONG $0xfffffebc // .long L14_1_set_90 _skip_array: BYTE $0x55 // pushq %rbp @@ -4599,723 +4569,417 @@ _skip_object: BYTE $0x5d // popq %rbp JMP _fsm_exec -LCPI18_0: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - _skip_string: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp WORD $0x5741 // pushq %r15 WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx BYTE $0x50 // pushq %rax MOVQ SI, R14 - MOVQ DI, BX - MOVQ 0(SI), R15 - MOVQ R15, SI - MOVL $34, DX - MOVL $92, CX - LONG $0xffd01be8; BYTE $0xff // callq _strchr2 + MOVQ DI, R15 + MOVQ 0(SI), BX + MOVQ 0(DI), DI + MOVQ 8(R15), SI + LEAQ -32(BP), CX + MOVQ BX, DX + LONG $0xffed8de8; BYTE $0xff // callq _advance_string TESTQ AX, AX - JS LBB18_3 + JS LBB17_2 + DECQ BX MOVQ AX, CX - MOVQ 0(BX), R10 - CMPB 0(R10)(AX*1), $34 - JNE LBB18_6 + MOVQ BX, AX + JMP LBB17_3 -LBB18_2: - DECQ R15 - INCQ CX - MOVQ CX, R11 - MOVQ R15, AX - JMP LBB18_5 +LBB17_2: + MOVQ 8(R15), CX -LBB18_3: - MOVQ 8(BX), R11 - -LBB18_4: - MOVQ $-1, AX - -LBB18_5: - MOVQ R11, 0(R14) +LBB17_3: + MOVQ CX, 0(R14) ADDQ $8, SP - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 + WORD $0x5f41 // popq %r15 + BYTE $0x5d // popq %rbp RET -LBB18_6: - LEAQ 1(CX), R8 - MOVQ 8(BX), R11 - MOVQ R11, DX - SUBQ R8, DX - LEAQ 1(R10)(CX*1), BX - MOVQ BX, CX - MOVQ DX, AX - MOVQ BX, SI - ANDQ $15, CX - JE LBB18_10 - MOVQ BX, AX - ANDQ $-16, AX - LONG $0x006ff9c5 // vmovdqa (%rax), %xmm0 - QUAD $0xffffff550574f9c5 // vpcmpeqb $-171(%rip), %xmm0, %xmm0 /* LCPI18_0(%rip) */ - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - SHRQ CX, AX - TESTQ AX, AX - JE LBB18_9 - ORQ $65536, AX - BSFQ AX, AX - CMPQ AX, DX - MOVQ $-1, CX - LONG $0xc84c0f48 // cmovlq %rax, %rcx - JMP LBB18_33 - -LBB18_9: - MOVL $16, DI - SUBQ CX, DI - LEAQ 0(BX)(DI*1), SI - MOVQ DX, AX - SUBQ DI, AX - -LBB18_10: - CMPQ AX, $64 - JL LBB18_14 - QUAD $0xffffff0c0d6ffac5 // vmovdqu $-244(%rip), %xmm1 /* LCPI18_0(%rip) */ - -LBB18_12: - LONG $0x266ff9c5 // vmovdqa (%rsi), %xmm4 - LONG $0x5e6ff9c5; BYTE $0x10 // vmovdqa $16(%rsi), %xmm3 - LONG $0x566ff9c5; BYTE $0x20 // vmovdqa $32(%rsi), %xmm2 - LONG $0x466ff9c5; BYTE $0x30 // vmovdqa $48(%rsi), %xmm0 - LONG $0xe974d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm5 - LONG $0xf174e1c5 // vpcmpeqb %xmm1, %xmm3, %xmm6 - LONG $0xedebc9c5 // vpor %xmm5, %xmm6, %xmm5 - LONG $0xf174e9c5 // vpcmpeqb %xmm1, %xmm2, %xmm6 - LONG $0xf974f9c5 // vpcmpeqb %xmm1, %xmm0, %xmm7 - LONG $0xf7ebc9c5 // vpor %xmm7, %xmm6, %xmm6 - LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 - LONG $0xcdd7f9c5 // vpmovmskb %xmm5, %ecx - TESTW CX, CX - JNE LBB18_20 - ADDQ $64, SI - LEAQ -64(AX), DI - CMPQ AX, $127 - MOVQ DI, AX - JG LBB18_12 - JMP LBB18_15 - -LBB18_14: - MOVQ AX, DI - -LBB18_15: - MOVQ $-1, AX - TESTQ DI, DI - JS LBB18_5 - LONG $0x066ff9c5 // vmovdqa (%rsi), %xmm0 - QUAD $0xfffffea20574f9c5 // vpcmpeqb $-350(%rip), %xmm0, %xmm0 /* LCPI18_0(%rip) */ - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - TESTW R9, R9 - JE LBB18_22 - -LBB18_17: - MOVQ SI, CX - -LBB18_18: - MOVWLZX R9, SI - ORQ $65536, SI - BSFQ SI, SI - CMPQ SI, DI - JGE LBB18_5 - SUBQ BX, CX - ADDQ SI, CX - JMP LBB18_33 - -LBB18_20: - QUAD $0xfffffe6a0d74d9c5 // vpcmpeqb $-406(%rip), %xmm4, %xmm1 /* LCPI18_0(%rip) */ - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - TESTW AX, AX - JE LBB18_25 - MOVWLZX AX, AX - SUBQ BX, SI - ORQ $65536, AX - BSFQ AX, CX - ADDQ SI, CX - JMP LBB18_33 - -LBB18_22: - CMPQ DI, $15 - JLE LBB18_5 - LEAQ 16(SI), CX - LONG $0x016ff9c5 // vmovdqa (%rcx), %xmm0 - QUAD $0xfffffe2f0574f9c5 // vpcmpeqb $-465(%rip), %xmm0, %xmm0 /* LCPI18_0(%rip) */ - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - TESTW R9, R9 - JE LBB18_29 - ADDQ $-16, DI - JMP LBB18_18 - -LBB18_25: - QUAD $0xfffffe170d74e1c5 // vpcmpeqb $-489(%rip), %xmm3, %xmm1 /* LCPI18_0(%rip) */ - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - TESTW AX, AX - JE LBB18_27 - MOVWLZX AX, AX - ORQ $65536, AX - BSFQ AX, AX - SUBQ BX, SI - LEAQ 16(SI)(AX*1), CX - JMP LBB18_33 - -LBB18_27: - QUAD $0xfffffdef0d74e9c5 // vpcmpeqb $-529(%rip), %xmm2, %xmm1 /* LCPI18_0(%rip) */ - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - SUBQ BX, SI - TESTW AX, AX - JE LBB18_32 - MOVWLZX AX, AX - ORQ $65536, AX - BSFQ AX, AX - LEAQ 32(SI)(AX*1), CX - JMP LBB18_33 - -LBB18_29: - CMPQ DI, $32 - JL LBB18_5 - LEAQ 32(SI), CX - LONG $0x016ff9c5 // vmovdqa (%rcx), %xmm0 - QUAD $0xfffffdb50574f9c5 // vpcmpeqb $-587(%rip), %xmm0, %xmm0 /* LCPI18_0(%rip) */ - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - TESTW R9, R9 - JE LBB18_71 - ADDQ $-32, DI - JMP LBB18_18 - -LBB18_32: - QUAD $0xfffffd960574f9c5 // vpcmpeqb $-618(%rip), %xmm0, %xmm0 /* LCPI18_0(%rip) */ - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - ORQ $65536, AX - BSFQ AX, AX - LEAQ 48(SI)(AX*1), CX - -LBB18_33: - MOVQ $-1, AX - CMPQ CX, DX - JAE LBB18_5 - ADDQ R8, CX - JS LBB18_5 - LEAQ -1(R10), R9 - QUAD $0xfffffd5e056ffac5 // vmovdqu $-674(%rip), %xmm0 /* LCPI18_0(%rip) */ - QUAD $0xfffffd56056f7ac5 // vmovdqu $-682(%rip), %xmm8 /* LCPI18_0(%rip) */ - MOVQ $-1, R8 - -LBB18_36: - LEAQ 0(R9)(CX*1), DX - XORL AX, AX - -LBB18_37: - CMPB 0(DX)(AX*1), $92 - LEAQ -1(AX), AX - JE LBB18_37 - NOTL AX - TESTB $1, AX - JE LBB18_69 - LEAQ 1(CX), R12 - MOVQ R11, R13 - SUBQ R12, R13 - LEAQ 1(R10)(CX*1), DI - MOVQ DI, CX - MOVQ R13, BX - MOVQ DI, SI - ANDQ $15, CX - JE LBB18_43 - MOVQ DI, AX - ANDQ $-16, AX - LONG $0x1074b9c5 // vpcmpeqb (%rax), %xmm8, %xmm2 - LONG $0xc2d7f9c5 // vpmovmskb %xmm2, %eax - SHRQ CX, AX - TESTQ AX, AX - JE LBB18_42 - ORQ $65536, AX - BSFQ AX, CX - CMPQ CX, R13 - LONG $0xc84d0f49 // cmovgeq %r8, %rcx - JMP LBB18_59 - -LBB18_42: - MOVL $16, AX - SUBQ CX, AX - LEAQ 0(DI)(AX*1), SI - MOVQ R13, BX - SUBQ AX, BX - -LBB18_43: - MOVQ BX, AX - CMPQ BX, $64 - JL LBB18_46 - -LBB18_44: - LONG $0x2e6ff9c5 // vmovdqa (%rsi), %xmm5 - LONG $0x666ff9c5; BYTE $0x10 // vmovdqa $16(%rsi), %xmm4 - LONG $0x5e6ff9c5; BYTE $0x20 // vmovdqa $32(%rsi), %xmm3 - LONG $0x566ff9c5; BYTE $0x30 // vmovdqa $48(%rsi), %xmm2 - LONG $0xf074d1c5 // vpcmpeqb %xmm0, %xmm5, %xmm6 - LONG $0xf874d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm7 - LONG $0xf6ebc1c5 // vpor %xmm6, %xmm7, %xmm6 - LONG $0xf874e1c5 // vpcmpeqb %xmm0, %xmm3, %xmm7 - LONG $0xc874e9c5 // vpcmpeqb %xmm0, %xmm2, %xmm1 - LONG $0xc9ebc1c5 // vpor %xmm1, %xmm7, %xmm1 - LONG $0xc9ebc9c5 // vpor %xmm1, %xmm6, %xmm1 - LONG $0xc9d7f9c5 // vpmovmskb %xmm1, %ecx - TESTW CX, CX - JNE LBB18_52 - ADDQ $64, SI - LEAQ -64(AX), BX - CMPQ AX, $127 - MOVQ BX, AX - JG LBB18_44 - -LBB18_46: - MOVQ $-1, AX - TESTQ BX, BX - JS LBB18_5 - LONG $0x0e74b9c5 // vpcmpeqb (%rsi), %xmm8, %xmm1 - LONG $0xd1d7f9c5 // vpmovmskb %xmm1, %edx - TESTW DX, DX - JE LBB18_49 - -LBB18_48: - MOVQ SI, CX - JMP LBB18_57 - -LBB18_49: - CMPQ BX, $15 - JLE LBB18_5 - LEAQ 16(SI), CX - LONG $0x0974b9c5 // vpcmpeqb (%rcx), %xmm8, %xmm1 - LONG $0xd1d7f9c5 // vpmovmskb %xmm1, %edx - TESTW DX, DX - JE LBB18_54 - ADDQ $-16, BX - JMP LBB18_57 - -LBB18_52: - LONG $0xcd74b9c5 // vpcmpeqb %xmm5, %xmm8, %xmm1 - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - TESTW AX, AX - JE LBB18_61 - MOVWLZX AX, AX - SUBQ DI, SI - ORQ $65536, AX - BSFQ AX, CX - ADDQ SI, CX - JMP LBB18_59 - -LBB18_54: - CMPQ BX, $32 - JL LBB18_5 - LEAQ 32(SI), CX - LONG $0x0974b9c5 // vpcmpeqb (%rcx), %xmm8, %xmm1 - LONG $0xd1d7f9c5 // vpmovmskb %xmm1, %edx - TESTW DX, DX - JE LBB18_63 - ADDQ $-32, BX - -LBB18_57: - MOVWLZX DX, DX - ORQ $65536, DX - BSFQ DX, DX - CMPQ DX, BX - JGE LBB18_5 - SUBQ DI, CX - ADDQ DX, CX - -LBB18_59: - MOVQ $-1, AX - CMPQ CX, R13 - JAE LBB18_5 - ADDQ R12, CX - JNS LBB18_36 - JMP LBB18_5 - -LBB18_61: - LONG $0xcc74b9c5 // vpcmpeqb %xmm4, %xmm8, %xmm1 - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - TESTW AX, AX - JE LBB18_66 - MOVWLZX AX, AX - ORQ $65536, AX - BSFQ AX, AX - SUBQ DI, SI - LEAQ 16(SI)(AX*1), CX - JMP LBB18_59 - -LBB18_63: - CMPQ BX, $48 - JL LBB18_5 - ADDQ $48, SI - LONG $0x0e74b9c5 // vpcmpeqb (%rsi), %xmm8, %xmm1 - LONG $0xd1d7f9c5 // vpmovmskb %xmm1, %edx - TESTW DX, DX - JE LBB18_5 - ADDQ $-48, BX - JMP LBB18_48 - -LBB18_66: - LONG $0xcb74b9c5 // vpcmpeqb %xmm3, %xmm8, %xmm1 - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - SUBQ DI, SI - TESTW AX, AX - JE LBB18_68 - MOVWLZX AX, AX - ORQ $65536, AX - BSFQ AX, AX - LEAQ 32(SI)(AX*1), CX - JMP LBB18_59 - -LBB18_68: - LONG $0xca74b9c5 // vpcmpeqb %xmm2, %xmm8, %xmm1 - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - ORQ $65536, AX - BSFQ AX, AX - LEAQ 48(SI)(AX*1), CX - JMP LBB18_59 - -LBB18_69: - TESTQ CX, CX - JNS LBB18_2 - JMP LBB18_4 - -LBB18_71: - CMPQ DI, $48 - JL LBB18_5 - ADDQ $48, SI - LONG $0x066ff9c5 // vmovdqa (%rsi), %xmm0 - QUAD $0xfffffb100574f9c5 // vpcmpeqb $-1264(%rip), %xmm0, %xmm0 /* LCPI18_0(%rip) */ - LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d - TESTW R9, R9 - JE LBB18_5 - ADDQ $-48, DI - JMP LBB18_17 - _skip_negative: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5641 // pushq %r14 BYTE $0x53 // pushq %rbx - SUBQ $40, SP - MOVQ SI, DX - MOVQ 0(SI), CX - LEAQ -1(CX), BX + MOVQ SI, R14 + MOVQ 0(SI), BX MOVQ 0(DI), AX + ADDQ BX, AX MOVQ 8(DI), SI - LEAQ -40(BP), R8 + SUBQ BX, SI MOVQ AX, DI - MOVQ BX, R9 - LONG $0x00001ee8; BYTE $0x00 // callq _advance_number + LONG $0x000098e8; BYTE $0x00 // callq _skip_number TESTQ AX, AX - LONG $0xc3490f48 // cmovnsq %rbx, %rax - ADDQ $40, SP - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - RET + JS LBB18_1 + ADDQ BX, AX + MOVQ AX, 0(R14) + DECQ BX + JMP LBB18_3 -LCPI20_0: - QUAD $0x4024000000000000 // .quad 0x4024000000000000 +LBB18_1: + NOTQ AX + ADDQ AX, BX + MOVQ BX, 0(R14) + MOVQ $-2, BX -LCPI20_1: - QUAD $0x7ff0000000000000 // .quad 0x7ff0000000000000 - -_advance_number: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - MOVQ $-1, AX - CMPQ SI, CX - JBE LBB20_9 - MOVQ $0, 16(R8) - MOVQ R9, 24(R8) - MOVB 0(DI)(CX*1), R14 - CMPB R14, $48 - JNE LBB20_10 - INCQ CX - CMPQ CX, SI - JAE LBB20_12 - XORL R9, R9 - -LBB20_4: - LONG $0x2afbc1c4; BYTE $0xc1 // vcvtsi2sd %r9, %xmm0, %xmm0 - MOVQ R9, 16(R8) - LONG $0x117bc1c4; WORD $0x0840 // vmovsd %xmm0, $8(%r8) - ADDQ $8, R8 - MOVL $9, BX - MOVQ R8, R9 - CMPQ CX, SI - JAE LBB20_25 - JMP LBB20_5 - -LBB20_10: - LEAL -48(R14), BX - CMPB BX, $9 - JBE LBB20_13 - -LBB20_11: - MOVQ $-2, AX - JMP LBB20_55 - -LBB20_12: - MOVL $9, AX - JMP LBB20_55 - -LBB20_13: - INCQ CX - XORL R11, R11 - MOVQ CX, R10 - -LBB20_14: - IMUL3Q $10, R11, R9 - JO LBB20_19 - MOVBLZX R14, CX - ADDQ $-48, CX - ADDQ CX, R9 - JO LBB20_19 - CMPQ SI, R10 - JE LBB20_34 - MOVBLZX 0(DI)(R10*1), R14 - LEAL -48(R14), CX - INCQ R10 - MOVQ R9, R11 - CMPB CX, $10 - JB LBB20_14 - DECQ R10 - MOVQ R10, CX - JMP LBB20_4 - -LBB20_19: - MOVQ R9, 16(R8) - LONG $0x2afbc1c4; BYTE $0xc9 // vcvtsi2sd %r9, %xmm0, %xmm1 - LONG $0x2afbc1c4; BYTE $0xc3 // vcvtsi2sd %r11, %xmm0, %xmm0 - LEAQ 8(R8), R9 - CMPQ R10, SI - MOVQ R10, R11 - LONG $0xde420f4c // cmovbq %rsi, %r11 - LONG $0x117bc1c4; WORD $0x0848 // vmovsd %xmm1, $8(%r8) - MOVB -1(DI)(R10*1), BX - DECQ R10 - QUAD $0xfffffef80d10fbc5 // vmovsd $-264(%rip), %xmm1 /* LCPI20_0(%rip) */ - -LBB20_20: - LONG $0xc159fbc5 // vmulsd %xmm1, %xmm0, %xmm0 - LEAQ 1(R10), CX - MOVBLSX BX, BX - ADDL $-48, BX - LONG $0xd32ae3c5 // vcvtsi2sd %ebx, %xmm3, %xmm2 - LONG $0xc258fbc5 // vaddsd %xmm2, %xmm0, %xmm0 - CMPQ CX, SI - JAE LBB20_23 - MOVBLZX 1(DI)(R10*1), BX - LEAL -48(BX), R14 - MOVQ CX, R10 - CMPB R14, $10 - JB LBB20_20 - JMP LBB20_24 - -LBB20_23: - MOVQ R11, CX - -LBB20_24: - LONG $0x117bc1c4; WORD $0x0840 // vmovsd %xmm0, $8(%r8) - MOVQ $9223372036854775807, BX - MOVQ BX, 16(R8) - MOVL $8, BX - CMPQ CX, SI - JAE LBB20_25 - -LBB20_5: - CMPB 0(DI)(CX*1), $46 - JNE LBB20_25 - INCQ CX - CMPQ CX, SI - JAE LBB20_9 - MOVB 0(DI)(CX*1), R14 - LEAL -48(R14), BX - CMPB BX, $9 - JA LBB20_11 - MOVL $2, R11 - SUBQ SI, R11 - XORL R10, R10 - MOVQ CX, R8 - -LBB20_36: - LEAQ 0(R11)(R8*1), R15 - LEAL 0(R10)(R10*4), R10 - MOVBLZX R14, BX - LEAL -48(BX)(R10*2), R10 - CMPQ R15, $1 - JE LBB20_44 - MOVBLZX 1(DI)(R8*1), R14 - INCQ R8 - LEAL -48(R14), BX - CMPB BX, $10 - JB LBB20_36 - JMP LBB20_45 - -LBB20_25: - MOVQ CX, R8 - CMPQ R8, SI - JAE LBB20_54 - -LBB20_26: - MOVB 0(DI)(R8*1), CX - ORB $32, CX - CMPB CX, $101 - JNE LBB20_54 - LEAQ 1(R8), CX - CMPQ CX, SI - JAE LBB20_9 - MOVB 0(DI)(CX*1), R10 - CMPB R10, $45 - JE LBB20_30 - MOVL $1, R11 - CMPB R10, $43 - JNE LBB20_38 - -LBB20_30: - LEAQ -1(SI), BX - CMPQ CX, BX - JAE LBB20_55 - LEAQ 2(R8), R14 - XORL AX, AX - CMPB R10, $43 - SETEQ AX - LEAL -1(AX)(AX*1), R11 - MOVB 2(DI)(R8*1), R10 - JMP LBB20_39 - -LBB20_9: - MOVQ SI, CX - -LBB20_55: - MOVQ CX, 0(DX) - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - RET - -LBB20_34: - MOVQ SI, CX - JMP LBB20_4 - -LBB20_38: - MOVQ CX, R14 - -LBB20_39: - LEAL -48(R10), CX - MOVQ $-2, AX - CMPB CX, $9 - JBE LBB20_41 - MOVQ R14, CX - JMP LBB20_55 - -LBB20_41: - LEAQ 1(R14), R8 - CMPQ R8, SI - LONG $0xc6420f4c // cmovbq %rsi, %r8 - XORL AX, AX - -LBB20_42: - LEAL 0(AX)(AX*4), AX - LEAQ 1(R14), CX - MOVBLZX R10, BX - LEAL -48(BX)(AX*2), AX - CMPQ CX, SI - JAE LBB20_48 - MOVBLZX 1(DI)(R14*1), R10 - LEAL -48(R10), BX - MOVQ CX, R14 - CMPB BX, $10 - JB LBB20_42 - JMP LBB20_49 - -LBB20_44: - MOVQ SI, R8 - -LBB20_45: - SUBQ R8, CX - LONG $0xc957f1c5 // vxorpd %xmm1, %xmm1, %xmm1 - CMPL CX, $-323 - JL LBB20_53 - CMPL CX, $308 - JLE LBB20_52 - QUAD $0xfffffd6a0d10fbc5 // vmovsd $-662(%rip), %xmm1 /* LCPI20_1(%rip) */ - JMP LBB20_53 - -LBB20_48: - MOVQ R8, CX - -LBB20_49: - IMULL R11, AX - LONG $0xc957f1c5 // vxorpd %xmm1, %xmm1, %xmm1 - CMPL AX, $-323 - JL LBB20_57 - CMPL AX, $308 - JLE LBB20_56 - QUAD $0xfffffd470d10fbc5 // vmovsd $-697(%rip), %xmm1 /* LCPI20_1(%rip) */ - JMP LBB20_57 - -LBB20_52: - LONG $0x2a63c1c4; BYTE $0xca // vcvtsi2sd %r10d, %xmm3, %xmm1 - ADDL $323, CX - LONG $0x8e1d8d48; WORD $0x0006; BYTE $0x00 // leaq $1678(%rip), %rbx /* _P10_TAB(%rip) */ - LONG $0x0c59f3c5; BYTE $0xcb // vmulsd (%rbx,%rcx,8), %xmm1, %xmm1 - -LBB20_53: - LONG $0xc058f3c5 // vaddsd %xmm0, %xmm1, %xmm0 - LONG $0x117bc1c4; BYTE $0x01 // vmovsd %xmm0, (%r9) - MOVL $8, BX - CMPQ R8, SI - JB LBB20_26 - -LBB20_54: - MOVQ R8, CX +LBB18_3: MOVQ BX, AX - JMP LBB20_55 + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 + BYTE $0x5d // popq %rbp + RET -LBB20_56: - ADDL $323, AX - LONG $0x5b358d48; WORD $0x0006; BYTE $0x00 // leaq $1627(%rip), %rsi /* _P10_TAB(%rip) */ - LONG $0x0c59fbc5; BYTE $0xc6 // vmulsd (%rsi,%rax,8), %xmm0, %xmm1 +LCPI19_0: + QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' -LBB20_57: - LONG $0x117bc1c4; BYTE $0x09 // vmovsd %xmm1, (%r9) - MOVL $8, AX - JMP LBB20_55 +LCPI19_1: + QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' + +LCPI19_2: + QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' + +LCPI19_3: + QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' + +LCPI19_4: + QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' + +LCPI19_5: + QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' + +LCPI19_6: + QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE' + +_skip_number: + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5741 // pushq %r15 + WORD $0x5641 // pushq %r14 + BYTE $0x53 // pushq %rbx + TESTQ SI, SI + JE LBB19_31 + CMPB 0(DI), $48 + JNE LBB19_4 + MOVL $1, AX + CMPQ SI, $1 + JE LBB19_32 + CMPB 1(DI), $46 + JNE LBB19_32 + +LBB19_4: + MOVQ $-1, R10 + CMPQ SI, $16 + JB LBB19_51 + QUAD $0xffffff47056f7ac5 // vmovdqu $-185(%rip), %xmm8 /* LCPI19_0(%rip) */ + QUAD $0xffffff4f0d6f7ac5 // vmovdqu $-177(%rip), %xmm9 /* LCPI19_1(%rip) */ + QUAD $0xffffff57156f7ac5 // vmovdqu $-169(%rip), %xmm10 /* LCPI19_2(%rip) */ + QUAD $0xffffff5f1d6f7ac5 // vmovdqu $-161(%rip), %xmm11 /* LCPI19_3(%rip) */ + QUAD $0xffffff67256ffac5 // vmovdqu $-153(%rip), %xmm4 /* LCPI19_4(%rip) */ + QUAD $0xffffff6f2d6ffac5 // vmovdqu $-145(%rip), %xmm5 /* LCPI19_5(%rip) */ + QUAD $0xffffff77356ffac5 // vmovdqu $-137(%rip), %xmm6 /* LCPI19_6(%rip) */ + MOVL $4294967295, R11 + MOVQ $-1, R8 + MOVQ $-1, R9 + MOVQ DI, DX + +LBB19_6: + LONG $0x3a6ffac5 // vmovdqu (%rdx), %xmm7 + LONG $0x6441c1c4; BYTE $0xc0 // vpcmpgtb %xmm8, %xmm7, %xmm0 + LONG $0xcf64b1c5 // vpcmpgtb %xmm7, %xmm9, %xmm1 + LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 + LONG $0xcf74a9c5 // vpcmpeqb %xmm7, %xmm10, %xmm1 + LONG $0xd774a1c5 // vpcmpeqb %xmm7, %xmm11, %xmm2 + LONG $0xc9ebe9c5 // vpor %xmm1, %xmm2, %xmm1 + LONG $0xd4dbc1c5 // vpand %xmm4, %xmm7, %xmm2 + LONG $0xd674e9c5 // vpcmpeqb %xmm6, %xmm2, %xmm2 + LONG $0xfd74c1c5 // vpcmpeqb %xmm5, %xmm7, %xmm7 + LONG $0xdfebe9c5 // vpor %xmm7, %xmm2, %xmm3 + LONG $0xc0ebf1c5 // vpor %xmm0, %xmm1, %xmm0 + LONG $0xc0ebe1c5 // vpor %xmm0, %xmm3, %xmm0 + LONG $0xc7d7f9c5 // vpmovmskb %xmm7, %eax + LONG $0xfad779c5 // vpmovmskb %xmm2, %r15d + LONG $0xf1d779c5 // vpmovmskb %xmm1, %r14d + LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx + XORQ R11, CX + BSFQ CX, CX + CMPL CX, $16 + JE LBB19_8 + MOVL $-1, BX + SHLL CX, BX + NOTL BX + ANDL BX, AX + ANDL BX, R15 + ANDL R14, BX + MOVL BX, R14 + +LBB19_8: + LEAL -1(AX), BX + ANDL AX, BX + JNE LBB19_46 + LEAL -1(R15), BX + ANDL R15, BX + JNE LBB19_46 + LEAL -1(R14), BX + ANDL R14, BX + JNE LBB19_46 + TESTL AX, AX + JE LBB19_14 + MOVQ DX, BX + SUBQ DI, BX + BSFL AX, AX + ADDQ BX, AX + CMPQ R9, $-1 + JNE LBB19_47 + MOVQ AX, R9 + +LBB19_14: + TESTL R15, R15 + JE LBB19_17 + MOVQ DX, BX + SUBQ DI, BX + BSFL R15, AX + ADDQ BX, AX + CMPQ R8, $-1 + JNE LBB19_47 + MOVQ AX, R8 + +LBB19_17: + TESTL R14, R14 + JE LBB19_20 + MOVQ DX, BX + SUBQ DI, BX + BSFL R14, AX + ADDQ BX, AX + CMPQ R10, $-1 + JNE LBB19_47 + MOVQ AX, R10 + +LBB19_20: + CMPL CX, $16 + JNE LBB19_33 + ADDQ $16, DX + ADDQ $-16, SI + CMPQ SI, $15 + JA LBB19_6 + +LBB19_22: + LONG $0xfd358d48; WORD $0x0000; BYTE $0x00 // leaq $253(%rip), %rsi /* LJTI19_0(%rip) */ + +LBB19_23: + MOVQ DX, CX + MOVBLSX 0(DX), AX + ADDL $-43, AX + CMPL AX, $58 + JA LBB19_34 + LEAQ 1(CX), DX + MOVLQSX 0(SI)(AX*4), AX + ADDQ SI, AX + JMP AX + +LBB19_25: + MOVQ DX, AX + SUBQ DI, AX + CMPQ R10, $-1 + JNE LBB19_50 + DECQ AX + MOVQ AX, R10 + JMP LBB19_23 + +LBB19_27: + MOVQ DX, AX + SUBQ DI, AX + CMPQ R8, $-1 + JNE LBB19_50 + DECQ AX + MOVQ AX, R8 + JMP LBB19_23 + +LBB19_29: + MOVQ DX, AX + SUBQ DI, AX + CMPQ R9, $-1 + JNE LBB19_50 + DECQ AX + MOVQ AX, R9 + JMP LBB19_23 + +LBB19_31: + MOVQ $-1, AX + +LBB19_32: + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 + WORD $0x5f41 // popq %r15 + BYTE $0x5d // popq %rbp + RET + +LBB19_33: + ADDQ CX, DX + MOVQ DX, CX + +LBB19_34: + MOVQ $-1, AX + TESTQ R10, R10 + JE LBB19_32 + TESTQ R9, R9 + JE LBB19_32 + TESTQ R10, R10 + JLE LBB19_39 + LEAQ -1(R10), AX + CMPQ R8, AX + JE LBB19_39 + NOTQ R10 + MOVQ R10, AX + JMP LBB19_32 + +LBB19_39: + MOVQ R9, AX + ORQ R8, AX + CMPQ R9, R8 + JL LBB19_42 + TESTQ AX, AX + JS LBB19_42 + NOTQ R9 + MOVQ R9, AX + JMP LBB19_32 + +LBB19_42: + LEAQ -1(R8), DX + CMPQ R9, DX + JNE LBB19_45 + TESTQ AX, AX + JS LBB19_45 + NOTQ R8 + MOVQ R8, AX + JMP LBB19_32 + +LBB19_45: + SUBQ DI, CX + MOVQ CX, AX + JMP LBB19_32 + +LBB19_46: + SUBQ DI, DX + BSFL BX, AX + ADDQ DX, AX + +LBB19_47: + NOTQ AX + JMP LBB19_32 + +LBB19_50: + NEGQ AX + JMP LBB19_32 + +LBB19_51: + MOVQ $-1, R8 + MOVQ $-1, R9 + MOVQ DI, DX + JMP LBB19_22 + +// .set L19_0_set_25, LBB19_25-LJTI19_0 +// .set L19_0_set_34, LBB19_34-LJTI19_0 +// .set L19_0_set_29, LBB19_29-LJTI19_0 +// .set L19_0_set_23, LBB19_23-LJTI19_0 +// .set L19_0_set_27, LBB19_27-LJTI19_0 +LJTI19_0: + LONG $0xffffff1e // .long L19_0_set_25 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff1e // .long L19_0_set_25 + LONG $0xffffff4e // .long L19_0_set_29 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff03 // .long L19_0_set_23 + LONG $0xffffff03 // .long L19_0_set_23 + LONG $0xffffff03 // .long L19_0_set_23 + LONG $0xffffff03 // .long L19_0_set_23 + LONG $0xffffff03 // .long L19_0_set_23 + LONG $0xffffff03 // .long L19_0_set_23 + LONG $0xffffff03 // .long L19_0_set_23 + LONG $0xffffff03 // .long L19_0_set_23 + LONG $0xffffff03 // .long L19_0_set_23 + LONG $0xffffff03 // .long L19_0_set_23 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff36 // .long L19_0_set_27 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff7a // .long L19_0_set_34 + LONG $0xffffff36 // .long L19_0_set_27 _skip_positive: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5741 // pushq %r15 + WORD $0x5641 // pushq %r14 BYTE $0x53 // pushq %rbx - SUBQ $40, SP - MOVQ SI, DX - MOVQ 0(SI), BX - DECQ BX + BYTE $0x50 // pushq %rax + MOVQ SI, R14 + MOVQ 0(SI), R15 + LEAQ -1(R15), BX MOVQ 0(DI), AX + ADDQ BX, AX MOVQ 8(DI), SI - LEAQ -40(BP), R8 + SUBQ BX, SI MOVQ AX, DI - MOVQ BX, CX - MOVQ BX, R9 - LONG $0xfffcc9e8; BYTE $0xff // callq _advance_number + LONG $0xfffc57e8; BYTE $0xff // callq _skip_number + LEAQ -1(AX), DX + MOVQ $-2, CX + MOVQ $-2, SI + SUBQ AX, SI TESTQ AX, AX - LONG $0xc3490f48 // cmovnsq %rbx, %rax - ADDQ $40, SP + LONG $0xf2490f48 // cmovnsq %rdx, %rsi + LONG $0xcb490f48 // cmovnsq %rbx, %rcx + ADDQ R15, SI + MOVQ SI, 0(R14) + MOVQ CX, AX + ADDQ $8, SP BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 + WORD $0x5f41 // popq %r15 BYTE $0x5d // popq %rbp RET @@ -5535,6 +5199,590 @@ _VecShiftShuffles: QUAD $0x0e0d0c0b0a090807; QUAD $0xffffffffffffff0f // .ascii 16, '\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff' QUAD $0x0f0e0d0c0b0a0908; QUAD $0xffffffffffffffff // .ascii 16, '\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff\xff' +__SingleQuoteTab: + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000030303030755c // .asciz 8, '\\u0000\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000031303030755c // .asciz 8, '\\u0001\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000032303030755c // .asciz 8, '\\u0002\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000033303030755c // .asciz 8, '\\u0003\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000034303030755c // .asciz 8, '\\u0004\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000035303030755c // .asciz 8, '\\u0005\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000036303030755c // .asciz 8, '\\u0006\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000037303030755c // .asciz 8, '\\u0007\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x000000000000625c // .asciz 8, '\\b\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x000000000000745c // .asciz 8, '\\t\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x0000000000006e5c // .asciz 8, '\\n\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000062303030755c // .asciz 8, '\\u000b\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x000000000000665c // .asciz 8, '\\f\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x000000000000725c // .asciz 8, '\\r\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000065303030755c // .asciz 8, '\\u000e\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000066303030755c // .asciz 8, '\\u000f\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000030313030755c // .asciz 8, '\\u0010\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000031313030755c // .asciz 8, '\\u0011\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000032313030755c // .asciz 8, '\\u0012\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000033313030755c // .asciz 8, '\\u0013\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000034313030755c // .asciz 8, '\\u0014\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000035313030755c // .asciz 8, '\\u0015\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000036313030755c // .asciz 8, '\\u0016\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000037313030755c // .asciz 8, '\\u0017\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000038313030755c // .asciz 8, '\\u0018\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000039313030755c // .asciz 8, '\\u0019\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000061313030755c // .asciz 8, '\\u001a\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000062313030755c // .asciz 8, '\\u001b\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000063313030755c // .asciz 8, '\\u001c\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000064313030755c // .asciz 8, '\\u001d\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000065313030755c // .asciz 8, '\\u001e\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000066313030755c // .asciz 8, '\\u001f\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x000000000000225c // .asciz 8, '\\"\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x0000000000005c5c // .asciz 8, '\\\\\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + +__DoubleQuoteTab: + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0030303030755c5c // .asciz 8, '\\\\u0000\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0031303030755c5c // .asciz 8, '\\\\u0001\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0032303030755c5c // .asciz 8, '\\\\u0002\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0033303030755c5c // .asciz 8, '\\\\u0003\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0034303030755c5c // .asciz 8, '\\\\u0004\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0035303030755c5c // .asciz 8, '\\\\u0005\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0036303030755c5c // .asciz 8, '\\\\u0006\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0037303030755c5c // .asciz 8, '\\\\u0007\x00' + QUAD $0x0000000000000003 // .quad 3 + QUAD $0x0000000000625c5c // .asciz 8, '\\\\b\x00\x00\x00\x00\x00' + QUAD $0x0000000000000003 // .quad 3 + QUAD $0x0000000000745c5c // .asciz 8, '\\\\t\x00\x00\x00\x00\x00' + QUAD $0x0000000000000003 // .quad 3 + QUAD $0x00000000006e5c5c // .asciz 8, '\\\\n\x00\x00\x00\x00\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0062303030755c5c // .asciz 8, '\\\\u000b\x00' + QUAD $0x0000000000000003 // .quad 3 + QUAD $0x0000000000665c5c // .asciz 8, '\\\\f\x00\x00\x00\x00\x00' + QUAD $0x0000000000000003 // .quad 3 + QUAD $0x0000000000725c5c // .asciz 8, '\\\\r\x00\x00\x00\x00\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0065303030755c5c // .asciz 8, '\\\\u000e\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0066303030755c5c // .asciz 8, '\\\\u000f\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0030313030755c5c // .asciz 8, '\\\\u0010\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0031313030755c5c // .asciz 8, '\\\\u0011\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0032313030755c5c // .asciz 8, '\\\\u0012\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0033313030755c5c // .asciz 8, '\\\\u0013\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0034313030755c5c // .asciz 8, '\\\\u0014\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0035313030755c5c // .asciz 8, '\\\\u0015\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0036313030755c5c // .asciz 8, '\\\\u0016\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0037313030755c5c // .asciz 8, '\\\\u0017\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0038313030755c5c // .asciz 8, '\\\\u0018\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0039313030755c5c // .asciz 8, '\\\\u0019\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0061313030755c5c // .asciz 8, '\\\\u001a\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0062313030755c5c // .asciz 8, '\\\\u001b\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0063313030755c5c // .asciz 8, '\\\\u001c\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0064313030755c5c // .asciz 8, '\\\\u001d\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0065313030755c5c // .asciz 8, '\\\\u001e\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0066313030755c5c // .asciz 8, '\\\\u001f\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000004 // .quad 4 + QUAD $0x00000000225c5c5c // .asciz 8, '\\\\\\"\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000004 // .quad 4 + QUAD $0x000000005c5c5c5c // .asciz 8, '\\\\\\\\\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + __UnquoteTab: QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' @@ -6191,21 +6439,14 @@ _P10_TAB: TEXT ·__f64toa(SB), NOSPLIT, $0 - 24 MOVQ out+0(FP), DI MOVSD val+8(FP), X0 - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+2480(SB) // _f64toa + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+574(SB) // _f64toa MOVQ AX, ret+16(FP) RET TEXT ·__i64toa(SB), NOSPLIT, $0 - 24 MOVQ out+0(FP), DI MOVQ val+8(FP), SI - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+5544(SB) // _i64toa - MOVQ AX, ret+16(FP) - RET - -TEXT ·__lquote(SB), NOSPLIT, $0 - 24 - MOVQ buf+0(FP), DI - MOVQ off+8(FP), SI - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+295(SB) // _lquote + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+3638(SB) // _i64toa MOVQ AX, ret+16(FP) RET @@ -6213,7 +6454,7 @@ TEXT ·__lspace(SB), NOSPLIT, $0 - 32 MOVQ sp+0(FP), DI MOVQ nb+8(FP), SI MOVQ off+16(FP), DX - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+937(SB) // _lspace + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+238(SB) // _lspace MOVQ AX, ret+24(FP) RET @@ -6224,11 +6465,21 @@ TEXT ·__lzero(SB), NOSPLIT, $0 - 24 MOVQ AX, ret+16(FP) RET +TEXT ·__quote(SB), NOSPLIT, $0 - 48 + MOVQ sp+0(FP), DI + MOVQ nb+8(FP), SI + MOVQ dp+16(FP), DX + MOVQ dn+24(FP), CX + MOVQ flags+32(FP), R8 + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+4951(SB) // _quote + MOVQ AX, ret+40(FP) + RET + TEXT ·__skip_array(SB), NOSPLIT, $0 - 32 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+14087(SB) // _skip_array + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+13969(SB) // _skip_array MOVQ AX, ret+24(FP) RET @@ -6236,7 +6487,7 @@ TEXT ·__skip_object(SB), NOSPLIT, $0 - 32 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+14122(SB) // _skip_object + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+14004(SB) // _skip_object MOVQ AX, ret+24(FP) RET @@ -6244,24 +6495,24 @@ TEXT ·__skip_one(SB), NOSPLIT, $0 - 32 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+12457(SB) // _skip_one + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+11647(SB) // _skip_one MOVQ AX, ret+24(FP) RET TEXT ·__u64toa(SB), NOSPLIT, $0 - 24 MOVQ out+0(FP), DI MOVQ val+8(FP), SI - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+5637(SB) // _u64toa + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+3731(SB) // _u64toa MOVQ AX, ret+16(FP) RET TEXT ·__unquote(SB), NOSPLIT, $0 - 48 - MOVQ s+0(FP), DI + MOVQ sp+0(FP), DI MOVQ nb+8(FP), SI MOVQ dp+16(FP), DX MOVQ ep+24(FP), CX MOVQ flags+32(FP), R8 - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+6825(SB) // _unquote + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+5972(SB) // _unquote MOVQ AX, ret+40(FP) RET @@ -6271,7 +6522,7 @@ TEXT ·__value(SB), NOSPLIT, $0 - 48 MOVQ p+16(FP), DX MOVQ v+24(FP), CX MOVQ allow_control+32(FP), R8 - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+8460(SB) // _value + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+7664(SB) // _value MOVQ AX, ret+40(FP) RET @@ -6279,26 +6530,26 @@ TEXT ·__vnumber(SB), NOSPLIT, $0 - 24 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+10935(SB), AX // _vnumber + LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+10125(SB), AX // _vnumber JMP AX TEXT ·__vsigned(SB), NOSPLIT, $0 - 24 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+11907(SB), AX // _vsigned + LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+11097(SB), AX // _vsigned JMP AX TEXT ·__vstring(SB), NOSPLIT, $0 - 24 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+9593(SB), AX // _vstring + LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+9240(SB), AX // _vstring JMP AX TEXT ·__vunsigned(SB), NOSPLIT, $0 - 24 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+12184(SB), AX // _vunsigned + LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+11374(SB), AX // _vunsigned JMP AX diff --git a/internal/native/avx/native_amd64_test.go b/internal/native/avx/native_amd64_test.go index 79aaa7b..3872d12 100644 --- a/internal/native/avx/native_amd64_test.go +++ b/internal/native/avx/native_amd64_test.go @@ -43,6 +43,45 @@ func TestNative_Value(t *testing.T) { assert.Equal(t, 3, v.Ep) } +func TestNative_Quote(t *testing.T) { + s := "hello\b\f\n\r\t\\\"\u666fworld" + d := make([]byte, 256) + dp := (*rt.GoSlice)(unsafe.Pointer(&d)) + sp := (*rt.GoString)(unsafe.Pointer(&s)) + rv := __quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, 0) + if rv < 0 { + require.NoError(t, types.ParsingError(-rv)) + } + assert.Equal(t, len(s), rv) + assert.Equal(t, 27, len(d)) + assert.Equal(t, `hello\b\f\n\r\t\\\"景world`, string(d)) +} + +func TestNative_QuoteNoMem(t *testing.T) { + s := "hello\b\f\n\r\t\\\"\u666fworld" + d := make([]byte, 10) + dp := (*rt.GoSlice)(unsafe.Pointer(&d)) + sp := (*rt.GoString)(unsafe.Pointer(&s)) + rv := __quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, 0) + assert.Equal(t, -8, rv) + assert.Equal(t, 9, len(d)) + assert.Equal(t, `hello\b\f`, string(d)) +} + +func TestNative_DoubleQuote(t *testing.T) { + s := "hello\b\f\n\r\t\\\"\u666fworld" + d := make([]byte, 256) + dp := (*rt.GoSlice)(unsafe.Pointer(&d)) + sp := (*rt.GoString)(unsafe.Pointer(&s)) + rv := __quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, types.F_DOUBLE_UNQUOTE) + if rv < 0 { + require.NoError(t, types.ParsingError(-rv)) + } + assert.Equal(t, len(s), rv) + assert.Equal(t, 36, len(d)) + assert.Equal(t, `hello\\b\\f\\n\\r\\t\\\\\\\"景world`, string(d)) +} + func TestNative_Unquote(t *testing.T) { s := `hello\b\f\n\r\t\\\"\u2333world` d := make([]byte, 0, len(s)) @@ -173,6 +212,16 @@ func TestNative_Vstring(t *testing.T) { assert.Equal(t, int64(5), v.Iv) } +func TestNative_VstringEscapeEOF(t *testing.T) { + var v types.JsonState + i := 0 + s := `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"x` + __vstring(&s, &i, &v) + assert.Equal(t, 95, i) + assert.Equal(t, 63, v.Ep) + assert.Equal(t, int64(0), v.Iv) +} + func TestNative_VstringHangUpOnRandomData(t *testing.T) { v, e := hex.DecodeString( "228dc61efd54ef80a908fb6026b7f2d5f92a257ba8b347c995f259eb8685376a" + diff --git a/internal/native/avx/native_export_amd64.go b/internal/native/avx/native_export_amd64.go index 325e974..75686e1 100644 --- a/internal/native/avx/native_export_amd64.go +++ b/internal/native/avx/native_export_amd64.go @@ -21,12 +21,12 @@ package avx var ( S_f64toa = _subr__f64toa S_i64toa = _subr__i64toa - S_lquote = _subr__lquote S_u64toa = _subr__u64toa + S_lspace = _subr__lspace ) var ( - S_lspace = _subr__lspace + S_quote = _subr__quote S_unquote = _subr__unquote ) diff --git a/internal/native/avx/native_subr_amd64.go b/internal/native/avx/native_subr_amd64.go index 8ae10aa..9a292a9 100644 --- a/internal/native/avx/native_subr_amd64.go +++ b/internal/native/avx/native_subr_amd64.go @@ -14,29 +14,29 @@ func ___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___() var ( _func__base = ___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___ - _subr__f64toa = **(**uintptr)(unsafe.Pointer(&_func__base)) + 2480 - _subr__i64toa = **(**uintptr)(unsafe.Pointer(&_func__base)) + 5544 - _subr__lquote = **(**uintptr)(unsafe.Pointer(&_func__base)) + 295 - _subr__lspace = **(**uintptr)(unsafe.Pointer(&_func__base)) + 937 + _subr__f64toa = **(**uintptr)(unsafe.Pointer(&_func__base)) + 574 + _subr__i64toa = **(**uintptr)(unsafe.Pointer(&_func__base)) + 3638 + _subr__lspace = **(**uintptr)(unsafe.Pointer(&_func__base)) + 238 _subr__lzero = **(**uintptr)(unsafe.Pointer(&_func__base)) + 0 - _subr__skip_array = **(**uintptr)(unsafe.Pointer(&_func__base)) + 14087 - _subr__skip_object = **(**uintptr)(unsafe.Pointer(&_func__base)) + 14122 - _subr__skip_one = **(**uintptr)(unsafe.Pointer(&_func__base)) + 12457 - _subr__u64toa = **(**uintptr)(unsafe.Pointer(&_func__base)) + 5637 - _subr__unquote = **(**uintptr)(unsafe.Pointer(&_func__base)) + 6825 - _subr__value = **(**uintptr)(unsafe.Pointer(&_func__base)) + 8460 - _subr__vnumber = **(**uintptr)(unsafe.Pointer(&_func__base)) + 10935 - _subr__vsigned = **(**uintptr)(unsafe.Pointer(&_func__base)) + 11907 - _subr__vstring = **(**uintptr)(unsafe.Pointer(&_func__base)) + 9593 - _subr__vunsigned = **(**uintptr)(unsafe.Pointer(&_func__base)) + 12184 + _subr__quote = **(**uintptr)(unsafe.Pointer(&_func__base)) + 4951 + _subr__skip_array = **(**uintptr)(unsafe.Pointer(&_func__base)) + 13969 + _subr__skip_object = **(**uintptr)(unsafe.Pointer(&_func__base)) + 14004 + _subr__skip_one = **(**uintptr)(unsafe.Pointer(&_func__base)) + 11647 + _subr__u64toa = **(**uintptr)(unsafe.Pointer(&_func__base)) + 3731 + _subr__unquote = **(**uintptr)(unsafe.Pointer(&_func__base)) + 5972 + _subr__value = **(**uintptr)(unsafe.Pointer(&_func__base)) + 7664 + _subr__vnumber = **(**uintptr)(unsafe.Pointer(&_func__base)) + 10125 + _subr__vsigned = **(**uintptr)(unsafe.Pointer(&_func__base)) + 11097 + _subr__vstring = **(**uintptr)(unsafe.Pointer(&_func__base)) + 9240 + _subr__vunsigned = **(**uintptr)(unsafe.Pointer(&_func__base)) + 11374 ) var ( _ = _subr__f64toa _ = _subr__i64toa - _ = _subr__lquote _ = _subr__lspace _ = _subr__lzero + _ = _subr__quote _ = _subr__skip_array _ = _subr__skip_object _ = _subr__skip_one diff --git a/internal/native/avx2/native_amd64.go b/internal/native/avx2/native_amd64.go index a943730..a86553e 100644 --- a/internal/native/avx2/native_amd64.go +++ b/internal/native/avx2/native_amd64.go @@ -47,12 +47,17 @@ func __lzero(p unsafe.Pointer, n int) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __lquote(buf *string, off int) (ret int) +func __lspace(sp unsafe.Pointer, nb int, off int) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __lspace(sp unsafe.Pointer, nb int, off int) (ret int) +func __quote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int, flags uint64) (ret int) + +//go:nosplit +//go:noescape +//goland:noinspection GoUnusedParameter +func __unquote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) (ret int) //go:nosplit //go:noescape @@ -93,8 +98,3 @@ func __skip_array(s *string, p *int, m *types.StateMachine) (ret int) //go:noescape //goland:noinspection GoUnusedParameter func __skip_object(s *string, p *int, m *types.StateMachine) (ret int) - -//go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __unquote(s unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) (ret int) diff --git a/internal/native/avx2/native_amd64.s b/internal/native/avx2/native_amd64.s index ae625d8..e2e163e 100644 --- a/internal/native/avx2/native_amd64.s +++ b/internal/native/avx2/native_amd64.s @@ -8,88 +8,78 @@ TEXT ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___(SB), NOSPLIT, $0 _lzero: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - CMPQ SI, $128 - JB LBB0_4 - LONG $0xc0eff9c5 // vpxor %xmm0, %xmm0, %xmm0 - LONG $0xc976f5c5 // vpcmpeqd %ymm1, %ymm1, %ymm1 - -LBB0_2: - LONG $0x576ffdc5; BYTE $0x20 // vmovdqa $32(%rdi), %ymm2 - LONG $0x17ebedc5 // vpor (%rdi), %ymm2, %ymm2 - LONG $0x57ebedc5; BYTE $0x40 // vpor $64(%rdi), %ymm2, %ymm2 - LONG $0x57ebedc5; BYTE $0x60 // vpor $96(%rdi), %ymm2, %ymm2 - LONG $0xd074edc5 // vpcmpeqb %ymm0, %ymm2, %ymm2 - LONG $0x177de2c4; BYTE $0xd1 // vptest %ymm1, %ymm2 - JAE LBB0_14 - SUBQ $-128, DI - ADDQ $-128, SI - CMPQ SI, $127 - JA LBB0_2 - -LBB0_4: CMPQ SI, $32 - JB LBB0_8 - LONG $0xc0eff9c5 // vpxor %xmm0, %xmm0, %xmm0 - LONG $0xc976f5c5 // vpcmpeqd %ymm1, %ymm1, %ymm1 + JB LBB0_3 -LBB0_6: - LONG $0x1774fdc5 // vpcmpeqb (%rdi), %ymm0, %ymm2 - LONG $0x177de2c4; BYTE $0xd1 // vptest %ymm1, %ymm2 - JAE LBB0_14 +LBB0_1: + LONG $0x076ffec5 // vmovdqu (%rdi), %ymm0 + LONG $0x177de2c4; BYTE $0xc0 // vptest %ymm0, %ymm0 + JNE LBB0_9 ADDQ $32, DI ADDQ $-32, SI CMPQ SI, $31 - JA LBB0_6 + JA LBB0_1 -LBB0_8: +LBB0_3: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + CMPQ SI, $16 + JB LBB0_6 + +LBB0_4: + LONG $0x076ffac5 // vmovdqu (%rdi), %xmm0 + LONG $0x1779e2c4; BYTE $0xc0 // vptest %xmm0, %xmm0 + JNE LBB0_10 + ADDQ $16, DI + ADDQ $-16, SI + CMPQ SI, $15 + JA LBB0_4 + +LBB0_6: CMPQ SI, $8 - JB LBB0_11 - -LBB0_9: + JB LBB0_12 + MOVL $1, AX CMPQ 0(DI), $0 - JNE LBB0_14 + JNE LBB0_8 ADDQ $8, DI ADDQ $-8, SI - CMPQ SI, $7 - JA LBB0_9 -LBB0_11: +LBB0_12: CMPQ SI, $4 - JB LBB0_18 + JB LBB0_15 MOVL $1, AX CMPL 0(DI), $0 - JNE LBB0_13 + JNE LBB0_8 ADDQ $4, DI ADDQ $-4, SI -LBB0_18: +LBB0_15: CMPQ SI, $2 - JB LBB0_21 + JB LBB0_18 MOVL $1, AX CMPW 0(DI), $0 - JNE LBB0_13 + JNE LBB0_8 ADDQ $2, DI ADDQ $-2, SI -LBB0_21: +LBB0_18: XORL AX, AX TESTQ SI, SI - JE LBB0_13 + JE LBB0_8 CMPB 0(DI), $0 SETNE AX - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper + BYTE $0x5d // popq %rbp RET -LBB0_14: +LBB0_8: + BYTE $0x5d // popq %rbp + RET + +LBB0_9: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + +LBB0_10: MOVL $1, AX - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - RET - -LBB0_13: - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper + BYTE $0x5d // popq %rbp RET LCPI1_0: @@ -97,439 +87,98 @@ LCPI1_0: QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' LCPI1_1: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' + QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' LCPI1_2: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' + QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' LCPI1_3: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' + QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' LCPI1_4: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' LCPI1_5: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' LCPI1_6: - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0x00 // .space 1, '\x00' - BYTE $0xff // .byte 255 - -_lquote: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - MOVQ 8(DI), DX - SUBQ SI, DX - JE LBB1_1 - MOVQ 0(DI), CX - ADDQ SI, CX - CMPQ DX, $16 - JAE LBB1_3 - LONG $0x763941c4; BYTE $0xc0 // vpcmpeqd %xmm8, %xmm8, %xmm8 - DECQ DX - LONG $0xc076f9c5 // vpcmpeqd %xmm0, %xmm0, %xmm0 - CMPQ DX, $14 - JA LBB1_30 - LONG $0x32058d48; WORD $0x0002; BYTE $0x00 // leaq $562(%rip), %rax /* LJTI1_0(%rip) */ - MOVLQSX 0(AX)(DX*4), DX - ADDQ AX, DX - LONG $0x763141c4; BYTE $0xc9 // vpcmpeqd %xmm9, %xmm9, %xmm9 - LONG $0x762941c4; BYTE $0xd2 // vpcmpeqd %xmm10, %xmm10, %xmm10 - LONG $0x762141c4; BYTE $0xdb // vpcmpeqd %xmm11, %xmm11, %xmm11 - LONG $0x761941c4; BYTE $0xe4 // vpcmpeqd %xmm12, %xmm12, %xmm12 - LONG $0x761141c4; BYTE $0xed // vpcmpeqd %xmm13, %xmm13, %xmm13 - LONG $0x760941c4; BYTE $0xf6 // vpcmpeqd %xmm14, %xmm14, %xmm14 - LONG $0xff76c1c5 // vpcmpeqd %xmm7, %xmm7, %xmm7 - LONG $0xc076f9c5 // vpcmpeqd %xmm0, %xmm0, %xmm0 - LONG $0xc976f1c5 // vpcmpeqd %xmm1, %xmm1, %xmm1 - LONG $0xd276e9c5 // vpcmpeqd %xmm2, %xmm2, %xmm2 - LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 - LONG $0xe476d9c5 // vpcmpeqd %xmm4, %xmm4, %xmm4 - LONG $0xed76d1c5 // vpcmpeqd %xmm5, %xmm5, %xmm5 - LONG $0xf676c9c5 // vpcmpeqd %xmm6, %xmm6, %xmm6 - JMP DX - -LBB1_15: - QUAD $0xffffff63056ffac5 // vmovdqu $-157(%rip), %xmm0 /* LCPI1_6(%rip) */ - LONG $0x207963c4; WORD $0x0e49; BYTE $0x0e // vpinsrb $14, $14(%rcx), %xmm0, %xmm9 - -LBB1_16: - LONG $0x203163c4; WORD $0x0d51; BYTE $0x0d // vpinsrb $13, $13(%rcx), %xmm9, %xmm10 - -LBB1_17: - LONG $0x202963c4; WORD $0x0c59; BYTE $0x0c // vpinsrb $12, $12(%rcx), %xmm10, %xmm11 - -LBB1_18: - LONG $0x202163c4; WORD $0x0b61; BYTE $0x0b // vpinsrb $11, $11(%rcx), %xmm11, %xmm12 - -LBB1_19: - LONG $0x201963c4; WORD $0x0a69; BYTE $0x0a // vpinsrb $10, $10(%rcx), %xmm12, %xmm13 - -LBB1_20: - LONG $0x201163c4; WORD $0x0971; BYTE $0x09 // vpinsrb $9, $9(%rcx), %xmm13, %xmm14 - -LBB1_21: - LONG $0x2009e3c4; WORD $0x0879; BYTE $0x08 // vpinsrb $8, $8(%rcx), %xmm14, %xmm7 - -LBB1_22: - LONG $0x2041e3c4; WORD $0x0741; BYTE $0x07 // vpinsrb $7, $7(%rcx), %xmm7, %xmm0 - -LBB1_23: - LONG $0x2079e3c4; WORD $0x0649; BYTE $0x06 // vpinsrb $6, $6(%rcx), %xmm0, %xmm1 - -LBB1_24: - LONG $0x2071e3c4; WORD $0x0551; BYTE $0x05 // vpinsrb $5, $5(%rcx), %xmm1, %xmm2 - -LBB1_25: - LONG $0x2069e3c4; WORD $0x0459; BYTE $0x04 // vpinsrb $4, $4(%rcx), %xmm2, %xmm3 - -LBB1_26: - LONG $0x2061e3c4; WORD $0x0361; BYTE $0x03 // vpinsrb $3, $3(%rcx), %xmm3, %xmm4 - -LBB1_27: - LONG $0x2059e3c4; WORD $0x0269; BYTE $0x02 // vpinsrb $2, $2(%rcx), %xmm4, %xmm5 - -LBB1_28: - LONG $0x2051e3c4; WORD $0x0171; BYTE $0x01 // vpinsrb $1, $1(%rcx), %xmm5, %xmm6 - -LBB1_29: - LONG $0x2049e3c4; WORD $0x0001 // vpinsrb $0, (%rcx), %xmm6, %xmm0 - -LBB1_30: - QUAD $0xfffffec30d6ffac5 // vmovdqu $-317(%rip), %xmm1 /* LCPI1_3(%rip) */ - QUAD $0xfffffecb1574f9c5 // vpcmpeqb $-309(%rip), %xmm0, %xmm2 /* LCPI1_4(%rip) */ - QUAD $0xfffffed31d74f9c5 // vpcmpeqb $-301(%rip), %xmm0, %xmm3 /* LCPI1_5(%rip) */ - LONG $0xc864f1c5 // vpcmpgtb %xmm0, %xmm1, %xmm1 - LONG $0xd2ebe1c5 // vpor %xmm2, %xmm3, %xmm2 - LONG $0x6479c1c4; BYTE $0xc0 // vpcmpgtb %xmm8, %xmm0, %xmm0 - LONG $0xc0dbf1c5 // vpand %xmm0, %xmm1, %xmm0 - LONG $0xc0ebe9c5 // vpor %xmm0, %xmm2, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - ORL $-65536, AX - BSFL AX, AX - -LBB1_31: - ADDQ SI, AX - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - RET - -LBB1_1: - XORL AX, AX - ADDQ SI, AX - BYTE $0x5d // popq %rbp - RET - -LBB1_3: - CMPQ DX, $32 - JB LBB1_9 - XORL AX, AX - QUAD $0xfffffe13056ffec5 // vmovdqu $-493(%rip), %ymm0 /* LCPI1_0(%rip) */ - QUAD $0xfffffe2b0d6ffec5 // vmovdqu $-469(%rip), %ymm1 /* LCPI1_1(%rip) */ - QUAD $0xfffffe43156ffec5 // vmovdqu $-445(%rip), %ymm2 /* LCPI1_2(%rip) */ - LONG $0xdb76e5c5 // vpcmpeqd %ymm3, %ymm3, %ymm3 - MOVQ $-4294967296, R8 - -LBB1_5: - LONG $0x216ffec5 // vmovdqu (%rcx), %ymm4 - LONG $0xec64fdc5 // vpcmpgtb %ymm4, %ymm0, %ymm5 - LONG $0xf174ddc5 // vpcmpeqb %ymm1, %ymm4, %ymm6 - LONG $0xfa74ddc5 // vpcmpeqb %ymm2, %ymm4, %ymm7 - LONG $0xf6ebc5c5 // vpor %ymm6, %ymm7, %ymm6 - LONG $0xe364ddc5 // vpcmpgtb %ymm3, %ymm4, %ymm4 - LONG $0xe4dbd5c5 // vpand %ymm4, %ymm5, %ymm4 - LONG $0xe4ebcdc5 // vpor %ymm4, %ymm6, %ymm4 - LONG $0xfcd7fdc5 // vpmovmskb %ymm4, %edi - ORQ R8, DI - BSFQ DI, DI - ADDQ DI, AX - CMPQ DI, $32 - JB LBB1_31 - ADDQ $32, CX - ADDQ $-32, DX - CMPQ DX, $31 - JA LBB1_5 - WORD $0xf8c5; BYTE $0x77 // vzeroupper - CMPQ DX, $16 - JAE LBB1_10 - JMP LBB1_8 - -LBB1_9: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - XORL AX, AX - -LBB1_10: - QUAD $0xfffffdfb056ffac5 // vmovdqu $-517(%rip), %xmm0 /* LCPI1_3(%rip) */ - QUAD $0xfffffe030d6ffac5 // vmovdqu $-509(%rip), %xmm1 /* LCPI1_4(%rip) */ - QUAD $0xfffffe0b156ffac5 // vmovdqu $-501(%rip), %xmm2 /* LCPI1_5(%rip) */ - LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 - -LBB1_11: - LONG $0x216ffac5 // vmovdqu (%rcx), %xmm4 - LONG $0xec64f9c5 // vpcmpgtb %xmm4, %xmm0, %xmm5 - LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 - LONG $0xfa74d9c5 // vpcmpeqb %xmm2, %xmm4, %xmm7 - LONG $0xf6ebc1c5 // vpor %xmm6, %xmm7, %xmm6 - LONG $0xe364d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm4 - LONG $0xe4dbd1c5 // vpand %xmm4, %xmm5, %xmm4 - LONG $0xe4ebc9c5 // vpor %xmm4, %xmm6, %xmm4 - LONG $0xfcd7f9c5 // vpmovmskb %xmm4, %edi - ORL $-65536, DI - BSFL DI, DI - ADDQ DI, AX - CMPL DI, $16 - JB LBB1_31 - ADDQ $16, CX - ADDQ $-16, DX - CMPQ DX, $15 - JA LBB1_11 - -LBB1_8: - LONG $0x446ffac5; WORD $0xf011 // vmovdqu $-16(%rcx,%rdx), %xmm0 - QUAD $0xfffffd920d6ffac5 // vmovdqu $-622(%rip), %xmm1 /* LCPI1_3(%rip) */ - LONG $0xc864f1c5 // vpcmpgtb %xmm0, %xmm1, %xmm1 - QUAD $0xfffffd961574f9c5 // vpcmpeqb $-618(%rip), %xmm0, %xmm2 /* LCPI1_4(%rip) */ - QUAD $0xfffffd9e1d74f9c5 // vpcmpeqb $-610(%rip), %xmm0, %xmm3 /* LCPI1_5(%rip) */ - LONG $0xd2ebe1c5 // vpor %xmm2, %xmm3, %xmm2 - LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 - LONG $0xc364f9c5 // vpcmpgtb %xmm3, %xmm0, %xmm0 - LONG $0xc0dbf1c5 // vpand %xmm0, %xmm1, %xmm0 - LONG $0xc0ebe9c5 // vpor %xmm0, %xmm2, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - ORL $-65536, CX - BSFL CX, CX - ADDQ DX, AX - LEAQ -16(CX)(AX*1), AX - ADDQ SI, AX - BYTE $0x5d // popq %rbp - RET - -// .set L1_0_set_29, LBB1_29-LJTI1_0 -// .set L1_0_set_28, LBB1_28-LJTI1_0 -// .set L1_0_set_27, LBB1_27-LJTI1_0 -// .set L1_0_set_26, LBB1_26-LJTI1_0 -// .set L1_0_set_25, LBB1_25-LJTI1_0 -// .set L1_0_set_24, LBB1_24-LJTI1_0 -// .set L1_0_set_23, LBB1_23-LJTI1_0 -// .set L1_0_set_22, LBB1_22-LJTI1_0 -// .set L1_0_set_21, LBB1_21-LJTI1_0 -// .set L1_0_set_20, LBB1_20-LJTI1_0 -// .set L1_0_set_19, LBB1_19-LJTI1_0 -// .set L1_0_set_18, LBB1_18-LJTI1_0 -// .set L1_0_set_17, LBB1_17-LJTI1_0 -// .set L1_0_set_16, LBB1_16-LJTI1_0 -// .set L1_0_set_15, LBB1_15-LJTI1_0 -LJTI1_0: - LONG $0xfffffe7f // .long L1_0_set_29 - LONG $0xfffffe78 // .long L1_0_set_28 - LONG $0xfffffe71 // .long L1_0_set_27 - LONG $0xfffffe6a // .long L1_0_set_26 - LONG $0xfffffe63 // .long L1_0_set_25 - LONG $0xfffffe5c // .long L1_0_set_24 - LONG $0xfffffe55 // .long L1_0_set_23 - LONG $0xfffffe4e // .long L1_0_set_22 - LONG $0xfffffe47 // .long L1_0_set_21 - LONG $0xfffffe40 // .long L1_0_set_20 - LONG $0xfffffe39 // .long L1_0_set_19 - LONG $0xfffffe32 // .long L1_0_set_18 - LONG $0xfffffe2b // .long L1_0_set_17 - LONG $0xfffffe24 // .long L1_0_set_16 - LONG $0xfffffe15 // .long L1_0_set_15 - -LCPI2_0: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - -LCPI2_1: - QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' - QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' - -LCPI2_2: - QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' -LCPI2_3: +LCPI1_7: QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' - QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' - -LCPI2_4: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - -LCPI2_5: - QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' - -LCPI2_6: - QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' - -LCPI2_7: - QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' - -LCPI2_8: - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0x00 // .space 1, '\x00' - BYTE $0xff // .byte 255 _lspace: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - SUBQ DX, SI - JE LBB2_1 - ADDQ DX, DI - CMPQ SI, $16 - JAE LBB2_3 - LONG $0xc076f9c5 // vpcmpeqd %xmm0, %xmm0, %xmm0 - DECQ SI - CMPQ SI, $14 - JA LBB2_30 - LONG $0xe2058d48; WORD $0x0001; BYTE $0x00 // leaq $482(%rip), %rax /* LJTI2_0(%rip) */ - MOVLQSX 0(AX)(SI*4), CX - ADDQ AX, CX - JMP CX + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + LEAQ 0(DI)(DX*1), AX + SUBQ DX, SI + JE LBB1_7 + MOVL AX, CX + ANDL $31, CX + TESTQ CX, CX + JE LBB1_7 + LEAQ -1(SI), R9 + XORL DX, DX + MOVQ $4294977024, R8 -LBB2_15: - QUAD $0xffffffad056ffac5 // vmovdqu $-83(%rip), %xmm0 /* LCPI2_8(%rip) */ - LONG $0x2079e3c4; WORD $0x0e47; BYTE $0x0e // vpinsrb $14, $14(%rdi), %xmm0, %xmm0 +LBB1_3: + MOVBLSX 0(AX)(DX*1), CX + CMPL CX, $32 + JA LBB1_5 + BTQ CX, R8 + JAE LBB1_5 + LEAQ 1(DX), R10 + CMPQ R9, DX + JE LBB1_6 + LEAQ 1(AX)(DX*1), CX + ANDL $31, CX + MOVQ R10, DX + TESTQ CX, CX + JNE LBB1_3 -LBB2_16: - LONG $0x2079e3c4; WORD $0x0d47; BYTE $0x0d // vpinsrb $13, $13(%rdi), %xmm0, %xmm0 +LBB1_6: + ADDQ R10, AX + SUBQ R10, SI -LBB2_17: - LONG $0x2079e3c4; WORD $0x0c47; BYTE $0x0c // vpinsrb $12, $12(%rdi), %xmm0, %xmm0 - -LBB2_18: - LONG $0x2079e3c4; WORD $0x0b47; BYTE $0x0b // vpinsrb $11, $11(%rdi), %xmm0, %xmm0 - -LBB2_19: - LONG $0x2079e3c4; WORD $0x0a47; BYTE $0x0a // vpinsrb $10, $10(%rdi), %xmm0, %xmm0 - -LBB2_20: - LONG $0x2079e3c4; WORD $0x0947; BYTE $0x09 // vpinsrb $9, $9(%rdi), %xmm0, %xmm0 - -LBB2_21: - LONG $0x2079e3c4; WORD $0x0847; BYTE $0x08 // vpinsrb $8, $8(%rdi), %xmm0, %xmm0 - -LBB2_22: - LONG $0x2079e3c4; WORD $0x0747; BYTE $0x07 // vpinsrb $7, $7(%rdi), %xmm0, %xmm0 - -LBB2_23: - LONG $0x2079e3c4; WORD $0x0647; BYTE $0x06 // vpinsrb $6, $6(%rdi), %xmm0, %xmm0 - -LBB2_24: - LONG $0x2079e3c4; WORD $0x0547; BYTE $0x05 // vpinsrb $5, $5(%rdi), %xmm0, %xmm0 - -LBB2_25: - LONG $0x2079e3c4; WORD $0x0447; BYTE $0x04 // vpinsrb $4, $4(%rdi), %xmm0, %xmm0 - -LBB2_26: - LONG $0x2079e3c4; WORD $0x0347; BYTE $0x03 // vpinsrb $3, $3(%rdi), %xmm0, %xmm0 - -LBB2_27: - LONG $0x2079e3c4; WORD $0x0247; BYTE $0x02 // vpinsrb $2, $2(%rdi), %xmm0, %xmm0 - -LBB2_28: - LONG $0x2079e3c4; WORD $0x0147; BYTE $0x01 // vpinsrb $1, $1(%rdi), %xmm0, %xmm0 - -LBB2_29: - LONG $0x2079e3c4; WORD $0x0007 // vpinsrb $0, (%rdi), %xmm0, %xmm0 - -LBB2_30: - QUAD $0xfffffefd0d74f9c5 // vpcmpeqb $-259(%rip), %xmm0, %xmm1 /* LCPI2_4(%rip) */ - QUAD $0xffffff051574f9c5 // vpcmpeqb $-251(%rip), %xmm0, %xmm2 /* LCPI2_5(%rip) */ - QUAD $0xffffff0d1d74f9c5 // vpcmpeqb $-243(%rip), %xmm0, %xmm3 /* LCPI2_6(%rip) */ - LONG $0xcaebf1c5 // vpor %xmm2, %xmm1, %xmm1 - QUAD $0xffffff110574f9c5 // vpcmpeqb $-239(%rip), %xmm0, %xmm0 /* LCPI2_7(%rip) */ - LONG $0xc3ebf9c5 // vpor %xmm3, %xmm0, %xmm0 - LONG $0xc1ebf9c5 // vpor %xmm1, %xmm0, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - NOTL AX - BSFL AX, AX - -LBB2_31: - ADDQ DX, AX - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - RET - -LBB2_1: - XORL AX, AX - ADDQ DX, AX - BYTE $0x5d // popq %rbp - RET - -LBB2_3: +LBB1_7: CMPQ SI, $32 - JB LBB2_9 - XORL AX, AX - QUAD $0xfffffe31056ffec5 // vmovdqu $-463(%rip), %ymm0 /* LCPI2_0(%rip) */ - QUAD $0xfffffe490d6ffec5 // vmovdqu $-439(%rip), %ymm1 /* LCPI2_1(%rip) */ - QUAD $0xfffffe61156ffec5 // vmovdqu $-415(%rip), %ymm2 /* LCPI2_2(%rip) */ - QUAD $0xfffffe791d6ffec5 // vmovdqu $-391(%rip), %ymm3 /* LCPI2_3(%rip) */ + JB LBB1_14 + QUAD $0xfffffed5056ffec5 // vmovdqu $-299(%rip), %ymm0 /* LCPI1_0(%rip) */ + QUAD $0xfffffeed0d6ffec5 // vmovdqu $-275(%rip), %ymm1 /* LCPI1_1(%rip) */ + QUAD $0xffffff05156ffec5 // vmovdqu $-251(%rip), %ymm2 /* LCPI1_2(%rip) */ + QUAD $0xffffff1d1d6ffec5 // vmovdqu $-227(%rip), %ymm3 /* LCPI1_3(%rip) */ -LBB2_5: - LONG $0x276ffec5 // vmovdqu (%rdi), %ymm4 - LONG $0xe874ddc5 // vpcmpeqb %ymm0, %ymm4, %ymm5 - LONG $0xf174ddc5 // vpcmpeqb %ymm1, %ymm4, %ymm6 - LONG $0xeeebd5c5 // vpor %ymm6, %ymm5, %ymm5 - LONG $0xf274ddc5 // vpcmpeqb %ymm2, %ymm4, %ymm6 - LONG $0xe374ddc5 // vpcmpeqb %ymm3, %ymm4, %ymm4 - LONG $0xe6ebddc5 // vpor %ymm6, %ymm4, %ymm4 - LONG $0xe5ebddc5 // vpor %ymm5, %ymm4, %ymm4 - LONG $0xccd7fdc5 // vpmovmskb %ymm4, %ecx - NOTQ CX - BSFQ CX, CX - ADDQ CX, AX - CMPQ CX, $32 - JB LBB2_31 - ADDQ $32, DI +LBB1_9: + LONG $0x206ffdc5 // vmovdqa (%rax), %ymm4 + LONG $0xe874ddc5 // vpcmpeqb %ymm0, %ymm4, %ymm5 + LONG $0xf174ddc5 // vpcmpeqb %ymm1, %ymm4, %ymm6 + LONG $0xeeebd5c5 // vpor %ymm6, %ymm5, %ymm5 + LONG $0xf274ddc5 // vpcmpeqb %ymm2, %ymm4, %ymm6 + LONG $0xe374ddc5 // vpcmpeqb %ymm3, %ymm4, %ymm4 + LONG $0xe6ebddc5 // vpor %ymm6, %ymm4, %ymm4 + LONG $0xe5ebddc5 // vpor %ymm5, %ymm4, %ymm4 + LONG $0xccd7fdc5 // vpmovmskb %ymm4, %ecx + CMPL CX, $-1 + JNE LBB1_10 + ADDQ $32, AX ADDQ $-32, SI CMPQ SI, $31 - JA LBB2_5 + JA LBB1_9 + +LBB1_14: WORD $0xf8c5; BYTE $0x77 // vzeroupper CMPQ SI, $16 - JAE LBB2_10 - JMP LBB2_8 + JB LBB1_19 + QUAD $0xfffffef1056ffac5 // vmovdqu $-271(%rip), %xmm0 /* LCPI1_4(%rip) */ + QUAD $0xfffffef90d6ffac5 // vmovdqu $-263(%rip), %xmm1 /* LCPI1_5(%rip) */ + QUAD $0xffffff01156ffac5 // vmovdqu $-255(%rip), %xmm2 /* LCPI1_6(%rip) */ + QUAD $0xffffff091d6ffac5 // vmovdqu $-247(%rip), %xmm3 /* LCPI1_7(%rip) */ -LBB2_9: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - XORL AX, AX - -LBB2_10: - QUAD $0xfffffe3f056ffac5 // vmovdqu $-449(%rip), %xmm0 /* LCPI2_4(%rip) */ - QUAD $0xfffffe470d6ffac5 // vmovdqu $-441(%rip), %xmm1 /* LCPI2_5(%rip) */ - QUAD $0xfffffe4f156ffac5 // vmovdqu $-433(%rip), %xmm2 /* LCPI2_6(%rip) */ - QUAD $0xfffffe571d6ffac5 // vmovdqu $-425(%rip), %xmm3 /* LCPI2_7(%rip) */ - -LBB2_11: - LONG $0x276ffac5 // vmovdqu (%rdi), %xmm4 +LBB1_16: + LONG $0x206ff9c5 // vmovdqa (%rax), %xmm4 LONG $0xe874d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm5 LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 @@ -538,468 +187,77 @@ LBB2_11: LONG $0xe6ebd9c5 // vpor %xmm6, %xmm4, %xmm4 LONG $0xe5ebd9c5 // vpor %xmm5, %xmm4, %xmm4 LONG $0xccd7f9c5 // vpmovmskb %xmm4, %ecx - NOTL CX - BSFL CX, CX - ADDQ CX, AX - CMPL CX, $16 - JB LBB2_31 - ADDQ $16, DI + CMPW CX, $-1 + JNE LBB1_17 + ADDQ $16, AX ADDQ $-16, SI CMPQ SI, $15 - JA LBB2_11 + JA LBB1_16 -LBB2_8: - LONG $0x446ffac5; WORD $0xf037 // vmovdqu $-16(%rdi,%rsi), %xmm0 - QUAD $0xfffffdd60d74f9c5 // vpcmpeqb $-554(%rip), %xmm0, %xmm1 /* LCPI2_4(%rip) */ - QUAD $0xfffffdde1574f9c5 // vpcmpeqb $-546(%rip), %xmm0, %xmm2 /* LCPI2_5(%rip) */ - QUAD $0xfffffde61d74f9c5 // vpcmpeqb $-538(%rip), %xmm0, %xmm3 /* LCPI2_6(%rip) */ - QUAD $0xfffffdee0574f9c5 // vpcmpeqb $-530(%rip), %xmm0, %xmm0 /* LCPI2_7(%rip) */ - LONG $0xcaebf1c5 // vpor %xmm2, %xmm1, %xmm1 - LONG $0xc3ebf9c5 // vpor %xmm3, %xmm0, %xmm0 - LONG $0xc1ebf9c5 // vpor %xmm1, %xmm0, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - NOTL CX - BSFL CX, CX - ADDQ SI, AX - LEAQ -16(CX)(AX*1), AX +LBB1_19: + TESTQ SI, SI + JE LBB1_26 + LEAQ 0(AX)(SI*1), R8 + INCQ AX + MOVQ $4294977024, DX + +LBB1_21: + MOVBLSX -1(AX), CX + CMPL CX, $32 + JA LBB1_23 + BTQ CX, DX + JAE LBB1_23 + DECQ SI + INCQ AX + TESTQ SI, SI + JNE LBB1_21 + MOVQ R8, AX + JMP LBB1_26 + +LBB1_10: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + SUBQ DI, AX + NOTL CX + MOVLQSX CX, CX + BSFQ CX, CX + ADDQ CX, AX + BYTE $0x5d // popq %rbp + RET + +LBB1_5: ADDQ DX, AX - BYTE $0x5d // popq %rbp - RET -// .set L2_0_set_29, LBB2_29-LJTI2_0 -// .set L2_0_set_28, LBB2_28-LJTI2_0 -// .set L2_0_set_27, LBB2_27-LJTI2_0 -// .set L2_0_set_26, LBB2_26-LJTI2_0 -// .set L2_0_set_25, LBB2_25-LJTI2_0 -// .set L2_0_set_24, LBB2_24-LJTI2_0 -// .set L2_0_set_23, LBB2_23-LJTI2_0 -// .set L2_0_set_22, LBB2_22-LJTI2_0 -// .set L2_0_set_21, LBB2_21-LJTI2_0 -// .set L2_0_set_20, LBB2_20-LJTI2_0 -// .set L2_0_set_19, LBB2_19-LJTI2_0 -// .set L2_0_set_18, LBB2_18-LJTI2_0 -// .set L2_0_set_17, LBB2_17-LJTI2_0 -// .set L2_0_set_16, LBB2_16-LJTI2_0 -// .set L2_0_set_15, LBB2_15-LJTI2_0 -LJTI2_0: - LONG $0xfffffe91 // .long L2_0_set_29 - LONG $0xfffffe8a // .long L2_0_set_28 - LONG $0xfffffe83 // .long L2_0_set_27 - LONG $0xfffffe7c // .long L2_0_set_26 - LONG $0xfffffe75 // .long L2_0_set_25 - LONG $0xfffffe6e // .long L2_0_set_24 - LONG $0xfffffe67 // .long L2_0_set_23 - LONG $0xfffffe60 // .long L2_0_set_22 - LONG $0xfffffe59 // .long L2_0_set_21 - LONG $0xfffffe52 // .long L2_0_set_20 - LONG $0xfffffe4b // .long L2_0_set_19 - LONG $0xfffffe44 // .long L2_0_set_18 - LONG $0xfffffe3d // .long L2_0_set_17 - LONG $0xfffffe36 // .long L2_0_set_16 - LONG $0xfffffe27 // .long L2_0_set_15 - -_strchr1: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - MOVQ 8(DI), R9 - SUBQ SI, R9 - MOVQ 0(DI), R11 - ADDQ SI, R11 - LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - LONG $0x787de2c4; BYTE $0xc0 // vpbroadcastb %xmm0, %ymm0 - MOVQ R11, CX - MOVQ R9, AX - MOVQ R11, DX - ANDQ $31, CX - JE LBB3_5 - MOVQ R11, AX - ANDQ $-32, AX - LONG $0x0874fdc5 // vpcmpeqb (%rax), %ymm0, %ymm1 - LONG $0xc1d7fdc5 // vpmovmskb %ymm1, %eax - WORD $0x9848 // cltq - SARQ CX, AX - TESTQ AX, AX - JE LBB3_4 - MOVQ $4294967296, CX - ORQ CX, AX - BSFQ AX, CX - CMPQ CX, R9 - MOVQ $-1, AX - LONG $0xc14c0f48 // cmovlq %rcx, %rax - JMP LBB3_3 - -LBB3_4: - MOVL $32, DI - SUBQ CX, DI - LEAQ 0(R11)(DI*1), DX - MOVQ R9, AX +LBB1_26: SUBQ DI, AX - -LBB3_5: - CMPQ AX, $128 - JL LBB3_6 - -LBB3_12: - LONG $0x2274fdc5 // vpcmpeqb (%rdx), %ymm0, %ymm4 - LONG $0x5a74fdc5; BYTE $0x20 // vpcmpeqb $32(%rdx), %ymm0, %ymm3 - LONG $0x5274fdc5; BYTE $0x40 // vpcmpeqb $64(%rdx), %ymm0, %ymm2 - LONG $0x4a74fdc5; BYTE $0x60 // vpcmpeqb $96(%rdx), %ymm0, %ymm1 - LONG $0xecebe5c5 // vpor %ymm4, %ymm3, %ymm5 - LONG $0xf1ebedc5 // vpor %ymm1, %ymm2, %ymm6 - LONG $0xeeebd5c5 // vpor %ymm6, %ymm5, %ymm5 - LONG $0x177de2c4; BYTE $0xed // vptest %ymm5, %ymm5 - JNE LBB3_14 - SUBQ $-128, DX - LEAQ -128(AX), CX - CMPQ AX, $255 - MOVQ CX, AX - JG LBB3_12 - MOVQ R9, AX - TESTQ CX, CX - JNS LBB3_8 - JMP LBB3_3 - -LBB3_6: - MOVQ AX, CX - MOVQ R9, AX - TESTQ CX, CX - JS LBB3_3 - -LBB3_8: - LONG $0x0a74fdc5 // vpcmpeqb (%rdx), %ymm0, %ymm1 - LONG $0xd1d77dc5 // vpmovmskb %ymm1, %r10d - TESTL R10, R10 - JE LBB3_21 - -LBB3_9: - MOVQ DX, R8 - -LBB3_10: - MOVL R10, AX - MOVQ $4294967296, DX - ORQ AX, DX - BSFQ DX, DX - MOVQ $-1, AX - CMPQ DX, CX - JGE LBB3_3 - SUBQ R11, R8 - ADDQ DX, R8 - MOVQ R8, AX - JMP LBB3_3 - -LBB3_14: - LONG $0xc4d7fdc5 // vpmovmskb %ymm4, %eax - TESTL AX, AX - JE LBB3_16 - MOVL AX, AX - SUBQ R11, DX - MOVQ $4294967296, CX - ORQ AX, CX - BSFQ CX, AX - ADDQ DX, AX - JMP LBB3_3 - -LBB3_21: - MOVQ R9, AX - CMPQ CX, $31 - JLE LBB3_3 - LEAQ 32(DX), R8 - LONG $0x747dc1c4; BYTE $0x08 // vpcmpeqb (%r8), %ymm0, %ymm1 - LONG $0xd1d77dc5 // vpmovmskb %ymm1, %r10d - TESTL R10, R10 - JE LBB3_24 - ADDQ $-32, CX - JMP LBB3_10 - -LBB3_16: - LONG $0xc3d7fdc5 // vpmovmskb %ymm3, %eax - TESTL AX, AX - JE LBB3_18 - MOVL AX, AX - MOVQ $4294967296, CX - ORQ AX, CX - BSFQ CX, AX - SUBQ R11, DX - LEAQ 32(DX)(AX*1), AX - JMP LBB3_3 - -LBB3_18: - MOVQ $4294967296, AX - LONG $0xcad7fdc5 // vpmovmskb %ymm2, %ecx - SUBQ R11, DX - TESTL CX, CX - JE LBB3_20 - MOVL CX, CX - ORQ AX, CX - BSFQ CX, AX - LEAQ 64(DX)(AX*1), AX - JMP LBB3_3 - -LBB3_24: - MOVQ R9, AX - CMPQ CX, $64 - JL LBB3_3 - LEAQ 64(DX), R8 - LONG $0x747dc1c4; BYTE $0x08 // vpcmpeqb (%r8), %ymm0, %ymm1 - LONG $0xd1d77dc5 // vpmovmskb %ymm1, %r10d - TESTL R10, R10 - JE LBB3_27 - ADDQ $-64, CX - JMP LBB3_10 - -LBB3_20: - LONG $0xc9d7fdc5 // vpmovmskb %ymm1, %ecx - ORQ AX, CX - BSFQ CX, AX - LEAQ 96(DX)(AX*1), AX - -LBB3_3: - ADDQ AX, SI - CMPQ AX, R9 - MOVQ $-1, AX - LONG $0xc6420f48 // cmovbq %rsi, %rax - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper + BYTE $0x5d // popq %rbp RET -LBB3_27: - MOVQ R9, AX - CMPQ CX, $96 - JL LBB3_3 - ADDQ $96, DX - LONG $0x0274fdc5 // vpcmpeqb (%rdx), %ymm0, %ymm0 - LONG $0xd0d77dc5 // vpmovmskb %ymm0, %r10d - MOVQ R9, AX - TESTL R10, R10 - JE LBB3_3 - ADDQ $-96, CX - JMP LBB3_9 - -LCPI4_0: - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0xff // .byte 255 - BYTE $0x00 // .space 1, '\x00' - BYTE $0xff // .byte 255 - -_strchr2: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - MOVQ 8(DI), R8 - SUBQ SI, R8 - JE LBB4_1 - MOVQ 0(DI), R9 - ADDQ SI, R9 - CMPQ R8, $16 - JAE LBB4_3 - LONG $0xc076f9c5 // vpcmpeqd %xmm0, %xmm0, %xmm0 - LEAQ -1(R8), AX - CMPQ AX, $14 - JA LBB4_25 - LONG $0xb83d8d48; WORD $0x0001; BYTE $0x00 // leaq $440(%rip), %rdi /* LJTI4_0(%rip) */ - MOVLQSX 0(DI)(AX*4), AX - ADDQ DI, AX - JMP AX - -LBB4_10: - QUAD $0xffffffa5056ffac5 // vmovdqu $-91(%rip), %xmm0 /* LCPI4_0(%rip) */ - LONG $0x2079c3c4; WORD $0x0e41; BYTE $0x0e // vpinsrb $14, $14(%r9), %xmm0, %xmm0 - -LBB4_11: - LONG $0x2079c3c4; WORD $0x0d41; BYTE $0x0d // vpinsrb $13, $13(%r9), %xmm0, %xmm0 - -LBB4_12: - LONG $0x2079c3c4; WORD $0x0c41; BYTE $0x0c // vpinsrb $12, $12(%r9), %xmm0, %xmm0 - -LBB4_13: - LONG $0x2079c3c4; WORD $0x0b41; BYTE $0x0b // vpinsrb $11, $11(%r9), %xmm0, %xmm0 - -LBB4_14: - LONG $0x2079c3c4; WORD $0x0a41; BYTE $0x0a // vpinsrb $10, $10(%r9), %xmm0, %xmm0 - -LBB4_15: - LONG $0x2079c3c4; WORD $0x0941; BYTE $0x09 // vpinsrb $9, $9(%r9), %xmm0, %xmm0 - -LBB4_16: - LONG $0x2079c3c4; WORD $0x0841; BYTE $0x08 // vpinsrb $8, $8(%r9), %xmm0, %xmm0 - -LBB4_17: - LONG $0x2079c3c4; WORD $0x0741; BYTE $0x07 // vpinsrb $7, $7(%r9), %xmm0, %xmm0 - -LBB4_18: - LONG $0x2079c3c4; WORD $0x0641; BYTE $0x06 // vpinsrb $6, $6(%r9), %xmm0, %xmm0 - -LBB4_19: - LONG $0x2079c3c4; WORD $0x0541; BYTE $0x05 // vpinsrb $5, $5(%r9), %xmm0, %xmm0 - -LBB4_20: - LONG $0x2079c3c4; WORD $0x0441; BYTE $0x04 // vpinsrb $4, $4(%r9), %xmm0, %xmm0 - -LBB4_21: - LONG $0x2079c3c4; WORD $0x0341; BYTE $0x03 // vpinsrb $3, $3(%r9), %xmm0, %xmm0 - -LBB4_22: - LONG $0x2079c3c4; WORD $0x0241; BYTE $0x02 // vpinsrb $2, $2(%r9), %xmm0, %xmm0 - -LBB4_23: - LONG $0x2079c3c4; WORD $0x0141; BYTE $0x01 // vpinsrb $1, $1(%r9), %xmm0, %xmm0 - -LBB4_24: - LONG $0x2079c3c4; WORD $0x0001 // vpinsrb $0, (%r9), %xmm0, %xmm0 - -LBB4_25: - LONG $0xca6ef9c5 // vmovd %edx, %xmm1 - LONG $0x7879e2c4; BYTE $0xc9 // vpbroadcastb %xmm1, %xmm1 - LONG $0xc874f1c5 // vpcmpeqb %xmm0, %xmm1, %xmm1 - LONG $0xd16ef9c5 // vmovd %ecx, %xmm2 - LONG $0x7879e2c4; BYTE $0xd2 // vpbroadcastb %xmm2, %xmm2 - LONG $0xc074e9c5 // vpcmpeqb %xmm0, %xmm2, %xmm0 - LONG $0xc1ebf9c5 // vpor %xmm1, %xmm0, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - ORL $-65536, AX - BSFL AX, R11 - JMP LBB4_32 - -LBB4_1: - XORL R11, R11 - JMP LBB4_32 - -LBB4_3: - CMPQ R8, $31 - JBE LBB4_4 - LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - LONG $0x787de2c4; BYTE $0xc0 // vpbroadcastb %xmm0, %ymm0 - LONG $0xc96ef9c5 // vmovd %ecx, %xmm1 - LONG $0x787de2c4; BYTE $0xc9 // vpbroadcastb %xmm1, %ymm1 - XORL R11, R11 - MOVQ $-4294967296, R10 - MOVQ R8, DI - -LBB4_27: - LONG $0x6f7ec1c4; BYTE $0x11 // vmovdqu (%r9), %ymm2 - LONG $0xda74fdc5 // vpcmpeqb %ymm2, %ymm0, %ymm3 - LONG $0xd274f5c5 // vpcmpeqb %ymm2, %ymm1, %ymm2 - LONG $0xd3ebedc5 // vpor %ymm3, %ymm2, %ymm2 - LONG $0xc2d7fdc5 // vpmovmskb %ymm2, %eax - ORQ R10, AX - BSFQ AX, AX - ADDQ AX, R11 - CMPQ AX, $32 - JB LBB4_32 - ADDQ $32, R9 - ADDQ $-32, DI - CMPQ DI, $31 - JA LBB4_27 - WORD $0xf8c5; BYTE $0x77 // vzeroupper - CMPQ DI, $15 - JA LBB4_5 - LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - LONG $0x7879e2c4; BYTE $0xc0 // vpbroadcastb %xmm0, %xmm0 - LONG $0xc96ef9c5 // vmovd %ecx, %xmm1 - LONG $0x7879e2c4; BYTE $0xc9 // vpbroadcastb %xmm1, %xmm1 - JMP LBB4_31 - -LBB4_4: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - XORL R11, R11 - MOVQ R8, DI - -LBB4_5: - LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - LONG $0x7879e2c4; BYTE $0xc0 // vpbroadcastb %xmm0, %xmm0 - LONG $0xc96ef9c5 // vmovd %ecx, %xmm1 - LONG $0x7879e2c4; BYTE $0xc9 // vpbroadcastb %xmm1, %xmm1 - -LBB4_6: - LONG $0x6f7ac1c4; BYTE $0x11 // vmovdqu (%r9), %xmm2 - LONG $0xda74f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm3 - LONG $0xd274f1c5 // vpcmpeqb %xmm2, %xmm1, %xmm2 - LONG $0xd3ebe9c5 // vpor %xmm3, %xmm2, %xmm2 - LONG $0xc2d7f9c5 // vpmovmskb %xmm2, %eax - ORL $-65536, AX - BSFL AX, AX - ADDQ AX, R11 - CMPL AX, $16 - JB LBB4_32 - ADDQ $16, R9 - ADDQ $-16, DI - CMPQ DI, $15 - JA LBB4_6 - -LBB4_31: - LONG $0x6f7ac1c4; WORD $0x3954; BYTE $0xf0 // vmovdqu $-16(%r9,%rdi), %xmm2 - LONG $0xc274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm0 - LONG $0xca74f1c5 // vpcmpeqb %xmm2, %xmm1, %xmm1 - LONG $0xc0ebf1c5 // vpor %xmm0, %xmm1, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - ORL $-65536, AX - BSFL AX, AX - ADDQ DI, R11 - LEAQ -16(AX)(R11*1), R11 - -LBB4_32: - ADDQ R11, SI - CMPQ R11, R8 - MOVQ $-1, AX - LONG $0xc6420f48 // cmovbq %rsi, %rax - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper +LBB1_17: + MOVWLZX CX, CX + SUBQ DI, AX + NOTL CX + BSFL CX, CX + ADDQ CX, AX + BYTE $0x5d // popq %rbp RET -// .set L4_0_set_24, LBB4_24-LJTI4_0 -// .set L4_0_set_23, LBB4_23-LJTI4_0 -// .set L4_0_set_22, LBB4_22-LJTI4_0 -// .set L4_0_set_21, LBB4_21-LJTI4_0 -// .set L4_0_set_20, LBB4_20-LJTI4_0 -// .set L4_0_set_19, LBB4_19-LJTI4_0 -// .set L4_0_set_18, LBB4_18-LJTI4_0 -// .set L4_0_set_17, LBB4_17-LJTI4_0 -// .set L4_0_set_16, LBB4_16-LJTI4_0 -// .set L4_0_set_15, LBB4_15-LJTI4_0 -// .set L4_0_set_14, LBB4_14-LJTI4_0 -// .set L4_0_set_13, LBB4_13-LJTI4_0 -// .set L4_0_set_12, LBB4_12-LJTI4_0 -// .set L4_0_set_11, LBB4_11-LJTI4_0 -// .set L4_0_set_10, LBB4_10-LJTI4_0 -LJTI4_0: - LONG $0xfffffebb // .long L4_0_set_24 - LONG $0xfffffeb4 // .long L4_0_set_23 - LONG $0xfffffead // .long L4_0_set_22 - LONG $0xfffffea6 // .long L4_0_set_21 - LONG $0xfffffe9f // .long L4_0_set_20 - LONG $0xfffffe98 // .long L4_0_set_19 - LONG $0xfffffe91 // .long L4_0_set_18 - LONG $0xfffffe8a // .long L4_0_set_17 - LONG $0xfffffe83 // .long L4_0_set_16 - LONG $0xfffffe7c // .long L4_0_set_15 - LONG $0xfffffe75 // .long L4_0_set_14 - LONG $0xfffffe6e // .long L4_0_set_13 - LONG $0xfffffe67 // .long L4_0_set_12 - LONG $0xfffffe60 // .long L4_0_set_11 - LONG $0xfffffe51 // .long L4_0_set_10 +LBB1_23: + NOTQ DI + ADDQ DI, AX + BYTE $0x5d // popq %rbp + RET -LCPI5_0: +LCPI2_0: QUAD $0x8000000000000000 // .quad 0x8000000000000000 QUAD $0x8000000000000000 // .quad 0x8000000000000000 -LCPI5_1: +LCPI2_1: QUAD $0x3fd34413509f79fe // .quad 0x3fd34413509f79fe -LCPI5_2: +LCPI2_2: QUAD $0x4075b00000000000 // .quad 0x4075b00000000000 -LCPI5_3: +LCPI2_3: QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' @@ -1015,25 +273,25 @@ _f64toa: MOVQ DI, R15 LONG $0xc957f1c5 // vxorpd %xmm1, %xmm1, %xmm1 LONG $0xc12ef9c5 // vucomisd %xmm1, %xmm0 - JNE LBB5_2 - JP LBB5_2 + JNE LBB2_2 + JP LBB2_2 MOVB $48, 0(R15) MOVL $1, AX - JMP LBB5_89 + JMP LBB2_89 -LBB5_2: +LBB2_2: LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 - JBE LBB5_4 - QUAD $0xffffff840557f9c5 // vxorpd $-124(%rip), %xmm0, %xmm0 /* LCPI5_0(%rip) */ + JBE LBB2_4 + QUAD $0xffffff840557f9c5 // vxorpd $-124(%rip), %xmm0, %xmm0 /* LCPI2_0(%rip) */ MOVB $45, 0(R15) INCQ R15 MOVL $1, -44(BP) - JMP LBB5_5 + JMP LBB2_5 -LBB5_4: +LBB2_4: MOVL $0, -44(BP) -LBB5_5: +LBB2_5: LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx MOVQ $4503599627370496, DX LEAQ -1(DX), SI @@ -1068,8 +326,8 @@ LBB5_5: MOVL $-61, CX SUBL R12, CX LONG $0xc12aebc5 // vcvtsi2sd %ecx, %xmm2, %xmm0 - QUAD $0xfffffef90559fbc5 // vmulsd $-263(%rip), %xmm0, %xmm0 /* LCPI5_1(%rip) */ - QUAD $0xfffffef90558fbc5 // vaddsd $-263(%rip), %xmm0, %xmm0 /* LCPI5_2(%rip) */ + QUAD $0xfffffef90559fbc5 // vmulsd $-263(%rip), %xmm0, %xmm0 /* LCPI2_1(%rip) */ + QUAD $0xfffffef90558fbc5 // vaddsd $-263(%rip), %xmm0, %xmm0 /* LCPI2_2(%rip) */ LONG $0xc82cfbc5 // vcvttsd2si %xmm0, %ecx LONG $0xc8e6f9c5 // vcvttpd2dq %xmm0, %xmm1 LONG $0xc9e6fac5 // vcvtdq2pd %xmm1, %xmm1 @@ -1084,9 +342,9 @@ LBB5_5: INCL DX MOVL $348, CX MOVQ CX, -64(BP) - LONG $0x3d0d8d48; WORD $0x0035; BYTE $0x00 // leaq $13629(%rip), %rcx /* _TabPowE(%rip) */ - MOVBLSX 0(CX)(DX*2), SI - LONG $0xe00d8d48; WORD $0x0035; BYTE $0x00 // leaq $13792(%rip), %rcx /* _TabPowF(%rip) */ + LONG $0xe90d8d48; WORD $0x0040; BYTE $0x00 // leaq $16617(%rip), %rcx /* _TabPowE(%rip) */ + MOVWLSX 0(CX)(DX*2), SI + LONG $0x8c0d8d48; WORD $0x0041; BYTE $0x00 // leaq $16780(%rip), %rcx /* _TabPowF(%rip) */ MOVQ 0(CX)(DX*8), R8 BSRQ AX, CX XORL $63, CX @@ -1127,33 +385,33 @@ LBB5_5: DECQ DI MOVL $1, SI CMPQ R9, $10 - JB LBB5_14 + JB LBB2_14 MOVL $2, SI CMPQ R9, $100 - JB LBB5_14 + JB LBB2_14 MOVL $3, SI CMPQ R9, $1000 - JB LBB5_14 + JB LBB2_14 MOVL $4, SI CMPQ R9, $10000 - JB LBB5_14 + JB LBB2_14 MOVL $5, SI CMPQ R9, $100000 - JB LBB5_14 + JB LBB2_14 MOVL $6, SI CMPQ R9, $1000000 - JB LBB5_14 + JB LBB2_14 MOVL $7, SI CMPQ R9, $10000000 - JB LBB5_14 + JB LBB2_14 MOVL $8, SI CMPQ R9, $100000000 - JB LBB5_14 + JB LBB2_14 CMPQ R9, $1000000000 MOVL $10, SI SBBL $0, SI -LBB5_14: +LBB2_14: MOVQ -64(BP), CX MOVQ R14, -72(BP) SUBL R14, CX @@ -1163,16 +421,16 @@ LBB5_14: MOVQ AX, -80(BP) MOVQ DI, -128(BP) ANDQ DI, R12 - LONG $0x813d8d48; WORD $0x0009; BYTE $0x00 // leaq $2433(%rip), %rdi /* LJTI5_0(%rip) */ + LONG $0x813d8d48; WORD $0x0009; BYTE $0x00 // leaq $2433(%rip), %rdi /* LJTI2_0(%rip) */ MOVQ R15, -56(BP) - JMP LBB5_17 + JMP LBB2_17 -LBB5_15: +LBB2_15: ADDB $48, R9 MOVB R9, 0(R15) INCQ R15 -LBB5_16: +LBB2_16: MOVQ R13, BX MOVL R10, CX SHLQ CX, BX @@ -1180,86 +438,86 @@ LBB5_16: MOVQ R8, R14 MOVQ R13, R9 SUBQ AX, R14 - JAE LBB5_43 + JAE LBB2_43 -LBB5_17: +LBB2_17: TESTL SI, SI - JLE LBB5_31 + JLE LBB2_31 DECL SI MOVLQSX 0(DI)(SI*4), AX ADDQ DI, AX XORL R13, R13 JMP AX -LBB5_19: +LBB2_19: MOVQ R9, AX MOVQ $-3689348814741910323, CX MULQ CX SHRQ $3, DX LEAQ 0(DX)(DX*1), AX LEAQ 0(AX)(AX*4), AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_20: +LBB2_20: MOVQ R9, AX SHRQ $2, AX MOVQ $2951479051793528259, CX MULQ CX SHRQ $2, DX IMUL3Q $100, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_21: +LBB2_21: MOVQ R9, AX SHRQ $3, AX MOVQ $2361183241434822607, CX MULQ CX SHRQ $4, DX IMUL3Q $1000, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_22: +LBB2_22: MOVQ R9, AX MOVQ $3777893186295716171, CX MULQ CX SHRQ $11, DX IMUL3Q $10000, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_23: +LBB2_23: MOVQ R9, AX SHRQ $5, AX MOVQ $755578637259143235, CX MULQ CX SHRQ $7, DX IMUL3Q $100000, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_24: +LBB2_24: MOVQ R9, AX MOVQ $4835703278458516699, CX MULQ CX SHRQ $18, DX IMUL3Q $1000000, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_25: +LBB2_25: MOVQ R9, AX MOVQ $-2972493582642298179, CX MULQ CX SHRQ $23, DX IMUL3Q $10000000, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_26: +LBB2_26: MOVQ R9, AX MOVQ $-6067343680855748867, CX MULQ CX SHRQ $26, DX IMUL3Q $100000000, DX, AX - JMP LBB5_28 + JMP LBB2_28 -LBB5_27: +LBB2_27: MOVQ R9, AX SHRQ $9, AX MOVQ $19342813113834067, CX @@ -1267,37 +525,37 @@ LBB5_27: SHRQ $11, DX IMUL3Q $1000000000, DX, AX -LBB5_28: +LBB2_28: SUBQ AX, R9 MOVQ R9, R13 MOVQ DX, R9 -LBB5_29: +LBB2_29: CMPQ R15, -56(BP) - JA LBB5_15 + JA LBB2_15 TESTL R9, R9 - JE LBB5_16 - JMP LBB5_15 + JE LBB2_16 + JMP LBB2_15 -LBB5_31: +LBB2_31: XORL SI, SI MOVQ -56(BP), R14 MOVQ -136(BP), R9 MOVQ -128(BP), DI - JMP LBB5_34 + JMP LBB2_34 -LBB5_32: +LBB2_32: ADDB $48, DX MOVB DX, 0(R15) INCQ R15 -LBB5_33: +LBB2_33: DECL SI MOVQ R8, CX SUBQ R12, CX - JA LBB5_36 + JA LBB2_36 -LBB5_34: +LBB2_34: MOVQ R8, AX ADDQ R12, R12 LEAQ 0(R12)(R12*4), R12 @@ -1308,24 +566,24 @@ LBB5_34: LEAQ 0(AX)(AX*4), R8 ANDQ DI, R12 CMPQ R15, R14 - JA LBB5_32 + JA LBB2_32 MOVBLZX DX, CX TESTQ CX, CX - JE LBB5_33 - JMP LBB5_32 + JE LBB2_33 + JMP LBB2_32 -LBB5_36: +LBB2_36: CMPQ CX, R9 - JB LBB5_50 + JB LBB2_50 MOVL SI, CX NEGL CX MOVLQSX CX, CX - LONG $0x86158d48; WORD $0x0035; BYTE $0x00 // leaq $13702(%rip), %rdx /* _TabPow10(%rip) */ + LONG $0x32158d48; WORD $0x0041; BYTE $0x00 // leaq $16690(%rip), %rdx /* _TabPow10(%rip) */ MOVQ -80(BP), DI IMULQ 0(DX)(CX*8), DI CMPQ R12, DI MOVQ -64(BP), R10 - JAE LBB5_53 + JAE LBB2_53 LEAQ 0(AX)(AX*4), AX LEAQ 0(R9)(R12*1), CX SUBQ CX, AX @@ -1334,37 +592,37 @@ LBB5_36: MOVQ DI, BX SUBQ R12, BX -LBB5_39: +LBB2_39: CMPQ CX, DI - JB LBB5_41 + JB LBB2_41 LEAQ 0(R8)(CX*1), DX CMPQ BX, DX - JBE LBB5_53 + JBE LBB2_53 -LBB5_41: +LBB2_41: DECB -1(R15) SUBQ R9, AX SETCS DX CMPQ CX, DI - JAE LBB5_53 + JAE LBB2_53 ADDQ R9, CX SUBQ R9, BX TESTB DX, DX - JE LBB5_39 - JMP LBB5_53 + JE LBB2_39 + JMP LBB2_53 -LBB5_43: +LBB2_43: MOVL SI, CX - LONG $0x1c158d48; WORD $0x0035; BYTE $0x00 // leaq $13596(%rip), %rdx /* _TabPow10(%rip) */ + LONG $0xc8158d48; WORD $0x0040; BYTE $0x00 // leaq $16584(%rip), %rdx /* _TabPow10(%rip) */ MOVQ 0(DX)(CX*8), DI MOVL R10, CX SHLQ CX, DI MOVQ -80(BP), R8 CMPQ AX, R8 - JAE LBB5_51 + JAE LBB2_51 CMPQ R14, DI MOVQ -64(BP), R10 - JB LBB5_52 + JB LBB2_52 SUBQ -88(BP), R11 ADDQ DI, R12 LEAQ 0(R12)(BX*1), CX @@ -1386,54 +644,54 @@ LBB5_43: ADDQ DX, AX MOVQ -56(BP), R14 -LBB5_46: +LBB2_46: CMPQ CX, R8 - JB LBB5_48 + JB LBB2_48 CMPQ AX, BX - JBE LBB5_53 + JBE LBB2_53 -LBB5_48: +LBB2_48: DECB -1(R15) SUBQ DI, R11 SETCS DX CMPQ CX, R8 - JAE LBB5_53 + JAE LBB2_53 ADDQ DI, CX ADDQ DI, BX SUBQ DI, AX TESTB DX, DX - JE LBB5_46 - JMP LBB5_53 + JE LBB2_46 + JMP LBB2_53 -LBB5_50: +LBB2_50: MOVQ -64(BP), R10 - JMP LBB5_53 + JMP LBB2_53 -LBB5_51: +LBB2_51: MOVQ -56(BP), R14 MOVQ -64(BP), R10 - JMP LBB5_53 + JMP LBB2_53 -LBB5_52: +LBB2_52: MOVQ -56(BP), R14 -LBB5_53: +LBB2_53: MOVQ R15, R12 SUBQ R14, R12 ADDL SI, R10 LEAL 0(R10)(R12*1), R11 TESTL R10, R10 - JS LBB5_59 + JS LBB2_59 CMPL R11, $21 - JG LBB5_59 + JG LBB2_59 TESTL R10, R10 - JE LBB5_86 + JE LBB2_86 MOVLQSX R12, R9 ADDQ R14, R9 SUBL -72(BP), SI ADDL $347, SI CMPL SI, $127 - JB LBB5_84 + JB LBB2_84 INCQ SI MOVQ SI, R8 ANDQ $-128, R8 @@ -1444,62 +702,62 @@ LBB5_53: MOVL BX, CX ANDL $3, CX CMPQ AX, $384 - JAE LBB5_77 + JAE LBB2_77 XORL DX, DX - JMP LBB5_79 + JMP LBB2_79 -LBB5_59: +LBB2_59: LEAL -1(R11), DI CMPL DI, $20 - JA LBB5_63 + JA LBB2_63 LEAL 1(R12), AX CMPL AX, R11 - JLE LBB5_72 + JLE LBB2_72 MOVLQSX AX, DX MOVL R11, CX -LBB5_62: +LBB2_62: MOVBLZX -2(R14)(DX*1), BX MOVB BX, -1(R14)(DX*1) LEAQ -1(DX), SI MOVQ SI, DX CMPQ SI, CX - JG LBB5_62 - JMP LBB5_73 + JG LBB2_62 + JMP LBB2_73 -LBB5_63: +LBB2_63: LEAL 5(R11), AX CMPL AX, $5 - JA LBB5_74 + JA LBB2_74 MOVQ R10, R15 MOVL $2, AX MOVL $2, DX SUBL R11, DX LEAL 0(DX)(R12*1), CX TESTL CX, CX - JLE LBB5_68 + JLE LBB2_68 MOVL CX, BX MOVL DX, R10 CMPL CX, $128 - JAE LBB5_96 + JAE LBB2_96 -LBB5_66: +LBB2_66: INCQ BX MOVQ R14, CX SUBQ R10, CX -LBB5_67: +LBB2_67: MOVBLZX -2(CX)(BX*1), DX MOVB DX, -2(R14)(BX*1) DECQ BX CMPQ BX, $1 - JG LBB5_67 + JG LBB2_67 -LBB5_68: +LBB2_68: SUBL R15, AX MOVW $11824, 0(R14) TESTL R11, R11 - JE LBB5_87 + JE LBB2_87 NEGL R11 LEAQ 2(R14), DI MOVQ -72(BP), DX @@ -1507,7 +765,7 @@ LBB5_68: SUBL R12, DX ADDL $-349, DX CMPL DX, $127 - JB LBB5_121 + JB LBB2_121 INCQ DX MOVQ DX, R8 ANDQ $-128, DX @@ -1518,39 +776,39 @@ LBB5_68: MOVL CX, SI ANDL $3, SI CMPQ BX, $384 - JAE LBB5_113 + JAE LBB2_113 XORL BX, BX - JMP LBB5_115 + JMP LBB2_115 -LBB5_72: +LBB2_72: MOVL R11, CX -LBB5_73: +LBB2_73: MOVL -44(BP), BX MOVB $46, 0(R14)(CX*1) - JMP LBB5_88 + JMP LBB2_88 -LBB5_74: +LBB2_74: CMPL R12, $1 - JNE LBB5_90 + JNE LBB2_90 MOVB $101, 1(R14) LEAQ 2(R14), DX TESTL DI, DI - JS LBB5_103 + JS LBB2_103 MOVQ DX, R14 MOVL DI, CX MOVL -44(BP), BX - JMP LBB5_105 + JMP LBB2_105 -LBB5_77: +LBB2_77: MOVLQSX R12, AX LEAQ 480(AX)(R14*1), AX ANDQ $-4, BX NEGQ BX XORL DX, DX - QUAD $0xfffff8f60528fdc5 // vmovapd $-1802(%rip), %ymm0 /* LCPI5_3(%rip) */ + QUAD $0xfffff8f60528fdc5 // vmovapd $-1802(%rip), %ymm0 /* LCPI2_3(%rip) */ -LBB5_78: +LBB2_78: QUAD $0xfffe20108411fdc5; BYTE $0xff // vmovupd %ymm0, $-480(%rax,%rdx) QUAD $0xfffe40108411fdc5; BYTE $0xff // vmovupd %ymm0, $-448(%rax,%rdx) QUAD $0xfffe60108411fdc5; BYTE $0xff // vmovupd %ymm0, $-416(%rax,%rdx) @@ -1569,53 +827,53 @@ LBB5_78: LONG $0x0411fdc5; BYTE $0x10 // vmovupd %ymm0, (%rax,%rdx) ADDQ $512, DX ADDQ $4, BX - JNE LBB5_78 + JNE LBB2_78 -LBB5_79: +LBB2_79: TESTQ CX, CX - JE LBB5_82 + JE LBB2_82 SUBL R14, R15 MOVLQSX R15, AX ADDQ AX, DX LEAQ 96(R14)(DX*1), AX NEGQ CX - QUAD $0xfffff8470528fdc5 // vmovapd $-1977(%rip), %ymm0 /* LCPI5_3(%rip) */ + QUAD $0xfffff8470528fdc5 // vmovapd $-1977(%rip), %ymm0 /* LCPI2_3(%rip) */ -LBB5_81: +LBB2_81: LONG $0x4011fdc5; BYTE $0xa0 // vmovupd %ymm0, $-96(%rax) LONG $0x4011fdc5; BYTE $0xc0 // vmovupd %ymm0, $-64(%rax) LONG $0x4011fdc5; BYTE $0xe0 // vmovupd %ymm0, $-32(%rax) LONG $0x0011fdc5 // vmovupd %ymm0, (%rax) SUBQ $-128, AX INCQ CX - JNE LBB5_81 + JNE LBB2_81 -LBB5_82: +LBB2_82: CMPQ SI, R8 - JE LBB5_86 + JE LBB2_86 SUBL R8, R10 ADDQ R8, R9 -LBB5_84: +LBB2_84: MOVL R10, AX XORL CX, CX -LBB5_85: +LBB2_85: MOVB $48, 0(R9)(CX*1) INCQ CX CMPL AX, CX - JNE LBB5_85 + JNE LBB2_85 -LBB5_86: +LBB2_86: MOVL R11, AX -LBB5_87: +LBB2_87: MOVL -44(BP), BX -LBB5_88: +LBB2_88: ADDL BX, AX -LBB5_89: +LBB2_89: ADDQ $96, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 @@ -1626,42 +884,42 @@ LBB5_89: WORD $0xf8c5; BYTE $0x77 // vzeroupper RET -LBB5_90: +LBB2_90: LEAL 1(R12), AX CMPL AX, $2 - JL LBB5_93 + JL LBB2_93 MOVL AX, AX INCQ AX -LBB5_92: +LBB2_92: MOVBLZX -3(R14)(AX*1), CX MOVB CX, -2(R14)(AX*1) DECQ AX CMPQ AX, $2 - JG LBB5_92 + JG LBB2_92 -LBB5_93: +LBB2_93: MOVB $46, 1(R14) MOVLQSX R12, AX MOVB $101, 1(R14)(AX*1) LEAQ 2(R14)(AX*1), DX TESTL DI, DI MOVL -44(BP), BX - JS LBB5_108 + JS LBB2_108 MOVQ DX, CX - JMP LBB5_109 + JMP LBB2_109 -LBB5_96: +LBB2_96: LEAQ -1(BX), DI LEAQ -1(R14)(BX*1), DX CMPQ DI, DX - JA LBB5_66 + JA LBB2_66 MOVQ R10, R8 NOTQ R8 LEAQ 0(R8)(BX*1), DX ADDQ R14, DX CMPQ DI, DX - JA LBB5_66 + JA LBB2_66 TESTL CX, CX MOVL $1, CX LONG $0xcb440f48 // cmoveq %rbx, %rcx @@ -1670,14 +928,14 @@ LBB5_96: SUBQ R10, DI ADDQ R14, DI CMPQ DX, DI - JAE LBB5_100 + JAE LBB2_100 LEAQ 0(R14)(BX*1), DX ADDQ R8, CX ADDQ R14, CX CMPQ CX, DX - JB LBB5_66 + JB LBB2_66 -LBB5_100: +LBB2_100: MOVL BX, R8 ANDL $-128, R8 LEAQ -128(R8), CX @@ -1685,7 +943,7 @@ LBB5_100: SHRQ $7, R9 INCQ R9 TESTQ CX, CX - JE LBB5_125 + JE LBB2_125 LEAQ -32(BX)(R14*1), CX MOVQ R10, DI NEGQ DI @@ -1694,7 +952,7 @@ LBB5_100: NEGQ DX MOVQ $-1, R14 -LBB5_102: +LBB2_102: LONG $0x4410fcc5; WORD $0xa039 // vmovups $-96(%rcx,%rdi), %ymm0 LONG $0x4c10fcc5; WORD $0xc039 // vmovups $-64(%rcx,%rdi), %ymm1 LONG $0x5410fcc5; WORD $0xe039 // vmovups $-32(%rcx,%rdi), %ymm2 @@ -1714,39 +972,39 @@ LBB5_102: ADDQ $-256, R14 ADDQ $-256, CX ADDQ $2, DX - JNE LBB5_102 - JMP LBB5_126 + JNE LBB2_102 + JMP LBB2_126 -LBB5_103: +LBB2_103: MOVL DI, CX NEGL CX MOVB $45, 2(R14) ADDQ $3, R14 CMPL DI, $-9 MOVL -44(BP), BX - JL LBB5_105 + JL LBB2_105 ADDB $48, CX MOVB CX, 0(R14) MOVL $4, AX - JMP LBB5_88 + JMP LBB2_88 -LBB5_105: +LBB2_105: MOVL R14, AX SUBL DX, AX CMPL CX, $99 - JG LBB5_107 + JG LBB2_107 ADDL $4, AX MOVL CX, CX - LONG $0x8b358d48; WORD $0x0030; BYTE $0x00 // leaq $12427(%rip), %rsi /* _Digits(%rip) */ + LONG $0x37358d48; WORD $0x003c; BYTE $0x00 // leaq $15415(%rip), %rsi /* _Digits(%rip) */ MOVB 0(SI)(CX*2), DX ADDQ CX, CX MOVB DX, 0(R14) ORL $1, CX MOVB 0(CX)(SI*1), CX MOVB CX, 1(R14) - JMP LBB5_88 + JMP LBB2_88 -LBB5_107: +LBB2_107: ADDL $5, AX MOVL CX, DX IMUL3Q $1374389535, DX, DX @@ -1755,53 +1013,53 @@ LBB5_107: MOVB SI, 0(R14) WORD $0xd26b; BYTE $0x64 // imull $100, %edx, %edx SUBL DX, CX - LONG $0x51358d48; WORD $0x0030; BYTE $0x00 // leaq $12369(%rip), %rsi /* _Digits(%rip) */ + LONG $0xfd358d48; WORD $0x003b; BYTE $0x00 // leaq $15357(%rip), %rsi /* _Digits(%rip) */ MOVB 0(SI)(CX*2), DX MOVB 1(SI)(CX*2), CX MOVB DX, 1(R14) MOVB CX, 2(R14) - JMP LBB5_88 + JMP LBB2_88 -LBB5_108: +LBB2_108: NEGL DI LEAQ 1(DX), CX MOVB $45, 0(DX) -LBB5_109: +LBB2_109: CMPL DI, $9 - JG LBB5_111 + JG LBB2_111 MOVL CX, AX SUBL DX, AX LEAL 3(R12)(AX*1), AX ADDB $48, DI MOVB DI, 0(CX) - JMP LBB5_88 + JMP LBB2_88 -LBB5_111: +LBB2_111: LEAL 2(R12), SI MOVL CX, AX SUBL DX, AX ADDL SI, AX CMPL DI, $99 - JG LBB5_124 + JG LBB2_124 ADDL $2, AX MOVL DI, DX - LONG $0xfa358d48; WORD $0x002f; BYTE $0x00 // leaq $12282(%rip), %rsi /* _Digits(%rip) */ + LONG $0xa6358d48; WORD $0x003b; BYTE $0x00 // leaq $15270(%rip), %rsi /* _Digits(%rip) */ MOVB 0(SI)(DX*2), DI ADDQ DX, DX MOVB DI, 0(CX) ORL $1, DX MOVB 0(DX)(SI*1), DX MOVB DX, 1(CX) - JMP LBB5_88 + JMP LBB2_88 -LBB5_113: +LBB2_113: ANDQ $-4, CX NEGQ CX XORL BX, BX - QUAD $0xfffff5a30528fdc5 // vmovapd $-2653(%rip), %ymm0 /* LCPI5_3(%rip) */ + QUAD $0xfffff5a30528fdc5 // vmovapd $-2653(%rip), %ymm0 /* LCPI2_3(%rip) */ -LBB5_114: +LBB2_114: LONG $0x117dc1c4; WORD $0x1e44; BYTE $0x02 // vmovupd %ymm0, $2(%r14,%rbx) LONG $0x117dc1c4; WORD $0x1e44; BYTE $0x22 // vmovupd %ymm0, $34(%r14,%rbx) LONG $0x117dc1c4; WORD $0x1e44; BYTE $0x42 // vmovupd %ymm0, $66(%r14,%rbx) @@ -1820,42 +1078,42 @@ LBB5_114: QUAD $0x01e21e84117dc1c4; WORD $0x0000 // vmovupd %ymm0, $482(%r14,%rbx) ADDQ $512, BX ADDQ $4, CX - JNE LBB5_114 + JNE LBB2_114 -LBB5_115: +LBB2_115: TESTQ SI, SI - JE LBB5_118 + JE LBB2_118 LEAQ 98(BX)(R14*1), CX NEGQ SI - QUAD $0xfffff4e90528fdc5 // vmovapd $-2839(%rip), %ymm0 /* LCPI5_3(%rip) */ + QUAD $0xfffff4e90528fdc5 // vmovapd $-2839(%rip), %ymm0 /* LCPI2_3(%rip) */ -LBB5_117: +LBB2_117: LONG $0x4111fdc5; BYTE $0xa0 // vmovupd %ymm0, $-96(%rcx) LONG $0x4111fdc5; BYTE $0xc0 // vmovupd %ymm0, $-64(%rcx) LONG $0x4111fdc5; BYTE $0xe0 // vmovupd %ymm0, $-32(%rcx) LONG $0x0111fdc5 // vmovupd %ymm0, (%rcx) SUBQ $-128, CX INCQ SI - JNE LBB5_117 + JNE LBB2_117 -LBB5_118: +LBB2_118: CMPQ R8, DX - JE LBB5_87 + JE LBB2_87 SUBL DX, R11 ADDQ DX, DI -LBB5_121: +LBB2_121: MOVL R11, CX XORL DX, DX -LBB5_122: +LBB2_122: MOVB $48, 0(DI)(DX*1) INCQ DX CMPL CX, DX - JNE LBB5_122 - JMP LBB5_87 + JNE LBB2_122 + JMP LBB2_87 -LBB5_124: +LBB2_124: ADDL $3, AX MOVL DI, DX IMUL3Q $1374389535, DX, DX @@ -1864,19 +1122,19 @@ LBB5_124: MOVB SI, 0(CX) WORD $0xd26b; BYTE $0x64 // imull $100, %edx, %edx SUBL DX, DI - LONG $0xb5158d48; WORD $0x002e; BYTE $0x00 // leaq $11957(%rip), %rdx /* _Digits(%rip) */ + LONG $0x61158d48; WORD $0x003a; BYTE $0x00 // leaq $14945(%rip), %rdx /* _Digits(%rip) */ MOVB 0(DX)(DI*2), SI MOVB 1(DX)(DI*2), DX MOVB SI, 1(CX) MOVB DX, 2(CX) - JMP LBB5_88 + JMP LBB2_88 -LBB5_125: +LBB2_125: MOVQ $-1, R14 -LBB5_126: +LBB2_126: TESTB $1, R9 - JE LBB5_128 + JE LBB2_128 ADDQ BX, R14 MOVQ R14, CX SUBQ R10, CX @@ -1890,41 +1148,41 @@ LBB5_126: LONG $0x117da1c4; WORD $0x324c; BYTE $0xa1 // vmovupd %ymm1, $-95(%rdx,%r14) LONG $0x117da1c4; WORD $0x3244; BYTE $0x81 // vmovupd %ymm0, $-127(%rdx,%r14) -LBB5_128: +LBB2_128: CMPQ R8, BX MOVQ -56(BP), R14 - JE LBB5_68 + JE LBB2_68 ANDL $127, BX - JMP LBB5_66 + JMP LBB2_66 -// .set L5_0_set_29, LBB5_29-LJTI5_0 -// .set L5_0_set_19, LBB5_19-LJTI5_0 -// .set L5_0_set_20, LBB5_20-LJTI5_0 -// .set L5_0_set_21, LBB5_21-LJTI5_0 -// .set L5_0_set_22, LBB5_22-LJTI5_0 -// .set L5_0_set_23, LBB5_23-LJTI5_0 -// .set L5_0_set_24, LBB5_24-LJTI5_0 -// .set L5_0_set_25, LBB5_25-LJTI5_0 -// .set L5_0_set_26, LBB5_26-LJTI5_0 -// .set L5_0_set_27, LBB5_27-LJTI5_0 -LJTI5_0: - LONG $0xfffff7e7 // .long L5_0_set_29 - LONG $0xfffff6c1 // .long L5_0_set_19 - LONG $0xfffff6e2 // .long L5_0_set_20 - LONG $0xfffff703 // .long L5_0_set_21 - LONG $0xfffff727 // .long L5_0_set_22 - LONG $0xfffff747 // .long L5_0_set_23 - LONG $0xfffff768 // .long L5_0_set_24 - LONG $0xfffff785 // .long L5_0_set_25 - LONG $0xfffff7a2 // .long L5_0_set_26 - LONG $0xfffff7bf // .long L5_0_set_27 +// .set L2_0_set_29, LBB2_29-LJTI2_0 +// .set L2_0_set_19, LBB2_19-LJTI2_0 +// .set L2_0_set_20, LBB2_20-LJTI2_0 +// .set L2_0_set_21, LBB2_21-LJTI2_0 +// .set L2_0_set_22, LBB2_22-LJTI2_0 +// .set L2_0_set_23, LBB2_23-LJTI2_0 +// .set L2_0_set_24, LBB2_24-LJTI2_0 +// .set L2_0_set_25, LBB2_25-LJTI2_0 +// .set L2_0_set_26, LBB2_26-LJTI2_0 +// .set L2_0_set_27, LBB2_27-LJTI2_0 +LJTI2_0: + LONG $0xfffff7e7 // .long L2_0_set_29 + LONG $0xfffff6c1 // .long L2_0_set_19 + LONG $0xfffff6e2 // .long L2_0_set_20 + LONG $0xfffff703 // .long L2_0_set_21 + LONG $0xfffff727 // .long L2_0_set_22 + LONG $0xfffff747 // .long L2_0_set_23 + LONG $0xfffff768 // .long L2_0_set_24 + LONG $0xfffff785 // .long L2_0_set_25 + LONG $0xfffff7a2 // .long L2_0_set_26 + LONG $0xfffff7bf // .long L2_0_set_27 _i64toa: TESTQ SI, SI - JS LBB6_1 + JS LBB3_1 JMP _u64toa -LBB6_1: +LBB3_1: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp MOVB $45, 0(DI) @@ -1935,11 +1193,11 @@ LBB6_1: BYTE $0x5d // popq %rbp RET -LCPI7_0: +LCPI4_0: QUAD $0x00000000d1b71759 // .quad 3518437209 QUAD $0x00000000d1b71759 // .quad 3518437209 -LCPI7_3: +LCPI4_3: WORD $0x000a // .word 10 WORD $0x000a // .word 10 WORD $0x000a // .word 10 @@ -1949,20 +1207,20 @@ LCPI7_3: WORD $0x000a // .word 10 WORD $0x000a // .word 10 -LCPI7_4: +LCPI4_4: QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' -LCPI7_1: +LCPI4_1: QUAD $0x80003334147b20c5 // .quad -9223315738079846203 -LCPI7_2: +LCPI4_2: QUAD $0x8000200008000080 // .quad -9223336852348469120 _u64toa: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp CMPQ SI, $9999 - JA LBB7_8 + JA LBB4_8 MOVWLZX SI, AX SHRL $2, AX LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax @@ -1974,38 +1232,38 @@ _u64toa: MOVWLZX CX, AX ADDQ AX, AX CMPL SI, $1000 - JB LBB7_3 - LONG $0x790d8d48; WORD $0x002d; BYTE $0x00 // leaq $11641(%rip), %rcx /* _Digits(%rip) */ + JB LBB4_3 + LONG $0x250d8d48; WORD $0x0039; BYTE $0x00 // leaq $14629(%rip), %rcx /* _Digits(%rip) */ MOVB 0(DX)(CX*1), CX MOVB CX, 0(DI) MOVL $1, CX - JMP LBB7_4 + JMP LBB4_4 -LBB7_3: +LBB4_3: XORL CX, CX CMPL SI, $100 - JB LBB7_5 + JB LBB4_5 -LBB7_4: +LBB4_4: MOVWLZX DX, DX ORQ $1, DX - LONG $0x58358d48; WORD $0x002d; BYTE $0x00 // leaq $11608(%rip), %rsi /* _Digits(%rip) */ + LONG $0x04358d48; WORD $0x0039; BYTE $0x00 // leaq $14596(%rip), %rsi /* _Digits(%rip) */ MOVB 0(DX)(SI*1), DX MOVL CX, SI INCL CX MOVB DX, 0(DI)(SI*1) -LBB7_6: - LONG $0x47158d48; WORD $0x002d; BYTE $0x00 // leaq $11591(%rip), %rdx /* _Digits(%rip) */ +LBB4_6: + LONG $0xf3158d48; WORD $0x0038; BYTE $0x00 // leaq $14579(%rip), %rdx /* _Digits(%rip) */ MOVB 0(AX)(DX*1), DX MOVL CX, SI INCL CX MOVB DX, 0(DI)(SI*1) -LBB7_7: +LBB4_7: MOVWLZX AX, AX ORQ $1, AX - LONG $0x2f158d48; WORD $0x002d; BYTE $0x00 // leaq $11567(%rip), %rdx /* _Digits(%rip) */ + LONG $0xdb158d48; WORD $0x0038; BYTE $0x00 // leaq $14555(%rip), %rdx /* _Digits(%rip) */ MOVB 0(AX)(DX*1), AX MOVL CX, DX INCL CX @@ -2014,15 +1272,15 @@ LBB7_7: BYTE $0x5d // popq %rbp RET -LBB7_5: +LBB4_5: XORL CX, CX CMPL SI, $10 - JAE LBB7_6 - JMP LBB7_7 + JAE LBB4_6 + JMP LBB4_7 -LBB7_8: +LBB4_8: CMPQ SI, $99999999 - JA LBB7_16 + JA LBB4_16 MOVL SI, AX MOVL $3518437209, DX IMULQ AX, DX @@ -2051,38 +1309,38 @@ LBB7_8: MOVWLZX CX, R11 ADDQ R11, R11 CMPL SI, $10000000 - JB LBB7_11 - LONG $0x98058d48; WORD $0x002c; BYTE $0x00 // leaq $11416(%rip), %rax /* _Digits(%rip) */ + JB LBB4_11 + LONG $0x44058d48; WORD $0x0038; BYTE $0x00 // leaq $14404(%rip), %rax /* _Digits(%rip) */ MOVB 0(R10)(AX*1), AX MOVB AX, 0(DI) MOVL $1, CX - JMP LBB7_12 + JMP LBB4_12 -LBB7_11: +LBB4_11: XORL CX, CX CMPL SI, $1000000 - JB LBB7_13 + JB LBB4_13 -LBB7_12: +LBB4_12: MOVL R10, AX ORQ $1, AX - LONG $0x73358d48; WORD $0x002c; BYTE $0x00 // leaq $11379(%rip), %rsi /* _Digits(%rip) */ + LONG $0x1f358d48; WORD $0x0038; BYTE $0x00 // leaq $14367(%rip), %rsi /* _Digits(%rip) */ MOVB 0(AX)(SI*1), AX MOVL CX, SI INCL CX MOVB AX, 0(DI)(SI*1) -LBB7_14: - LONG $0x62058d48; WORD $0x002c; BYTE $0x00 // leaq $11362(%rip), %rax /* _Digits(%rip) */ +LBB4_14: + LONG $0x0e058d48; WORD $0x0038; BYTE $0x00 // leaq $14350(%rip), %rax /* _Digits(%rip) */ MOVB 0(R9)(AX*1), AX MOVL CX, SI INCL CX MOVB AX, 0(DI)(SI*1) -LBB7_15: +LBB4_15: MOVWLZX R9, AX ORQ $1, AX - LONG $0x48358d48; WORD $0x002c; BYTE $0x00 // leaq $11336(%rip), %rsi /* _Digits(%rip) */ + LONG $0xf4358d48; WORD $0x0037; BYTE $0x00 // leaq $14324(%rip), %rsi /* _Digits(%rip) */ MOVB 0(AX)(SI*1), AX MOVL CX, DX MOVB AX, 0(DI)(DX*1) @@ -2103,16 +1361,16 @@ LBB7_15: BYTE $0x5d // popq %rbp RET -LBB7_13: +LBB4_13: XORL CX, CX CMPL SI, $100000 - JAE LBB7_14 - JMP LBB7_15 + JAE LBB4_14 + JMP LBB4_15 -LBB7_16: +LBB4_16: MOVQ $9999999999999999, AX CMPQ SI, AX - JA LBB7_18 + JA LBB4_18 MOVQ $-6067343680855748867, CX MOVQ SI, AX MULQ CX @@ -2120,7 +1378,7 @@ LBB7_16: LONG $0xe100c269; WORD $0x05f5 // imull $100000000, %edx, %eax SUBL AX, SI LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - QUAD $0xfffffdcb0d6ffac5 // vmovdqu $-565(%rip), %xmm1 /* LCPI7_0(%rip) */ + QUAD $0xfffffdcb0d6ffac5 // vmovdqu $-565(%rip), %xmm1 /* LCPI4_0(%rip) */ LONG $0xd1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm2 LONG $0xd273e9c5; BYTE $0x2d // vpsrlq $45, %xmm2, %xmm2 MOVL $10000, AX @@ -2131,11 +1389,11 @@ LBB7_16: LONG $0xf073f9c5; BYTE $0x02 // vpsllq $2, %xmm0, %xmm0 LONG $0xc070fbc5; BYTE $0x50 // vpshuflw $80, %xmm0, %xmm0 LONG $0xc070f9c5; BYTE $0x50 // vpshufd $80, %xmm0, %xmm0 - QUAD $0xfffdc4155979e2c4; BYTE $0xff // vpbroadcastq $-572(%rip), %xmm2 /* LCPI7_1(%rip) */ - QUAD $0xfffdc3255979e2c4; BYTE $0xff // vpbroadcastq $-573(%rip), %xmm4 /* LCPI7_2(%rip) */ + QUAD $0xfffdc4155979e2c4; BYTE $0xff // vpbroadcastq $-572(%rip), %xmm2 /* LCPI4_1(%rip) */ + QUAD $0xfffdc3255979e2c4; BYTE $0xff // vpbroadcastq $-573(%rip), %xmm4 /* LCPI4_2(%rip) */ LONG $0xc2e4f9c5 // vpmulhuw %xmm2, %xmm0, %xmm0 LONG $0xc4e4f9c5 // vpmulhuw %xmm4, %xmm0, %xmm0 - QUAD $0xfffffd8b2d6ffac5 // vmovdqu $-629(%rip), %xmm5 /* LCPI7_3(%rip) */ + QUAD $0xfffffd8b2d6ffac5 // vmovdqu $-629(%rip), %xmm5 /* LCPI4_3(%rip) */ LONG $0xf5d5f9c5 // vpmullw %xmm5, %xmm0, %xmm6 LONG $0xf673c9c5; BYTE $0x10 // vpsllq $16, %xmm6, %xmm6 LONG $0xc6f9f9c5 // vpsubw %xmm6, %xmm0, %xmm0 @@ -2154,7 +1412,7 @@ LBB7_16: LONG $0xf273e9c5; BYTE $0x10 // vpsllq $16, %xmm2, %xmm2 LONG $0xcaf9f1c5 // vpsubw %xmm2, %xmm1, %xmm1 LONG $0xc167f9c5 // vpackuswb %xmm1, %xmm0, %xmm0 - QUAD $0xfffffd450dfcf9c5 // vpaddb $-699(%rip), %xmm0, %xmm1 /* LCPI7_4(%rip) */ + QUAD $0xfffffd450dfcf9c5 // vpaddb $-699(%rip), %xmm0, %xmm1 /* LCPI4_4(%rip) */ LONG $0xd2efe9c5 // vpxor %xmm2, %xmm2, %xmm2 LONG $0xc274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm0 LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax @@ -2164,14 +1422,14 @@ LBB7_16: MOVL $16, CX SUBL AX, CX SHLQ $4, AX - LONG $0xbb158d48; WORD $0x002b; BYTE $0x00 // leaq $11195(%rip), %rdx /* _VecShiftShuffles(%rip) */ + LONG $0x67158d48; WORD $0x0037; BYTE $0x00 // leaq $14183(%rip), %rdx /* _VecShiftShuffles(%rip) */ LONG $0x0071e2c4; WORD $0x1004 // vpshufb (%rax,%rdx), %xmm1, %xmm0 LONG $0x077ffac5 // vmovdqu %xmm0, (%rdi) MOVL CX, AX BYTE $0x5d // popq %rbp RET -LBB7_18: +LBB4_18: MOVQ $4153837486827862103, CX MOVQ SI, AX MULQ CX @@ -2180,31 +1438,31 @@ LBB7_18: IMULQ DX, AX SUBQ AX, SI CMPL DX, $9 - JA LBB7_20 + JA LBB4_20 ADDB $48, DX MOVB DX, 0(DI) MOVL $1, CX - JMP LBB7_25 + JMP LBB4_25 -LBB7_20: +LBB4_20: CMPL DX, $99 - JA LBB7_22 + JA LBB4_22 MOVL DX, AX - LONG $0x9e0d8d48; WORD $0x002a; BYTE $0x00 // leaq $10910(%rip), %rcx /* _Digits(%rip) */ + LONG $0x4a0d8d48; WORD $0x0036; BYTE $0x00 // leaq $13898(%rip), %rcx /* _Digits(%rip) */ MOVB 0(CX)(AX*2), DX MOVB 1(CX)(AX*2), AX MOVB DX, 0(DI) MOVB AX, 1(DI) MOVL $2, CX - JMP LBB7_25 + JMP LBB4_25 -LBB7_22: +LBB4_22: MOVL DX, AX SHRL $2, AX LONG $0x147bc069; WORD $0x0000 // imull $5243, %eax, %eax SHRL $17, AX CMPL DX, $999 - JA LBB7_24 + JA LBB4_24 ADDL $48, AX MOVB AX, 0(DI) MOVWLZX DX, AX @@ -2215,19 +1473,19 @@ LBB7_22: WORD $0xc96b; BYTE $0x64 // imull $100, %ecx, %ecx SUBL CX, AX MOVWLZX AX, AX - LONG $0x4d0d8d48; WORD $0x002a; BYTE $0x00 // leaq $10829(%rip), %rcx /* _Digits(%rip) */ + LONG $0xf90d8d48; WORD $0x0035; BYTE $0x00 // leaq $13817(%rip), %rcx /* _Digits(%rip) */ MOVB 0(CX)(AX*2), DX MOVB 1(CX)(AX*2), AX MOVB DX, 1(DI) MOVB AX, 2(DI) MOVL $3, CX - JMP LBB7_25 + JMP LBB4_25 -LBB7_24: +LBB4_24: WORD $0xc86b; BYTE $0x64 // imull $100, %eax, %ecx SUBL CX, DX MOVWLZX AX, AX - LONG $0x2a058d4c; WORD $0x002a; BYTE $0x00 // leaq $10794(%rip), %r8 /* _Digits(%rip) */ + LONG $0xd6058d4c; WORD $0x0035; BYTE $0x00 // leaq $13782(%rip), %r8 /* _Digits(%rip) */ MOVB 0(R8)(AX*2), CX MOVB 1(R8)(AX*2), AX MOVB CX, 0(DI) @@ -2242,13 +1500,13 @@ LBB7_24: MOVB AX, 3(DI) MOVL $4, CX -LBB7_25: +LBB4_25: MOVQ $-6067343680855748867, DX MOVQ SI, AX MULQ DX SHRQ $26, DX LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - QUAD $0xfffffbe40d6ffac5 // vmovdqu $-1052(%rip), %xmm1 /* LCPI7_0(%rip) */ + QUAD $0xfffffbe40d6ffac5 // vmovdqu $-1052(%rip), %xmm1 /* LCPI4_0(%rip) */ LONG $0xd1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm2 LONG $0xd273e9c5; BYTE $0x2d // vpsrlq $45, %xmm2, %xmm2 MOVL $10000, AX @@ -2258,12 +1516,12 @@ LBB7_25: LONG $0xc061e9c5 // vpunpcklwd %xmm0, %xmm2, %xmm0 LONG $0xf073f9c5; BYTE $0x02 // vpsllq $2, %xmm0, %xmm0 LONG $0xc070fbc5; BYTE $0x50 // vpshuflw $80, %xmm0, %xmm0 - QUAD $0xfffbe2155979e2c4; BYTE $0xff // vpbroadcastq $-1054(%rip), %xmm2 /* LCPI7_1(%rip) */ + QUAD $0xfffbe2155979e2c4; BYTE $0xff // vpbroadcastq $-1054(%rip), %xmm2 /* LCPI4_1(%rip) */ LONG $0xc070f9c5; BYTE $0x50 // vpshufd $80, %xmm0, %xmm0 LONG $0xc2e4f9c5 // vpmulhuw %xmm2, %xmm0, %xmm0 - QUAD $0xfffbd8255979e2c4; BYTE $0xff // vpbroadcastq $-1064(%rip), %xmm4 /* LCPI7_2(%rip) */ + QUAD $0xfffbd8255979e2c4; BYTE $0xff // vpbroadcastq $-1064(%rip), %xmm4 /* LCPI4_2(%rip) */ LONG $0xc4e4f9c5 // vpmulhuw %xmm4, %xmm0, %xmm0 - QUAD $0xfffffba42d6ffac5 // vmovdqu $-1116(%rip), %xmm5 /* LCPI7_3(%rip) */ + QUAD $0xfffffba42d6ffac5 // vmovdqu $-1116(%rip), %xmm5 /* LCPI4_3(%rip) */ LONG $0xf5d5f9c5 // vpmullw %xmm5, %xmm0, %xmm6 LONG $0xf673c9c5; BYTE $0x10 // vpsllq $16, %xmm6, %xmm6 LONG $0xc6f9f9c5 // vpsubw %xmm6, %xmm0, %xmm0 @@ -2284,7 +1542,7 @@ LBB7_25: LONG $0xf273e9c5; BYTE $0x10 // vpsllq $16, %xmm2, %xmm2 LONG $0xcaf9f1c5 // vpsubw %xmm2, %xmm1, %xmm1 LONG $0xc167f9c5 // vpackuswb %xmm1, %xmm0, %xmm0 - QUAD $0xfffffb5605fcf9c5 // vpaddb $-1194(%rip), %xmm0, %xmm0 /* LCPI7_4(%rip) */ + QUAD $0xfffffb5605fcf9c5 // vpaddb $-1194(%rip), %xmm0, %xmm0 /* LCPI4_4(%rip) */ MOVL CX, AX LONG $0x047ffac5; BYTE $0x07 // vmovdqu %xmm0, (%rdi,%rax) ORL $16, CX @@ -2292,11 +1550,620 @@ LBB7_25: BYTE $0x5d // popq %rbp RET -LCPI8_0: +LCPI5_0: + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + +LCPI5_1: + QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + +LCPI5_2: QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -LCPI8_1: +LCPI5_3: + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + +LCPI5_4: + QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + +LCPI5_5: + QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + +_quote: + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5741 // pushq %r15 + WORD $0x5641 // pushq %r14 + WORD $0x5541 // pushq %r13 + WORD $0x5441 // pushq %r12 + BYTE $0x53 // pushq %rbx + SUBQ $16, SP + MOVQ CX, R14 + MOVQ DI, R12 + TESTB $1, R8 + LONG $0x73058d48; WORD $0x0035; BYTE $0x00 // leaq $13683(%rip), %rax /* __SingleQuoteTab(%rip) */ + LONG $0x6c158d4c; WORD $0x0045; BYTE $0x00 // leaq $17772(%rip), %r10 /* __DoubleQuoteTab(%rip) */ + LONG $0xd0440f4c // cmoveq %rax, %r10 + MOVQ DX, R8 + MOVQ DI, AX + TESTQ SI, SI + JE LBB5_85 + MOVQ 0(R14), R11 + QUAD $0xffffff290d6f7ec5 // vmovdqu $-215(%rip), %ymm9 /* LCPI5_0(%rip) */ + QUAD $0xffffff41156f7ec5 // vmovdqu $-191(%rip), %ymm10 /* LCPI5_1(%rip) */ + QUAD $0xffffff591d6f7ec5 // vmovdqu $-167(%rip), %ymm11 /* LCPI5_2(%rip) */ + LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 + MOVQ R12, AX + MOVQ DX, R8 + MOVQ DX, -56(BP) + MOVQ R12, -48(BP) + +LBB5_2: + CMPQ SI, $31 + SETGT CX + MOVQ R11, R13 + MOVQ R8, R12 + CMPQ R11, $32 + JL LBB5_13 + MOVQ SI, R9 + MOVQ AX, R15 + MOVQ SI, DI + CMPQ SI, $32 + JL LBB5_8 + MOVQ AX, R15 + MOVQ DI, SI + MOVQ R8, R12 + MOVQ R11, BX + +LBB5_5: + LONG $0x6f7ec1c4; BYTE $0x07 // vmovdqu (%r15), %ymm0 + LONG $0xc864b5c5 // vpcmpgtb %ymm0, %ymm9, %ymm1 + LONG $0xd074adc5 // vpcmpeqb %ymm0, %ymm10, %ymm2 + LONG $0xd874a5c5 // vpcmpeqb %ymm0, %ymm11, %ymm3 + LONG $0xd2ebe5c5 // vpor %ymm2, %ymm3, %ymm2 + LONG $0x7f7ec1c4; WORD $0x2404 // vmovdqu %ymm0, (%r12) + LONG $0x647dc1c4; BYTE $0xc0 // vpcmpgtb %ymm8, %ymm0, %ymm0 + LONG $0xc0dbf5c5 // vpand %ymm0, %ymm1, %ymm0 + LONG $0xc0ebedc5 // vpor %ymm0, %ymm2, %ymm0 + LONG $0xc8d7fdc5 // vpmovmskb %ymm0, %ecx + TESTL CX, CX + JNE LBB5_12 + ADDQ $32, R15 + ADDQ $32, R12 + LEAQ -32(SI), R9 + LEAQ -32(BX), R13 + CMPQ SI, $63 + SETGT CX + CMPQ SI, $64 + JL LBB5_8 + MOVQ R9, SI + CMPQ BX, $63 + MOVQ R13, BX + JG LBB5_5 + +LBB5_8: + TESTB CX, CX + JE LBB5_14 + +LBB5_9: + LONG $0x6f7ec1c4; BYTE $0x07 // vmovdqu (%r15), %ymm0 + LONG $0xc864b5c5 // vpcmpgtb %ymm0, %ymm9, %ymm1 + LONG $0xd074adc5 // vpcmpeqb %ymm0, %ymm10, %ymm2 + LONG $0xd874a5c5 // vpcmpeqb %ymm0, %ymm11, %ymm3 + LONG $0xd2ebe5c5 // vpor %ymm2, %ymm3, %ymm2 + LONG $0x647dc1c4; BYTE $0xc0 // vpcmpgtb %ymm8, %ymm0, %ymm0 + LONG $0xc0dbf5c5 // vpand %ymm0, %ymm1, %ymm0 + LONG $0xc0ebedc5 // vpor %ymm0, %ymm2, %ymm0 + LONG $0xc8d7fdc5 // vpmovmskb %ymm0, %ecx + MOVQ $4294967296, DX + ORQ DX, CX + BSFQ CX, CX + LONG $0x6f7ac1c4; BYTE $0x07 // vmovdqu (%r15), %xmm0 + LONG $0x16f9e3c4; WORD $0x01c6 // vpextrq $1, %xmm0, %rsi + LONG $0x7ef9e1c4; BYTE $0xc3 // vmovq %xmm0, %rbx + CMPQ CX, R13 + JLE LBB5_24 + CMPQ R13, $16 + JB LBB5_33 + MOVQ BX, 0(R12) + MOVQ SI, 8(R12) + LEAQ 16(R15), R9 + ADDQ $16, R12 + LEAQ -16(R13), SI + CMPQ SI, $8 + JAE LBB5_34 + JMP LBB5_35 + +LBB5_12: + SUBQ AX, R15 + BSFL CX, R13 + ADDQ R15, R13 + MOVQ -56(BP), DX + MOVQ -48(BP), R12 + TESTQ R13, R13 + JNS LBB5_69 + JMP LBB5_88 + +LBB5_13: + MOVQ SI, DI + MOVQ SI, R9 + MOVQ AX, R15 + TESTB CX, CX + JNE LBB5_9 + +LBB5_14: + MOVQ R14, BX + WORD $0xf8c5; BYTE $0x77 // vzeroupper + CMPQ R9, $15 + SETGT R14 + CMPQ R13, $16 + JL LBB5_26 + CMPQ R9, $16 + JL LBB5_26 + QUAD $0xfffffd960d6f7ec5 // vmovdqu $-618(%rip), %ymm9 /* LCPI5_0(%rip) */ + QUAD $0xfffffdae156f7ec5 // vmovdqu $-594(%rip), %ymm10 /* LCPI5_1(%rip) */ + QUAD $0xfffffdc61d6f7ec5 // vmovdqu $-570(%rip), %ymm11 /* LCPI5_2(%rip) */ + LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 + QUAD $0xfffffdd93d6ffac5 // vmovdqu $-551(%rip), %xmm7 /* LCPI5_3(%rip) */ + QUAD $0xfffffde1256ffac5 // vmovdqu $-543(%rip), %xmm4 /* LCPI5_4(%rip) */ + QUAD $0xfffffde92d6ffac5 // vmovdqu $-535(%rip), %xmm5 /* LCPI5_5(%rip) */ + LONG $0xf676c9c5 // vpcmpeqd %xmm6, %xmm6, %xmm6 + +LBB5_17: + LONG $0x6f7ac1c4; BYTE $0x07 // vmovdqu (%r15), %xmm0 + LONG $0xc864c1c5 // vpcmpgtb %xmm0, %xmm7, %xmm1 + LONG $0xd474f9c5 // vpcmpeqb %xmm4, %xmm0, %xmm2 + LONG $0xdd74f9c5 // vpcmpeqb %xmm5, %xmm0, %xmm3 + LONG $0xd2ebe1c5 // vpor %xmm2, %xmm3, %xmm2 + LONG $0x7f7ac1c4; WORD $0x2404 // vmovdqu %xmm0, (%r12) + LONG $0xc664f9c5 // vpcmpgtb %xmm6, %xmm0, %xmm0 + LONG $0xc0dbf1c5 // vpand %xmm0, %xmm1, %xmm0 + LONG $0xc0ebe9c5 // vpor %xmm0, %xmm2, %xmm0 + LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx + TESTW CX, CX + JNE LBB5_32 + ADDQ $16, R15 + ADDQ $16, R12 + LEAQ -16(R9), SI + LEAQ -16(R13), CX + CMPQ R9, $31 + SETGT R14 + CMPQ R9, $32 + JL LBB5_20 + MOVQ SI, R9 + CMPQ R13, $31 + MOVQ CX, R13 + JG LBB5_17 + +LBB5_20: + TESTB R14, R14 + JE LBB5_27 + +LBB5_21: + LONG $0x6f7ac1c4; BYTE $0x07 // vmovdqu (%r15), %xmm0 + LONG $0xc864c1c5 // vpcmpgtb %xmm0, %xmm7, %xmm1 + LONG $0xd474f9c5 // vpcmpeqb %xmm4, %xmm0, %xmm2 + LONG $0xdd74f9c5 // vpcmpeqb %xmm5, %xmm0, %xmm3 + LONG $0xd2ebe1c5 // vpor %xmm2, %xmm3, %xmm2 + LONG $0xde64f9c5 // vpcmpgtb %xmm6, %xmm0, %xmm3 + LONG $0xcbdbf1c5 // vpand %xmm3, %xmm1, %xmm1 + LONG $0xc9ebe9c5 // vpor %xmm1, %xmm2, %xmm1 + LONG $0xd1d7f9c5 // vpmovmskb %xmm1, %edx + ORL $65536, DX + BSFL DX, DX + LONG $0x7ef9e1c4; BYTE $0xc6 // vmovq %xmm0, %rsi + CMPQ CX, DX + MOVQ BX, R14 + JGE LBB5_51 + CMPQ CX, $8 + JB LBB5_54 + MOVQ SI, 0(R12) + LEAQ 8(R15), SI + ADDQ $8, R12 + LEAQ -8(CX), BX + CMPQ BX, $4 + JAE LBB5_81 + +LBB5_56: + CMPQ BX, $2 + JB LBB5_57 + +LBB5_82: + MOVWLZX 0(SI), DX + MOVW DX, 0(R12) + ADDQ $2, SI + ADDQ $2, R12 + ADDQ $-2, BX + TESTQ BX, BX + JNE LBB5_58 + JMP LBB5_59 + +LBB5_24: + CMPL CX, $16 + JB LBB5_40 + MOVQ BX, 0(R12) + MOVQ SI, 8(R12) + LEAQ 16(R15), SI + ADDQ $16, R12 + LEAQ -16(CX), BX + CMPQ BX, $8 + JAE LBB5_41 + JMP LBB5_42 + +LBB5_26: + MOVQ R13, CX + MOVQ R9, SI + QUAD $0xfffffc340d6f7ec5 // vmovdqu $-972(%rip), %ymm9 /* LCPI5_0(%rip) */ + QUAD $0xfffffc4c156f7ec5 // vmovdqu $-948(%rip), %ymm10 /* LCPI5_1(%rip) */ + QUAD $0xfffffc641d6f7ec5 // vmovdqu $-924(%rip), %ymm11 /* LCPI5_2(%rip) */ + LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 + QUAD $0xfffffc773d6ffac5 // vmovdqu $-905(%rip), %xmm7 /* LCPI5_3(%rip) */ + QUAD $0xfffffc7f256ffac5 // vmovdqu $-897(%rip), %xmm4 /* LCPI5_4(%rip) */ + QUAD $0xfffffc872d6ffac5 // vmovdqu $-889(%rip), %xmm5 /* LCPI5_5(%rip) */ + LONG $0xf676c9c5 // vpcmpeqd %xmm6, %xmm6, %xmm6 + TESTB R14, R14 + JNE LBB5_21 + +LBB5_27: + TESTQ CX, CX + MOVQ BX, R14 + LONG $0x120d8d4c; WORD $0x0032; BYTE $0x00 // leaq $12818(%rip), %r9 /* __SingleQuoteTab(%rip) */ + JLE LBB5_60 + MOVQ SI, DX + TESTQ SI, SI + JLE LBB5_61 + +LBB5_29: + MOVBLZX 0(R15), BX + MOVQ BX, DX + SHLQ $4, DX + CMPQ 0(DX)(R9*1), $0 + JNE LBB5_53 + LEAQ -1(SI), DX + INCQ R15 + MOVB BX, 0(R12) + CMPQ SI, $2 + JL LBB5_61 + LEAQ -1(CX), BX + INCQ R12 + MOVQ DX, SI + CMPQ CX, $1 + MOVQ BX, CX + JG LBB5_29 + JMP LBB5_61 + +LBB5_32: + MOVWLZX CX, CX + SUBQ AX, R15 + BSFL CX, R13 + ADDQ R15, R13 + MOVQ BX, R14 + MOVQ -56(BP), DX + MOVQ -48(BP), R12 + TESTQ R13, R13 + JNS LBB5_69 + JMP LBB5_88 + +LBB5_33: + MOVQ R15, R9 + MOVQ R13, SI + CMPQ SI, $8 + JB LBB5_35 + +LBB5_34: + MOVQ 0(R9), CX + MOVQ CX, 0(R12) + ADDQ $8, R9 + ADDQ $8, R12 + ADDQ $-8, SI + +LBB5_35: + CMPQ SI, $4 + JB LBB5_36 + MOVL 0(R9), CX + MOVL CX, 0(R12) + ADDQ $4, R9 + ADDQ $4, R12 + ADDQ $-4, SI + CMPQ SI, $2 + JAE LBB5_48 + +LBB5_37: + TESTQ SI, SI + JE LBB5_39 + +LBB5_38: + MOVB 0(R9), CX + MOVB CX, 0(R12) + +LBB5_39: + SUBQ AX, R13 + ADDQ R15, R13 + NOTQ R13 + MOVQ -56(BP), DX + MOVQ -48(BP), R12 + TESTQ R13, R13 + JNS LBB5_69 + JMP LBB5_88 + +LBB5_36: + CMPQ SI, $2 + JB LBB5_37 + +LBB5_48: + MOVWLZX 0(R9), CX + MOVW CX, 0(R12) + ADDQ $2, R9 + ADDQ $2, R12 + ADDQ $-2, SI + TESTQ SI, SI + JNE LBB5_38 + JMP LBB5_39 + +LBB5_40: + MOVQ R15, SI + MOVQ CX, BX + CMPQ BX, $8 + JB LBB5_42 + +LBB5_41: + MOVQ 0(SI), DX + MOVQ DX, 0(R12) + ADDQ $8, SI + ADDQ $8, R12 + ADDQ $-8, BX + +LBB5_42: + CMPQ BX, $4 + JB LBB5_43 + MOVL 0(SI), DX + MOVL DX, 0(R12) + ADDQ $4, SI + ADDQ $4, R12 + ADDQ $-4, BX + CMPQ BX, $2 + JAE LBB5_50 + +LBB5_44: + TESTQ BX, BX + JE LBB5_46 + +LBB5_45: + MOVB 0(SI), DX + MOVB DX, 0(R12) + +LBB5_46: + SUBQ AX, R15 + ADDQ CX, R15 + JMP LBB5_68 + +LBB5_43: + CMPQ BX, $2 + JB LBB5_44 + +LBB5_50: + MOVWLZX 0(SI), DX + MOVW DX, 0(R12) + ADDQ $2, SI + ADDQ $2, R12 + ADDQ $-2, BX + TESTQ BX, BX + JNE LBB5_45 + JMP LBB5_46 + +LBB5_51: + CMPL DX, $8 + JB LBB5_62 + MOVQ SI, 0(R12) + LEAQ 8(R15), R9 + ADDQ $8, R12 + LEAQ -8(DX), SI + CMPQ SI, $4 + JAE LBB5_83 + +LBB5_64: + CMPQ SI, $2 + JB LBB5_65 + +LBB5_84: + MOVWLZX 0(R9), CX + MOVW CX, 0(R12) + ADDQ $2, R9 + ADDQ $2, R12 + ADDQ $-2, SI + TESTQ SI, SI + JNE LBB5_66 + JMP LBB5_67 + +LBB5_53: + SUBQ AX, R15 + JMP LBB5_68 + +LBB5_54: + MOVQ R15, SI + MOVQ CX, BX + CMPQ BX, $4 + JB LBB5_56 + +LBB5_81: + MOVL 0(SI), DX + MOVL DX, 0(R12) + ADDQ $4, SI + ADDQ $4, R12 + ADDQ $-4, BX + CMPQ BX, $2 + JAE LBB5_82 + +LBB5_57: + TESTQ BX, BX + JE LBB5_59 + +LBB5_58: + MOVB 0(SI), DX + MOVB DX, 0(R12) + +LBB5_59: + SUBQ AX, CX + ADDQ R15, CX + NOTQ CX + MOVQ CX, R13 + MOVQ -56(BP), DX + MOVQ -48(BP), R12 + TESTQ R13, R13 + JNS LBB5_69 + JMP LBB5_88 + +LBB5_60: + MOVQ SI, DX + +LBB5_61: + SUBQ AX, R15 + NEGQ DX + SBBQ R13, R13 + XORQ R15, R13 + MOVQ -56(BP), DX + MOVQ -48(BP), R12 + TESTQ R13, R13 + JNS LBB5_69 + JMP LBB5_88 + +LBB5_62: + MOVQ R15, R9 + MOVQ DX, SI + CMPQ SI, $4 + JB LBB5_64 + +LBB5_83: + MOVL 0(R9), CX + MOVL CX, 0(R12) + ADDQ $4, R9 + ADDQ $4, R12 + ADDQ $-4, SI + CMPQ SI, $2 + JAE LBB5_84 + +LBB5_65: + TESTQ SI, SI + JE LBB5_67 + +LBB5_66: + MOVB 0(R9), CX + MOVB CX, 0(R12) + +LBB5_67: + SUBQ AX, R15 + ADDQ DX, R15 + +LBB5_68: + MOVQ R15, R13 + MOVQ -56(BP), DX + MOVQ -48(BP), R12 + TESTQ R13, R13 + JS LBB5_88 + +LBB5_69: + ADDQ R13, AX + ADDQ R13, R8 + CMPQ DI, R13 + JE LBB5_85 + SUBQ R13, R11 + SUBQ DI, R13 + JMP LBB5_72 + +LBB5_71: + INCQ AX + ADDQ SI, R8 + INCQ R13 + JE LBB5_85 + +LBB5_72: + MOVBLZX 0(AX), BX + SHLQ $4, BX + MOVQ 0(R10)(BX*1), CX + TESTL CX, CX + JE LBB5_80 + MOVLQSX CX, SI + SUBQ SI, R11 + JL LBB5_86 + LEAQ 8(R10)(BX*1), R15 + CMPQ SI, $4 + JB LBB5_76 + MOVL 0(R15), CX + MOVL CX, 0(R8) + LEAQ 12(R10)(BX*1), R15 + LEAQ 4(R8), R9 + LEAQ -4(SI), BX + CMPQ BX, $2 + JAE LBB5_77 + JMP LBB5_78 + +LBB5_76: + MOVQ R8, R9 + MOVQ SI, BX + CMPQ BX, $2 + JB LBB5_78 + +LBB5_77: + MOVWLZX 0(R15), CX + MOVW CX, 0(R9) + ADDQ $2, R15 + ADDQ $2, R9 + ADDQ $-2, BX + +LBB5_78: + TESTQ BX, BX + JE LBB5_71 + MOVBLZX 0(R15), CX + MOVB CX, 0(R9) + JMP LBB5_71 + +LBB5_80: + MOVQ R13, SI + NEGQ SI + TESTQ R13, R13 + JNE LBB5_2 + +LBB5_85: + SUBQ DX, R8 + MOVQ R8, 0(R14) + SUBQ R12, AX + JMP LBB5_87 + +LBB5_86: + SUBQ DX, R8 + MOVQ R8, 0(R14) + NOTQ AX + ADDQ R12, AX + +LBB5_87: + ADDQ $16, SP + BYTE $0x5b // popq %rbx + WORD $0x5c41 // popq %r12 + WORD $0x5d41 // popq %r13 + WORD $0x5e41 // popq %r14 + WORD $0x5f41 // popq %r15 + BYTE $0x5d // popq %rbp + WORD $0xf8c5; BYTE $0x77 // vzeroupper + RET + +LBB5_88: + SUBQ DX, R8 + MOVQ R13, CX + NOTQ CX + ADDQ R8, CX + MOVQ CX, 0(R14) + SUBQ AX, R12 + ADDQ R13, R12 + MOVQ R12, AX + JMP LBB5_87 + +LCPI6_0: + QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + +LCPI6_1: QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' _unquote: @@ -2309,26 +2176,26 @@ _unquote: BYTE $0x53 // pushq %rbx BYTE $0x50 // pushq %rax TESTQ SI, SI - JE LBB8_1 + JE LBB6_1 MOVQ CX, -48(BP) MOVL R8, R10 ANDL $1, R10 - QUAD $0xffffffaa0d6ffec5 // vmovdqu $-86(%rip), %ymm1 /* LCPI8_0(%rip) */ - QUAD $0xffffffc2156ffac5 // vmovdqu $-62(%rip), %xmm2 /* LCPI8_1(%rip) */ + QUAD $0xffffffaa0d6ffec5 // vmovdqu $-86(%rip), %ymm1 /* LCPI6_0(%rip) */ + QUAD $0xffffffc2156ffac5 // vmovdqu $-62(%rip), %xmm2 /* LCPI6_1(%rip) */ MOVQ DI, R9 - MOVQ SI, R15 + MOVQ SI, R14 MOVQ DX, AX - JMP LBB8_3 + JMP LBB6_3 -LBB8_1: - XORL R15, R15 +LBB6_1: + XORL R14, R14 MOVQ DX, AX -LBB8_95: - ADDQ R15, AX +LBB6_95: + ADDQ R14, AX SUBQ DX, AX -LBB8_96: +LBB6_96: ADDQ $8, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 @@ -2339,333 +2206,330 @@ LBB8_96: WORD $0xf8c5; BYTE $0x77 // vzeroupper RET -LBB8_53: +LBB6_53: MOVB R11, 0(AX) INCQ AX -LBB8_54: - MOVQ R13, R15 - MOVQ R12, R9 +LBB6_54: + MOVQ R12, R14 + MOVQ R15, R9 -LBB8_93: - TESTQ R15, R15 - JE LBB8_94 +LBB6_93: + TESTQ R14, R14 + JE LBB6_94 -LBB8_3: +LBB6_3: CMPB 0(R9), $92 - JNE LBB8_5 + JNE LBB6_5 XORL BX, BX - JMP LBB8_20 + JMP LBB6_20 -LBB8_5: - MOVQ R15, R13 - MOVQ AX, R14 - MOVQ R9, R12 - CMPQ R15, $32 - JL LBB8_10 - MOVQ R9, R12 - MOVQ AX, R14 - MOVQ R15, R11 +LBB6_5: + MOVQ R14, R12 + MOVQ AX, R13 + MOVQ R9, R15 + CMPQ R14, $32 + JL LBB6_10 + MOVQ R9, R15 + MOVQ AX, R13 + MOVQ R14, R11 -LBB8_7: - LONG $0x6f7ec1c4; WORD $0x2404 // vmovdqu (%r12), %ymm0 - LONG $0x7f7ec1c4; BYTE $0x06 // vmovdqu %ymm0, (%r14) +LBB6_7: + LONG $0x6f7ec1c4; BYTE $0x07 // vmovdqu (%r15), %ymm0 + LONG $0x7f7ec1c4; WORD $0x0045 // vmovdqu %ymm0, (%r13) LONG $0xc174fdc5 // vpcmpeqb %ymm1, %ymm0, %ymm0 LONG $0xc8d7fdc5 // vpmovmskb %ymm0, %ecx TESTL CX, CX - JNE LBB8_8 - ADDQ $32, R12 - ADDQ $32, R14 - LEAQ -32(R11), R13 + JNE LBB6_8 + ADDQ $32, R15 + ADDQ $32, R13 + LEAQ -32(R11), R12 CMPQ R11, $63 - MOVQ R13, R11 - JG LBB8_7 + MOVQ R12, R11 + JG LBB6_7 -LBB8_10: +LBB6_10: WORD $0xf8c5; BYTE $0x77 // vzeroupper - QUAD $0xffffff24156ffac5 // vmovdqu $-220(%rip), %xmm2 /* LCPI8_1(%rip) */ - CMPQ R13, $16 - JL LBB8_11 + QUAD $0xffffff24156ffac5 // vmovdqu $-220(%rip), %xmm2 /* LCPI6_1(%rip) */ + CMPQ R12, $16 + JL LBB6_11 -LBB8_16: - LONG $0x6f7ac1c4; WORD $0x2404 // vmovdqu (%r12), %xmm0 - LONG $0x7f7ac1c4; BYTE $0x06 // vmovdqu %xmm0, (%r14) +LBB6_16: + LONG $0x6f7ac1c4; BYTE $0x07 // vmovdqu (%r15), %xmm0 + LONG $0x7f7ac1c4; WORD $0x0045 // vmovdqu %xmm0, (%r13) LONG $0xc274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm0 LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx TESTW CX, CX - JNE LBB8_17 - ADDQ $16, R12 - ADDQ $16, R14 - LEAQ -16(R13), CX - CMPQ R13, $31 - MOVQ CX, R13 - JG LBB8_16 + JNE LBB6_17 + ADDQ $16, R15 + ADDQ $16, R13 + LEAQ -16(R12), CX + CMPQ R12, $31 + MOVQ CX, R12 + JG LBB6_16 -LBB8_11: - TESTQ R13, R13 - JE LBB8_95 +LBB6_11: + TESTQ R12, R12 + JE LBB6_95 XORL CX, CX - QUAD $0xfffffebe0d6ffec5 // vmovdqu $-322(%rip), %ymm1 /* LCPI8_0(%rip) */ + QUAD $0xfffffebd0d6ffec5 // vmovdqu $-323(%rip), %ymm1 /* LCPI6_0(%rip) */ -LBB8_13: - MOVBLZX 0(R12)(CX*1), BX +LBB6_13: + MOVBLZX 0(R15)(CX*1), BX CMPB BX, $92 - JE LBB8_18 - MOVB BX, 0(R14)(CX*1) + JE LBB6_18 + MOVB BX, 0(R13)(CX*1) INCQ CX - CMPQ R13, CX - JNE LBB8_13 - JMP LBB8_95 + CMPQ R12, CX + JNE LBB6_13 + JMP LBB6_95 -LBB8_18: - ADDQ CX, R12 - SUBQ R9, R12 - MOVQ R12, BX +LBB6_18: + ADDQ CX, R15 + SUBQ R9, R15 + MOVQ R15, BX CMPQ BX, $-1 - JNE LBB8_20 - JMP LBB8_95 + JNE LBB6_20 + JMP LBB6_95 -LBB8_8: - MOVL CX, CX - MOVQ $4294967296, BX - ORQ BX, CX - SUBQ R9, R12 - BSFQ CX, BX - ADDQ R12, BX - CMPQ BX, $-1 - JNE LBB8_20 - JMP LBB8_95 - -LBB8_17: - MOVWLZX CX, CX - SUBQ R9, R12 - ORQ $65536, CX +LBB6_8: + MOVLQSX CX, CX + SUBQ R9, R15 BSFQ CX, BX - ADDQ R12, BX - QUAD $0xfffffe4f0d6ffec5 // vmovdqu $-433(%rip), %ymm1 /* LCPI8_0(%rip) */ + ADDQ R15, BX CMPQ BX, $-1 - JE LBB8_95 + JNE LBB6_20 + JMP LBB6_95 -LBB8_20: +LBB6_17: + MOVWLZX CX, CX + SUBQ R9, R15 + BSFQ CX, BX + ADDQ R15, BX + QUAD $0xfffffe600d6ffec5 // vmovdqu $-416(%rip), %ymm1 /* LCPI6_0(%rip) */ + CMPQ BX, $-1 + JE LBB6_95 + +LBB6_20: LEAQ 2(BX), CX - SUBQ CX, R15 - JS LBB8_21 + SUBQ CX, R14 + JS LBB6_21 LEAQ 2(R9)(BX*1), R9 TESTQ R10, R10 - JNE LBB8_23 + JNE LBB6_23 -LBB8_34: +LBB6_34: ADDQ BX, AX MOVBLZX -1(R9), CX - LONG $0x941d8d48; WORD $0x0028; BYTE $0x00 // leaq $10388(%rip), %rbx /* __UnquoteTab(%rip) */ + LONG $0xc41d8d48; WORD $0x004c; BYTE $0x00 // leaq $19652(%rip), %rbx /* __UnquoteTab(%rip) */ MOVB 0(CX)(BX*1), CX CMPB CX, $-1 - JE LBB8_38 + JE LBB6_38 TESTB CX, CX - JE LBB8_36 + JE LBB6_36 MOVB CX, 0(AX) INCQ AX - JMP LBB8_93 + JMP LBB6_93 -LBB8_38: - CMPQ R15, $3 - JLE LBB8_21 - MOVL 0(R9), R12 - MOVL R12, BX - NOTL BX - LEAL -808464432(R12), CX - ANDL $-2139062144, BX - TESTL CX, BX - JNE LBB8_43 - LEAL 421075225(R12), CX - ORL R12, CX - TESTL $-2139062144, CX - JNE LBB8_43 - MOVL R12, CX - ANDL $2139062143, CX +LBB6_38: + CMPQ R14, $3 + JLE LBB6_21 + MOVL 0(R9), R15 + MOVL R15, CX + NOTL CX + LEAL -808464432(R15), BX + ANDL $-2139062144, CX + TESTL BX, CX + JNE LBB6_43 + LEAL 421075225(R15), BX + ORL R15, BX + TESTL $-2139062144, BX + JNE LBB6_43 + MOVL R15, BX + ANDL $2139062143, BX MOVL $-1061109568, R11 - SUBL CX, R11 - LEAL 1179010630(CX), R14 - ANDL BX, R11 - TESTL R14, R11 - JNE LBB8_43 + SUBL BX, R11 + LEAL 1179010630(BX), R12 + ANDL CX, R11 + TESTL R12, R11 + JNE LBB6_43 MOVL $-522133280, R11 - SUBL CX, R11 - ADDL $960051513, CX - ANDL R11, BX - TESTL CX, BX - JNE LBB8_43 - BSWAPL R12 - MOVL R12, CX + SUBL BX, R11 + ADDL $960051513, BX + ANDL R11, CX + TESTL BX, CX + JNE LBB6_43 + BSWAPL R15 + MOVL R15, CX SHRL $4, CX NOTL CX ANDL $16843009, CX LEAL 0(CX)(CX*8), CX - ANDL $252645135, R12 - ADDL CX, R12 - MOVL R12, R11 + ANDL $252645135, R15 + ADDL CX, R15 + MOVL R15, R11 SHRL $4, R11 - ORL R12, R11 - MOVL R11, R14 - SHRL $8, R14 - ANDL $65280, R14 - MOVBLZX R11, BX - ORL R14, BX - LEAQ 4(R9), R12 - LEAQ -4(R15), R13 - CMPL BX, $127 - JBE LBB8_53 - CMPL BX, $2047 - JBE LBB8_56 + ORL R15, R11 MOVL R11, CX - ANDL $16252928, CX - CMPL CX, $14155776 - JE LBB8_59 - SHRL $12, R14 - ORB $-32, R14 - MOVB R14, 0(AX) - SHRL $6, BX - ANDB $63, BX - ORB $-128, BX - MOVB BX, 1(AX) + SHRL $8, CX + ANDL $65280, CX + MOVBLZX R11, R13 + ORL CX, R13 + LEAQ 4(R9), R15 + LEAQ -4(R14), R12 + CMPL R13, $127 + JBE LBB6_53 + CMPL R13, $2047 + JBE LBB6_56 + MOVL R11, BX + ANDL $16252928, BX + CMPL BX, $14155776 + JE LBB6_59 + SHRL $12, CX + ORB $-32, CX + MOVB CX, 0(AX) + SHRL $6, R13 + ANDB $63, R13 + ORB $-128, R13 + MOVB R13, 1(AX) ANDB $63, R11 ORB $-128, R11 MOVB R11, 2(AX) ADDQ $3, AX - JMP LBB8_54 + JMP LBB6_54 -LBB8_23: - TESTL R15, R15 - JE LBB8_21 +LBB6_23: + TESTL R14, R14 + JE LBB6_21 CMPB -1(R9), $92 - JNE LBB8_25 + JNE LBB6_25 CMPB 0(R9), $92 - JNE LBB8_33 - CMPL R15, $1 - JLE LBB8_21 + JNE LBB6_33 + CMPL R14, $1 + JLE LBB6_21 MOVB 1(R9), CX CMPB CX, $34 - JE LBB8_32 + JE LBB6_32 CMPB CX, $92 - JNE LBB8_31 + JNE LBB6_31 -LBB8_32: +LBB6_32: INCQ R9 - DECQ R15 + DECQ R14 -LBB8_33: +LBB6_33: INCQ R9 - DECQ R15 - JMP LBB8_34 + DECQ R14 + JMP LBB6_34 -LBB8_56: - SHRL $6, BX - ORB $-64, BX - MOVB BX, 0(AX) +LBB6_56: + SHRL $6, R13 + ORB $-64, R13 + MOVB R13, 0(AX) ANDB $63, R11 ORB $-128, R11 MOVB R11, 1(AX) ADDQ $2, AX - JMP LBB8_54 + JMP LBB6_54 -LBB8_59: +LBB6_59: TESTQ R10, R10 - JNE LBB8_61 - MOVQ R13, R15 - MOVQ R12, R9 - JMP LBB8_65 + JNE LBB6_61 + MOVQ R12, R14 + MOVQ R15, R9 + JMP LBB6_65 -LBB8_61: - CMPQ R15, $4 - JLE LBB8_21 - CMPB 0(R12), $92 - JNE LBB8_63 - ADDQ $-5, R15 +LBB6_61: + CMPQ R14, $4 + JLE LBB6_21 + CMPB 0(R15), $92 + JNE LBB6_63 + ADDQ $-5, R14 ADDQ $5, R9 -LBB8_65: - CMPL BX, $56319 - JA LBB8_69 - CMPQ R15, $6 - JL LBB8_69 +LBB6_65: + CMPL R13, $56319 + JA LBB6_69 + CMPQ R14, $6 + JL LBB6_69 CMPB 0(R9), $92 - JNE LBB8_69 + JNE LBB6_69 CMPB 1(R9), $117 - JNE LBB8_69 - MOVL 2(R9), R14 - MOVL R14, R12 - NOTL R12 - LEAL -808464432(R14), CX - ANDL $-2139062144, R12 - TESTL CX, R12 - JNE LBB8_77 - LEAL 421075225(R14), CX - ORL R14, CX - TESTL $-2139062144, CX - JNE LBB8_77 - MOVL R14, CX - ANDL $2139062143, CX - MOVL $-1061109568, R11 - SUBL CX, R11 - LEAL 1179010630(CX), R13 - ANDL R12, R11 - TESTL R13, R11 - JNE LBB8_77 - MOVL $-522133280, R11 - SUBL CX, R11 - ADDL $960051513, CX - ANDL R11, R12 - TESTL CX, R12 - JNE LBB8_77 - BSWAPL R14 - MOVL R14, CX + JNE LBB6_69 + MOVL 2(R9), R11 + MOVL R11, CX + NOTL CX + LEAL -808464432(R11), BX + ANDL $-2139062144, CX + TESTL BX, CX + JNE LBB6_77 + LEAL 421075225(R11), BX + ORL R11, BX + TESTL $-2139062144, BX + JNE LBB6_77 + MOVL R11, BX + ANDL $2139062143, BX + MOVL $-1061109568, R15 + SUBL BX, R15 + LEAL 1179010630(BX), R12 + ANDL CX, R15 + TESTL R12, R15 + JNE LBB6_77 + MOVL $-522133280, R15 + SUBL BX, R15 + ADDL $960051513, BX + ANDL R15, CX + TESTL BX, CX + JNE LBB6_77 + BSWAPL R11 + MOVL R11, CX SHRL $4, CX NOTL CX ANDL $16843009, CX LEAL 0(CX)(CX*8), CX - ANDL $252645135, R14 - ADDL CX, R14 - MOVL R14, R11 - SHRL $4, R11 - ORL R14, R11 + ANDL $252645135, R11 + ADDL CX, R11 + MOVL R11, BX + SHRL $4, BX + ORL R11, BX ADDQ $6, R9 - ADDQ $-6, R15 - MOVL R11, CX + ADDQ $-6, R14 + MOVL BX, CX ANDL $16515072, CX CMPL CX, $14417920 - JNE LBB8_87 - MOVL R11, CX + JNE LBB6_87 + MOVL BX, CX SHRL $8, CX ANDL $65280, CX - MOVBLZX R11, R11 - ORL CX, R11 - SHLL $10, BX - LEAL -56613888(BX)(R11*1), BX + MOVBLZX BX, BX + ORL CX, BX + SHLL $10, R13 + LEAL -56613888(R13)(BX*1), BX CMPL BX, $1114112 - JB LBB8_92 + JB LBB6_92 TESTB $2, R8 - JE LBB8_88 - JMP LBB8_70 + JE LBB6_88 + JMP LBB6_70 -LBB8_69: +LBB6_69: TESTB $2, R8 - JE LBB8_71 + JE LBB6_71 -LBB8_70: +LBB6_70: MOVW $-16401, 0(AX) MOVB $-67, 2(AX) ADDQ $3, AX - JMP LBB8_93 + JMP LBB6_93 -LBB8_87: +LBB6_87: TESTB $2, R8 - JE LBB8_88 + JE LBB6_88 MOVL $-272777233, 0(AX) MOVW $-16961, 4(AX) ADDQ $6, AX - JMP LBB8_93 + JMP LBB6_93 -LBB8_92: +LBB6_92: MOVL BX, CX SHRL $18, CX ORB $-16, CX @@ -2684,9 +2548,9 @@ LBB8_92: ORB $-128, BX MOVB BX, 3(AX) ADDQ $4, AX - JMP LBB8_93 + JMP LBB6_93 -LBB8_43: +LBB6_43: MOVQ R9, DX SUBQ DI, DX MOVQ -48(BP), DI @@ -2695,105 +2559,105 @@ LBB8_43: LEAL -48(CX), SI MOVQ $-2, AX CMPB SI, $10 - JB LBB8_45 + JB LBB6_45 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_96 + JA LBB6_96 -LBB8_45: +LBB6_45: LEAQ 1(DX), CX MOVQ CX, 0(DI) MOVB 1(R9), CX LEAL -48(CX), SI CMPB SI, $10 - JB LBB8_47 + JB LBB6_47 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_96 + JA LBB6_96 -LBB8_47: +LBB6_47: LEAQ 2(DX), CX MOVQ CX, 0(DI) MOVB 2(R9), CX LEAL -48(CX), SI CMPB SI, $10 - JB LBB8_49 + JB LBB6_49 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_96 + JA LBB6_96 -LBB8_49: +LBB6_49: LEAQ 3(DX), CX MOVQ CX, 0(DI) MOVB 3(R9), CX LEAL -48(CX), SI CMPB SI, $10 - JB LBB8_51 + JB LBB6_51 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_96 + JA LBB6_96 -LBB8_51: +LBB6_51: ADDQ $4, DX MOVQ DX, 0(DI) - JMP LBB8_96 + JMP LBB6_96 -LBB8_21: +LBB6_21: MOVQ -48(BP), AX MOVQ SI, 0(AX) MOVQ $-1, AX - JMP LBB8_96 + JMP LBB6_96 -LBB8_36: +LBB6_36: NOTQ DI ADDQ DI, R9 MOVQ -48(BP), AX MOVQ R9, 0(AX) MOVQ $-3, AX - JMP LBB8_96 + JMP LBB6_96 -LBB8_94: - XORL R15, R15 - JMP LBB8_95 +LBB6_94: + XORL R14, R14 + JMP LBB6_95 -LBB8_88: +LBB6_88: SUBQ DI, R9 ADDQ $-4, R9 -LBB8_72: +LBB6_72: MOVQ -48(BP), AX MOVQ R9, 0(AX) MOVQ $-4, AX - JMP LBB8_96 + JMP LBB6_96 -LBB8_25: +LBB6_25: NOTQ DI ADDQ DI, R9 - JMP LBB8_26 + JMP LBB6_26 -LBB8_31: +LBB6_31: SUBQ DI, R9 INCQ R9 -LBB8_26: +LBB6_26: MOVQ -48(BP), AX MOVQ R9, 0(AX) MOVQ $-2, AX - JMP LBB8_96 + JMP LBB6_96 -LBB8_63: - SUBQ DI, R12 - ADDQ $-4, R12 +LBB6_63: + SUBQ DI, R15 + ADDQ $-4, R15 MOVQ -48(BP), AX - MOVQ R12, 0(AX) + MOVQ R15, 0(AX) MOVQ $-4, AX - JMP LBB8_96 + JMP LBB6_96 -LBB8_77: +LBB6_77: MOVQ R9, DX SUBQ DI, DX ADDQ $2, DX @@ -2803,109 +2667,312 @@ LBB8_77: LEAL -48(CX), SI MOVQ $-2, AX CMPB SI, $10 - JB LBB8_79 + JB LBB6_79 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_96 + JA LBB6_96 -LBB8_79: +LBB6_79: LEAQ 1(DX), CX MOVQ -48(BP), SI MOVQ CX, 0(SI) MOVB 3(R9), CX LEAL -48(CX), SI CMPB SI, $10 - JB LBB8_81 + JB LBB6_81 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_96 + JA LBB6_96 -LBB8_81: +LBB6_81: LEAQ 2(DX), CX MOVQ -48(BP), SI MOVQ CX, 0(SI) MOVB 4(R9), CX LEAL -48(CX), SI CMPB SI, $10 - JB LBB8_83 + JB LBB6_83 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_96 + JA LBB6_96 -LBB8_83: +LBB6_83: LEAQ 3(DX), CX MOVQ -48(BP), SI MOVQ CX, 0(SI) MOVB 5(R9), CX LEAL -48(CX), SI CMPB SI, $10 - JB LBB8_85 + JB LBB6_85 ANDB $-33, CX ADDB $-65, CX CMPB CX, $5 - JA LBB8_96 + JA LBB6_96 -LBB8_85: +LBB6_85: ADDQ $4, DX MOVQ -48(BP), CX MOVQ DX, 0(CX) - JMP LBB8_96 + JMP LBB6_96 -LBB8_71: +LBB6_71: LEAQ 4(R10)(DI*1), AX SUBQ AX, R9 - JMP LBB8_72 + JMP LBB6_72 + +LCPI7_0: + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + +LCPI7_1: + QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' + QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' + +LCPI7_2: + QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' + QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' + +LCPI7_3: + QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' + QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' + +LCPI7_4: + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + +LCPI7_5: + QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' + +LCPI7_6: + QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' + +LCPI7_7: + QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' _value: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - SUBQ $32, SP - MOVL R8, R12 - MOVQ CX, R14 - MOVQ SI, BX - MOVQ DI, R15 - MOVQ DI, -56(BP) - MOVQ SI, -48(BP) - LONG $0xffe0e0e8; BYTE $0xff // callq _lspace - MOVQ AX, -40(BP) - CMPQ AX, BX - JAE LBB9_4 - LEAQ 1(AX), CX - MOVQ CX, -40(BP) - MOVBLSX 0(R15)(AX*1), DX - CMPL DX, $125 - JA LBB9_8 - LONG $0x1b358d48; WORD $0x0002; BYTE $0x00 // leaq $539(%rip), %rsi /* LJTI9_0(%rip) */ - MOVLQSX 0(SI)(DX*4), DX - ADDQ SI, DX - JMP DX + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5741 // pushq %r15 + WORD $0x5641 // pushq %r14 + WORD $0x5441 // pushq %r12 + BYTE $0x53 // pushq %rbx + SUBQ $32, SP + MOVQ CX, R14 + MOVQ DX, R12 + MOVQ SI, R15 + MOVQ DX, -40(BP) + MOVQ DI, -56(BP) + MOVQ SI, -48(BP) + MOVQ DX, AX + CMPQ DX, SI + JAE LBB7_18 + MOVB 0(DI)(R12*1), CX + CMPB CX, $13 + JE LBB7_5 + CMPB CX, $32 + JE LBB7_5 + LEAL -9(CX), AX + CMPB AX, $1 + JBE LBB7_5 + MOVQ R12, AX + JMP LBB7_45 -LBB9_3: +LBB7_5: + LEAQ 1(R12), AX + CMPQ AX, R15 + JAE LBB7_18 + MOVB 0(DI)(AX*1), CX + CMPB CX, $13 + JE LBB7_9 + CMPB CX, $32 + JE LBB7_9 + LEAL -9(CX), DX + CMPB DX, $1 + JA LBB7_45 + +LBB7_9: + LEAQ 2(R12), AX + CMPQ AX, R15 + JAE LBB7_18 + MOVB 0(DI)(AX*1), CX + CMPB CX, $13 + JE LBB7_13 + CMPB CX, $32 + JE LBB7_13 + LEAL -9(CX), DX + CMPB DX, $1 + JA LBB7_45 + +LBB7_13: + LEAQ 3(R12), AX + CMPQ AX, R15 + JAE LBB7_18 + MOVB 0(DI)(AX*1), CX + CMPB CX, $13 + JE LBB7_17 + CMPB CX, $32 + JE LBB7_17 + LEAL -9(CX), DX + CMPB DX, $1 + JA LBB7_45 + +LBB7_17: + LEAQ 4(R12), AX + +LBB7_18: + LEAQ 0(DI)(AX*1), CX + MOVQ R15, DX + SUBQ AX, DX + JE LBB7_26 + MOVL CX, AX + ANDL $31, AX + TESTQ AX, AX + JE LBB7_26 + LEAQ -1(DX), R10 + XORL BX, BX + MOVQ $4294977024, R9 + +LBB7_21: + MOVBLSX 0(CX)(BX*1), SI + CMPL SI, $32 + JA LBB7_41 + BTQ SI, R9 + JAE LBB7_41 + LEAQ 1(BX), SI + CMPQ R10, BX + JE LBB7_25 + LEAQ 1(CX)(BX*1), AX + ANDL $31, AX + MOVQ SI, BX + TESTQ AX, AX + JNE LBB7_21 + +LBB7_25: + ADDQ SI, CX + SUBQ SI, DX + +LBB7_26: + CMPQ DX, $32 + JB LBB7_30 + QUAD $0xfffffe1b056ffec5 // vmovdqu $-485(%rip), %ymm0 /* LCPI7_0(%rip) */ + QUAD $0xfffffe330d6ffec5 // vmovdqu $-461(%rip), %ymm1 /* LCPI7_1(%rip) */ + QUAD $0xfffffe4b156ffec5 // vmovdqu $-437(%rip), %ymm2 /* LCPI7_2(%rip) */ + QUAD $0xfffffe631d6ffec5 // vmovdqu $-413(%rip), %ymm3 /* LCPI7_3(%rip) */ + +LBB7_28: + LONG $0x216ffdc5 // vmovdqa (%rcx), %ymm4 + LONG $0xe874ddc5 // vpcmpeqb %ymm0, %ymm4, %ymm5 + LONG $0xf174ddc5 // vpcmpeqb %ymm1, %ymm4, %ymm6 + LONG $0xeeebd5c5 // vpor %ymm6, %ymm5, %ymm5 + LONG $0xf274ddc5 // vpcmpeqb %ymm2, %ymm4, %ymm6 + LONG $0xe374ddc5 // vpcmpeqb %ymm3, %ymm4, %ymm4 + LONG $0xe6ebddc5 // vpor %ymm6, %ymm4, %ymm4 + LONG $0xe5ebddc5 // vpor %ymm5, %ymm4, %ymm4 + LONG $0xc4d7fdc5 // vpmovmskb %ymm4, %eax + CMPL AX, $-1 + JNE LBB7_40 + ADDQ $32, CX + ADDQ $-32, DX + CMPQ DX, $31 + JA LBB7_28 + +LBB7_30: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + CMPQ DX, $16 + JB LBB7_34 + QUAD $0xfffffe37056ffac5 // vmovdqu $-457(%rip), %xmm0 /* LCPI7_4(%rip) */ + QUAD $0xfffffe3f0d6ffac5 // vmovdqu $-449(%rip), %xmm1 /* LCPI7_5(%rip) */ + QUAD $0xfffffe47156ffac5 // vmovdqu $-441(%rip), %xmm2 /* LCPI7_6(%rip) */ + QUAD $0xfffffe4f1d6ffac5 // vmovdqu $-433(%rip), %xmm3 /* LCPI7_7(%rip) */ + +LBB7_32: + LONG $0x216ff9c5 // vmovdqa (%rcx), %xmm4 + LONG $0xe874d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm5 + LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 + LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 + LONG $0xf274d9c5 // vpcmpeqb %xmm2, %xmm4, %xmm6 + LONG $0xe374d9c5 // vpcmpeqb %xmm3, %xmm4, %xmm4 + LONG $0xe6ebd9c5 // vpor %xmm6, %xmm4, %xmm4 + LONG $0xe5ebd9c5 // vpor %xmm5, %xmm4, %xmm4 + LONG $0xc4d7f9c5 // vpmovmskb %xmm4, %eax + CMPW AX, $-1 + JNE LBB7_71 + ADDQ $16, CX + ADDQ $-16, DX + CMPQ DX, $15 + JA LBB7_32 + +LBB7_34: + TESTQ DX, DX + JE LBB7_42 + LEAQ 0(CX)(DX*1), SI + INCQ CX + MOVQ $4294977024, BX + MOVQ CX, AX + +LBB7_36: + MOVBLSX -1(AX), CX + CMPL CX, $32 + JA LBB7_87 + BTQ CX, BX + JAE LBB7_87 + DECQ DX + INCQ AX + TESTQ DX, DX + JNE LBB7_36 + MOVQ SI, CX + JMP LBB7_42 + +LBB7_40: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + SUBQ DI, CX + NOTL AX + WORD $0x9848 // cltq + BSFQ AX, AX + ADDQ CX, AX + JMP LBB7_43 + +LBB7_41: + ADDQ BX, CX + +LBB7_42: + SUBQ DI, CX + MOVQ CX, AX + +LBB7_43: + CMPQ AX, R15 + JAE LBB7_48 + MOVB 0(DI)(AX*1), CX + +LBB7_45: + LEAQ 1(AX), R12 + MOVQ R12, -40(BP) + MOVBLSX CX, CX + CMPL CX, $125 + JA LBB7_51 + LONG $0x3e158d48; WORD $0x0002; BYTE $0x00 // leaq $574(%rip), %rdx /* LJTI7_0(%rip) */ + MOVLQSX 0(DX)(CX*4), CX + ADDQ DX, CX + JMP CX + +LBB7_47: MOVQ AX, -40(BP) LEAQ -56(BP), DI LEAQ -40(BP), SI MOVQ R14, DX - LONG $0x000946e8; BYTE $0x00 // callq _vnumber + LONG $0x00071ae8; BYTE $0x00 // callq _vnumber MOVQ -40(BP), AX - JMP LBB9_7 + JMP LBB7_50 -LBB9_4: - MOVQ AX, CX - -LBB9_5: +LBB7_48: MOVQ $1, 0(R14) -LBB9_6: - MOVQ CX, AX +LBB7_49: + MOVQ R12, AX -LBB9_7: +LBB7_50: ADDQ $32, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 @@ -2914,732 +2981,595 @@ LBB9_7: BYTE $0x5d // popq %rbp RET -LBB9_8: +LBB7_51: MOVQ $-2, 0(R14) - JMP LBB9_7 + JMP LBB7_50 -LBB9_9: - LEAQ -56(BP), DI - LEAQ -40(BP), SI - MOVQ R14, DX - LONG $0x0003dde8; BYTE $0x00 // callq _vstring - MOVQ -40(BP), AX - JMP LBB9_7 +LBB7_52: + LEAQ 24(R14), CX + MOVQ R15, SI + MOVQ R12, DX + LONG $0x000476e8; BYTE $0x00 // callq _advance_string + TESTQ AX, AX + JS LBB7_72 + MOVQ AX, -40(BP) + MOVQ R12, 16(R14) + MOVL $7, CX + MOVQ CX, 0(R14) + JMP LBB7_50 -LBB9_10: +LBB7_54: XORL AX, AX - TESTL R12, R12 + TESTL R8, R8 SETEQ AX - MOVQ $-2, DX - MOVL $11, SI - JMP LBB9_22 + MOVQ $-2, CX + MOVL $11, DX + JMP LBB7_70 -LBB9_11: +LBB7_55: XORL AX, AX - TESTL R12, R12 + TESTL R8, R8 SETEQ AX - MOVQ $-2, DX - MOVL $10, SI - JMP LBB9_22 + MOVQ $-2, CX + MOVL $10, DX + JMP LBB7_70 -LBB9_12: +LBB7_56: MOVQ $5, 0(R14) - JMP LBB9_6 + JMP LBB7_49 -LBB9_13: - LEAQ -3(BX), CX +LBB7_57: + XORL AX, AX + TESTL R8, R8 + SETEQ AX + MOVQ $-2, CX + MOVL $12, DX + JMP LBB7_70 + +LBB7_58: + LEAQ -4(R15), CX CMPQ AX, CX - JAE LBB9_20 - MOVL 0(R15)(AX*1), DX + JAE LBB7_67 + MOVL 0(DI)(R12*1), DX + CMPL DX, $1702063201 + JNE LBB7_73 + ADDQ $5, AX + MOVQ AX, -40(BP) + MOVL $4, CX + JMP LBB7_85 + +LBB7_61: + LEAQ -3(R15), CX + CMPQ AX, CX + JAE LBB7_67 + MOVL 0(DI)(AX*1), DX CMPL DX, $1819047278 - JNE LBB9_28 + JNE LBB7_78 ADDQ $4, AX MOVQ AX, -40(BP) MOVL $2, CX - JMP LBB9_35 + JMP LBB7_85 -LBB9_16: - LEAQ -3(BX), CX +LBB7_64: + LEAQ -3(R15), CX CMPQ AX, CX - JAE LBB9_20 - MOVL 0(R15)(AX*1), DX + JAE LBB7_67 + MOVL 0(DI)(AX*1), DX CMPL DX, $1702195828 - JNE LBB9_31 + JNE LBB7_81 ADDQ $4, AX MOVQ AX, -40(BP) MOVL $3, CX - JMP LBB9_35 + JMP LBB7_85 -LBB9_19: - XORL AX, AX - TESTL R12, R12 - SETEQ AX - MOVQ $-2, DX - MOVL $13, SI - JMP LBB9_22 - -LBB9_20: - MOVQ BX, -40(BP) +LBB7_67: + MOVQ R15, -40(BP) MOVQ $-1, CX - JMP LBB9_36 + JMP LBB7_86 -LBB9_21: - XORL AX, AX - TESTL R12, R12 - SETEQ AX - MOVQ $-2, DX - MOVL $12, SI - -LBB9_22: - LONG $0xf2440f48 // cmoveq %rdx, %rsi - MOVQ SI, 0(R14) - SUBQ AX, CX - JMP LBB9_6 - -LBB9_23: - LEAQ -4(BX), DX - CMPQ AX, DX - JAE LBB9_27 - MOVL 0(R15)(CX*1), SI - CMPL SI, $1702063201 - JNE LBB9_37 - ADDQ $5, AX - MOVQ AX, -40(BP) - MOVL $4, DX - MOVQ AX, BX - JMP LBB9_42 - -LBB9_26: +LBB7_68: MOVQ $6, 0(R14) - JMP LBB9_6 + JMP LBB7_49 -LBB9_27: - MOVQ BX, -40(BP) - MOVQ $-1, DX - JMP LBB9_42 +LBB7_69: + XORL AX, AX + TESTL R8, R8 + SETEQ AX + MOVQ $-2, CX + MOVL $13, DX -LBB9_28: +LBB7_70: + LONG $0xd1440f48 // cmoveq %rcx, %rdx + MOVQ DX, 0(R14) + SUBQ AX, R12 + JMP LBB7_49 + +LBB7_71: + MOVWLZX AX, AX + SUBQ DI, CX + NOTL AX + BSFL AX, AX + ADDQ CX, AX + JMP LBB7_43 + +LBB7_72: + MOVQ R15, -40(BP) + MOVQ AX, 0(R14) + MOVQ R15, AX + JMP LBB7_50 + +LBB7_73: + MOVQ $-2, CX + CMPB DX, $97 + JNE LBB7_77 + MOVL $1702063201, AX + +LBB7_75: + SHRL $8, AX + MOVBLSX 1(DI)(R12*1), DX + INCQ R12 + MOVBLZX AX, SI + CMPL SI, DX + JE LBB7_75 + MOVQ R12, -40(BP) + +LBB7_77: + MOVQ R12, R15 + JMP LBB7_86 + +LBB7_78: MOVQ AX, -40(BP) MOVQ $-2, CX CMPB DX, $110 - JNE LBB9_35 + JNE LBB7_85 MOVL $1819047278, DX -LBB9_30: +LBB7_80: SHRL $8, DX - MOVBLSX 1(R15)(AX*1), SI + MOVBLSX 1(DI)(AX*1), SI INCQ AX - MOVBLZX DX, DI - CMPL DI, SI - JE LBB9_30 - JMP LBB9_34 + MOVBLZX DX, BX + CMPL BX, SI + JE LBB7_80 + JMP LBB7_84 -LBB9_31: +LBB7_81: MOVQ AX, -40(BP) MOVQ $-2, CX CMPB DX, $116 - JNE LBB9_35 + JNE LBB7_85 MOVL $1702195828, DX -LBB9_33: +LBB7_83: SHRL $8, DX - MOVBLSX 1(R15)(AX*1), SI + MOVBLSX 1(DI)(AX*1), SI INCQ AX - MOVBLZX DX, DI - CMPL DI, SI - JE LBB9_33 + MOVBLZX DX, BX + CMPL BX, SI + JE LBB7_83 -LBB9_34: +LBB7_84: MOVQ AX, -40(BP) -LBB9_35: - MOVQ AX, BX +LBB7_85: + MOVQ AX, R15 -LBB9_36: +LBB7_86: MOVQ CX, 0(R14) - MOVQ BX, AX - JMP LBB9_7 + MOVQ R15, AX + JMP LBB7_50 -LBB9_37: - MOVQ $-2, DX - CMPB SI, $97 - JNE LBB9_41 - MOVL $1702063201, AX +LBB7_87: + MOVQ DI, CX + NOTQ CX + ADDQ CX, AX + JMP LBB7_43 -LBB9_39: - SHRL $8, AX - MOVBLSX 1(R15)(CX*1), SI - INCQ CX - MOVBLZX AX, DI - CMPL DI, SI - JE LBB9_39 - MOVQ CX, -40(BP) - -LBB9_41: - MOVQ CX, BX - -LBB9_42: - MOVQ DX, 0(R14) - MOVQ BX, AX - JMP LBB9_7 - -// .set L9_0_set_5, LBB9_5-LJTI9_0 -// .set L9_0_set_8, LBB9_8-LJTI9_0 -// .set L9_0_set_9, LBB9_9-LJTI9_0 -// .set L9_0_set_10, LBB9_10-LJTI9_0 -// .set L9_0_set_3, LBB9_3-LJTI9_0 -// .set L9_0_set_11, LBB9_11-LJTI9_0 -// .set L9_0_set_12, LBB9_12-LJTI9_0 -// .set L9_0_set_21, LBB9_21-LJTI9_0 -// .set L9_0_set_23, LBB9_23-LJTI9_0 -// .set L9_0_set_13, LBB9_13-LJTI9_0 -// .set L9_0_set_16, LBB9_16-LJTI9_0 -// .set L9_0_set_26, LBB9_26-LJTI9_0 -// .set L9_0_set_19, LBB9_19-LJTI9_0 -LJTI9_0: - LONG $0xfffffe0b // .long L9_0_set_5 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe2b // .long L9_0_set_9 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe41 // .long L9_0_set_10 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffdee // .long L9_0_set_3 - LONG $0xfffffe5a // .long L9_0_set_11 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe73 // .long L9_0_set_12 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffef8 // .long L9_0_set_21 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xffffff1b // .long L9_0_set_23 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe7c // .long L9_0_set_13 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffea7 // .long L9_0_set_16 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xffffff49 // .long L9_0_set_26 - LONG $0xfffffe22 // .long L9_0_set_8 - LONG $0xfffffed2 // .long L9_0_set_19 - -LCPI10_0: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' +// .set L7_0_set_48, LBB7_48-LJTI7_0 +// .set L7_0_set_51, LBB7_51-LJTI7_0 +// .set L7_0_set_52, LBB7_52-LJTI7_0 +// .set L7_0_set_54, LBB7_54-LJTI7_0 +// .set L7_0_set_47, LBB7_47-LJTI7_0 +// .set L7_0_set_55, LBB7_55-LJTI7_0 +// .set L7_0_set_56, LBB7_56-LJTI7_0 +// .set L7_0_set_57, LBB7_57-LJTI7_0 +// .set L7_0_set_58, LBB7_58-LJTI7_0 +// .set L7_0_set_61, LBB7_61-LJTI7_0 +// .set L7_0_set_64, LBB7_64-LJTI7_0 +// .set L7_0_set_68, LBB7_68-LJTI7_0 +// .set L7_0_set_69, LBB7_69-LJTI7_0 +LJTI7_0: + LONG $0xfffffde5 // .long L7_0_set_48 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffe05 // .long L7_0_set_52 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffe2f // .long L7_0_set_54 + LONG $0xfffffdcb // .long L7_0_set_47 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdcb // .long L7_0_set_47 + LONG $0xfffffdcb // .long L7_0_set_47 + LONG $0xfffffdcb // .long L7_0_set_47 + LONG $0xfffffdcb // .long L7_0_set_47 + LONG $0xfffffdcb // .long L7_0_set_47 + LONG $0xfffffdcb // .long L7_0_set_47 + LONG $0xfffffdcb // .long L7_0_set_47 + LONG $0xfffffdcb // .long L7_0_set_47 + LONG $0xfffffdcb // .long L7_0_set_47 + LONG $0xfffffdcb // .long L7_0_set_47 + LONG $0xfffffe48 // .long L7_0_set_55 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffe61 // .long L7_0_set_56 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffe6a // .long L7_0_set_57 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffe83 // .long L7_0_set_58 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffeae // .long L7_0_set_61 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffed8 // .long L7_0_set_64 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xffffff12 // .long L7_0_set_68 + LONG $0xfffffdfc // .long L7_0_set_51 + LONG $0xffffff1e // .long L7_0_set_69 _vstring: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp WORD $0x5741 // pushq %r15 WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax MOVQ DX, R14 MOVQ SI, R12 - MOVQ DI, R15 - MOVQ 0(SI), BX - MOVQ BX, SI - MOVL $34, DX - MOVL $92, CX - LONG $0xffe0dbe8; BYTE $0xff // callq _strchr2 + MOVQ DI, BX + MOVQ 0(SI), R15 + LEAQ 24(DX), CX + MOVQ 0(DI), DI + MOVQ 8(BX), SI + MOVQ R15, DX + LONG $0x000068e8; BYTE $0x00 // callq _advance_string TESTQ AX, AX - JS LBB10_4 - MOVQ BX, -48(BP) - MOVQ 0(R15), R13 - MOVQ $-1, DX - CMPB 0(R13)(AX*1), $34 - JNE LBB10_7 - MOVQ AX, CX + JS LBB8_1 + MOVQ AX, 0(R12) + MOVQ R15, 16(R14) + MOVL $7, AX + JMP LBB8_3 -LBB10_3: - MOVQ DX, 24(R14) - INCQ CX +LBB8_1: + MOVQ 8(BX), CX MOVQ CX, 0(R12) - MOVQ -48(BP), AX - MOVQ AX, 16(R14) - MOVL $7, AX - JMP LBB10_6 -LBB10_4: - MOVQ 8(R15), R9 - -LBB10_5: - MOVQ R9, 0(R12) - MOVQ $-1, AX - -LBB10_6: +LBB8_3: MOVQ AX, 0(R14) - ADDQ $8, SP + BYTE $0x5b // popq %rbx + WORD $0x5c41 // popq %r12 + WORD $0x5e41 // popq %r14 + WORD $0x5f41 // popq %r15 + BYTE $0x5d // popq %rbp + RET + +LCPI9_0: + QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' + +LCPI9_1: + QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + +_advance_string: + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5741 // pushq %r15 + WORD $0x5641 // pushq %r14 + WORD $0x5441 // pushq %r12 + BYTE $0x53 // pushq %rbx + SUBQ DX, SI + ADDQ DI, DX + MOVQ $-1, 0(CX) + MOVQ $-1, R8 + XORL R11, R11 + CMPQ SI, $64 + JB LBB9_12 + QUAD $0xffffff8c056ffec5 // vmovdqu $-116(%rip), %ymm0 /* LCPI9_0(%rip) */ + QUAD $0xffffffa40d6ffec5 // vmovdqu $-92(%rip), %ymm1 /* LCPI9_1(%rip) */ + MOVQ $-6148914691236517206, R9 + MOVQ $6148914691236517205, R10 + +LBB9_2: + LONG $0x126ffec5 // vmovdqu (%rdx), %ymm2 + LONG $0x5a6ffec5; BYTE $0x20 // vmovdqu $32(%rdx), %ymm3 + LONG $0xe074edc5 // vpcmpeqb %ymm0, %ymm2, %ymm4 + LONG $0xf4d77dc5 // vpmovmskb %ymm4, %r14d + LONG $0xe074e5c5 // vpcmpeqb %ymm0, %ymm3, %ymm4 + LONG $0xc4d7fdc5 // vpmovmskb %ymm4, %eax + LONG $0xd174edc5 // vpcmpeqb %ymm1, %ymm2, %ymm2 + LONG $0xfad77dc5 // vpmovmskb %ymm2, %r15d + LONG $0xd174e5c5 // vpcmpeqb %ymm1, %ymm3, %ymm2 + LONG $0xdad7fdc5 // vpmovmskb %ymm2, %ebx + SHLQ $32, AX + ORQ AX, R14 + SHLQ $32, BX + ORQ BX, R15 + JNE LBB9_3 + TESTQ R11, R11 + JNE LBB9_5 + XORL R11, R11 + TESTQ R14, R14 + JNE LBB9_9 + +LBB9_11: + ADDQ $64, DX + ADDQ $-64, SI + CMPQ SI, $63 + JA LBB9_2 + JMP LBB9_12 + +LBB9_3: + CMPQ R8, $-1 + JNE LBB9_5 + MOVQ DX, AX + SUBQ DI, AX + BSFQ R15, R8 + ADDQ AX, R8 + MOVQ R8, 0(CX) + +LBB9_5: + MOVQ R11, AX + NOTQ AX + ANDQ R15, AX + LEAQ 0(AX)(AX*1), R12 + ORQ R11, R12 + MOVQ R12, BX + NOTQ BX + ANDQ R15, BX + ANDQ R9, BX + XORL R11, R11 + ADDQ AX, BX + SETCS R11 + ADDQ BX, BX + XORQ R10, BX + ANDQ R12, BX + NOTQ BX + ANDQ BX, R14 + TESTQ R14, R14 + JE LBB9_11 + +LBB9_9: + BSFQ R14, AX + +LBB9_10: + SUBQ DI, DX + LEAQ 1(DX)(AX*1), AX + +LBB9_39: BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 WORD $0x5e41 // popq %r14 WORD $0x5f41 // popq %r15 BYTE $0x5d // popq %rbp WORD $0xf8c5; BYTE $0x77 // vzeroupper RET -LBB10_7: - LEAQ 1(AX), R8 - MOVQ 8(R15), R9 - MOVQ R9, DX - SUBQ R8, DX - LEAQ 1(R13)(AX*1), R10 - MOVQ R10, CX - MOVQ DX, SI - MOVQ R10, DI - ANDQ $31, CX - JE LBB10_11 +LBB9_12: + CMPQ SI, $32 + JB LBB9_22 + LONG $0x026ffec5 // vmovdqu (%rdx), %ymm0 + QUAD $0xfffffe9c0d74fdc5 // vpcmpeqb $-356(%rip), %ymm0, %ymm1 /* LCPI9_0(%rip) */ + LONG $0xc1d7fdc5 // vpmovmskb %ymm1, %eax + QUAD $0xfffffeb00574fdc5 // vpcmpeqb $-336(%rip), %ymm0, %ymm0 /* LCPI9_1(%rip) */ + LONG $0xd8d7fdc5 // vpmovmskb %ymm0, %ebx + TESTL BX, BX + JNE LBB9_14 + TESTQ R11, R11 + JNE LBB9_16 + XORL R11, R11 + TESTQ AX, AX + JE LBB9_21 + +LBB9_20: + BSFQ AX, AX + JMP LBB9_10 + +LBB9_14: + CMPQ R8, $-1 + JNE LBB9_16 + MOVQ DX, R9 + SUBQ DI, R9 + BSFQ BX, R8 + ADDQ R9, R8 + MOVQ R8, 0(CX) + +LBB9_16: + MOVL R11, R9 + NOTL R9 + ANDL BX, R9 + LEAL 0(R9)(R9*1), R10 + LEAL 0(R11)(R9*2), R14 + NOTL R10 + ANDL BX, R10 + ANDL $-1431655766, R10 + XORL R11, R11 + ADDL R9, R10 + SETCS R11 + ADDL R10, R10 + XORL $1431655765, R10 + ANDL R14, R10 + NOTL R10 + ANDL R10, AX + TESTQ AX, AX + JNE LBB9_20 + +LBB9_21: + ADDQ $32, DX + ADDQ $-32, SI + +LBB9_22: + TESTQ R11, R11 + JNE LBB9_23 + MOVQ $-1, AX + TESTQ SI, SI + JE LBB9_39 + +LBB9_29: + MOVQ DI, R9 + NOTQ R9 + +LBB9_30: + LEAQ 1(DX), R11 + MOVBLZX 0(DX), BX + CMPB BX, $34 + JE LBB9_38 + LEAQ -1(SI), R10 + CMPB BX, $92 + JE LBB9_33 MOVQ R10, SI - ANDQ $-32, SI - LONG $0x066ffdc5 // vmovdqa (%rsi), %ymm0 - QUAD $0xffffff230574fdc5 // vpcmpeqb $-221(%rip), %ymm0, %ymm0 /* LCPI10_0(%rip) */ - LONG $0xf0d7fdc5 // vpmovmskb %ymm0, %esi - MOVLQSX SI, SI - SARQ CX, SI - TESTQ SI, SI - JE LBB10_10 - MOVQ $4294967296, CX - ORQ CX, SI - BSFQ SI, SI - CMPQ SI, DX - MOVQ $-1, CX - LONG $0xce4c0f48 // cmovlq %rsi, %rcx - JMP LBB10_34 + MOVQ R11, DX + TESTQ R10, R10 + JNE LBB9_30 + JMP LBB9_39 -LBB10_10: - MOVL $32, BX - SUBQ CX, BX - LEAQ 0(R10)(BX*1), DI - MOVQ DX, SI - SUBQ BX, SI +LBB9_33: + TESTQ R10, R10 + JE LBB9_39 + CMPQ R8, $-1 + JNE LBB9_36 + ADDQ R9, R11 + MOVQ R11, 0(CX) + MOVQ R11, R8 -LBB10_11: - CMPQ SI, $128 - JL LBB10_15 - QUAD $0xfffffecd0d6ffec5 // vmovdqu $-307(%rip), %ymm1 /* LCPI10_0(%rip) */ +LBB9_36: + ADDQ $2, DX + ADDQ $-2, SI + MOVQ SI, R10 + TESTQ R10, R10 + JNE LBB9_30 + JMP LBB9_39 -LBB10_13: - LONG $0x276ffdc5 // vmovdqa (%rdi), %ymm4 - LONG $0x5f6ffdc5; BYTE $0x20 // vmovdqa $32(%rdi), %ymm3 - LONG $0x576ffdc5; BYTE $0x40 // vmovdqa $64(%rdi), %ymm2 - LONG $0x476ffdc5; BYTE $0x60 // vmovdqa $96(%rdi), %ymm0 - LONG $0xe974ddc5 // vpcmpeqb %ymm1, %ymm4, %ymm5 - LONG $0xf174e5c5 // vpcmpeqb %ymm1, %ymm3, %ymm6 - LONG $0xedebcdc5 // vpor %ymm5, %ymm6, %ymm5 - LONG $0xf174edc5 // vpcmpeqb %ymm1, %ymm2, %ymm6 - LONG $0xf974fdc5 // vpcmpeqb %ymm1, %ymm0, %ymm7 - LONG $0xf7ebcdc5 // vpor %ymm7, %ymm6, %ymm6 - LONG $0xeeebd5c5 // vpor %ymm6, %ymm5, %ymm5 - LONG $0x177de2c4; BYTE $0xed // vptest %ymm5, %ymm5 - JNE LBB10_21 - SUBQ $-128, DI - LEAQ -128(SI), BX - CMPQ SI, $255 - MOVQ BX, SI - JG LBB10_13 - JMP LBB10_16 +LBB9_38: + SUBQ DI, R11 + MOVQ R11, AX + JMP LBB9_39 -LBB10_15: - MOVQ SI, BX +LBB9_23: + TESTQ SI, SI + JE LBB9_24 + CMPQ R8, $-1 + JNE LBB9_27 + MOVQ DI, R8 + NOTQ R8 + ADDQ DX, R8 + MOVQ R8, 0(CX) -LBB10_16: - TESTQ BX, BX - JS LBB10_5 - LONG $0x076ffdc5 // vmovdqa (%rdi), %ymm0 - QUAD $0xfffffe690574fdc5 // vpcmpeqb $-407(%rip), %ymm0, %ymm0 /* LCPI10_0(%rip) */ - LONG $0xf0d7fdc5 // vpmovmskb %ymm0, %esi - TESTL SI, SI - JE LBB10_23 +LBB9_27: + INCQ DX + DECQ SI + MOVQ $-1, AX + TESTQ SI, SI + JNE LBB9_29 + JMP LBB9_39 -LBB10_18: - MOVQ DI, CX +LBB9_24: + MOVQ $-1, AX + JMP LBB9_39 -LBB10_19: - MOVL SI, SI - MOVQ $4294967296, DI - ORQ DI, SI - BSFQ SI, SI - CMPQ SI, BX - JGE LBB10_5 - SUBQ R10, CX - ADDQ SI, CX - JMP LBB10_34 - -LBB10_21: - QUAD $0xfffffe2f0d74ddc5 // vpcmpeqb $-465(%rip), %ymm4, %ymm1 /* LCPI10_0(%rip) */ - LONG $0xc9d7fdc5 // vpmovmskb %ymm1, %ecx - TESTL CX, CX - JE LBB10_26 - MOVL CX, CX - SUBQ R10, DI - MOVQ $4294967296, SI - ORQ SI, CX - BSFQ CX, CX - ADDQ DI, CX - JMP LBB10_34 - -LBB10_23: - CMPQ BX, $31 - JLE LBB10_5 - LEAQ 32(DI), CX - LONG $0x016ffdc5 // vmovdqa (%rcx), %ymm0 - QUAD $0xfffffdef0574fdc5 // vpcmpeqb $-529(%rip), %ymm0, %ymm0 /* LCPI10_0(%rip) */ - LONG $0xf0d7fdc5 // vpmovmskb %ymm0, %esi - TESTL SI, SI - JE LBB10_30 - ADDQ $-32, BX - JMP LBB10_19 - -LBB10_26: - QUAD $0xfffffdd90d74e5c5 // vpcmpeqb $-551(%rip), %ymm3, %ymm1 /* LCPI10_0(%rip) */ - LONG $0xc9d7fdc5 // vpmovmskb %ymm1, %ecx - TESTL CX, CX - JE LBB10_28 - MOVL CX, CX - MOVQ $4294967296, SI - ORQ SI, CX - BSFQ CX, CX - SUBQ R10, DI - LEAQ 32(DI)(CX*1), CX - JMP LBB10_34 - -LBB10_28: - QUAD $0xfffffdac0d74edc5 // vpcmpeqb $-596(%rip), %ymm2, %ymm1 /* LCPI10_0(%rip) */ - LONG $0xc9d7fdc5 // vpmovmskb %ymm1, %ecx - SUBQ R10, DI - TESTL CX, CX - JE LBB10_33 - MOVL CX, CX - MOVQ $4294967296, SI - ORQ SI, CX - BSFQ CX, CX - LEAQ 64(DI)(CX*1), CX - JMP LBB10_34 - -LBB10_30: - CMPQ BX, $64 - JL LBB10_5 - LEAQ 64(DI), CX - LONG $0x016ffdc5 // vmovdqa (%rcx), %ymm0 - QUAD $0xfffffd6d0574fdc5 // vpcmpeqb $-659(%rip), %ymm0, %ymm0 /* LCPI10_0(%rip) */ - LONG $0xf0d7fdc5 // vpmovmskb %ymm0, %esi - TESTL SI, SI - JE LBB10_72 - ADDQ $-64, BX - JMP LBB10_19 - -LBB10_33: - QUAD $0xfffffd500574fdc5 // vpcmpeqb $-688(%rip), %ymm0, %ymm0 /* LCPI10_0(%rip) */ - LONG $0xc8d7fdc5 // vpmovmskb %ymm0, %ecx - MOVQ $4294967296, SI - ORQ SI, CX - BSFQ CX, CX - LEAQ 96(DI)(CX*1), CX - -LBB10_34: - CMPQ CX, DX - JAE LBB10_5 - ADDQ R8, CX - JS LBB10_5 - LEAQ -1(R13), R10 - QUAD $0xfffffd18056ffec5 // vmovdqu $-744(%rip), %ymm0 /* LCPI10_0(%rip) */ - -LBB10_37: - LEAQ 0(R10)(CX*1), SI - XORL DX, DX - -LBB10_38: - CMPB 0(SI)(DX*1), $92 - LEAQ -1(DX), DX - JE LBB10_38 - NOTL DX - TESTB $1, DX - JE LBB10_71 - LEAQ 1(CX), R15 - MOVQ R9, R11 - SUBQ R15, R11 - LEAQ 1(R13)(CX*1), SI - MOVQ SI, CX - MOVQ R11, DI - MOVQ SI, BX - ANDQ $31, CX - JE LBB10_44 - MOVQ SI, DI - ANDQ $-32, DI - LONG $0x0f74fdc5 // vpcmpeqb (%rdi), %ymm0, %ymm1 - LONG $0xf9d7fdc5 // vpmovmskb %ymm1, %edi - MOVLQSX DI, DI - SARQ CX, DI - TESTQ DI, DI - JE LBB10_43 - MOVQ $4294967296, CX - ORQ CX, DI - BSFQ DI, CX - CMPQ CX, R11 - MOVQ $-1, DX - LONG $0xca4d0f48 // cmovgeq %rdx, %rcx - JMP LBB10_61 - -LBB10_43: - MOVL $32, DX - SUBQ CX, DX - LEAQ 0(SI)(DX*1), BX - MOVQ R11, DI - SUBQ DX, DI - -LBB10_44: - MOVQ DI, CX - CMPQ DI, $128 - JL LBB10_47 - -LBB10_45: - LONG $0x2374fdc5 // vpcmpeqb (%rbx), %ymm0, %ymm4 - LONG $0x5b74fdc5; BYTE $0x20 // vpcmpeqb $32(%rbx), %ymm0, %ymm3 - LONG $0x5374fdc5; BYTE $0x40 // vpcmpeqb $64(%rbx), %ymm0, %ymm2 - LONG $0x4b74fdc5; BYTE $0x60 // vpcmpeqb $96(%rbx), %ymm0, %ymm1 - LONG $0xecebe5c5 // vpor %ymm4, %ymm3, %ymm5 - LONG $0xf1ebedc5 // vpor %ymm1, %ymm2, %ymm6 - LONG $0xeeebd5c5 // vpor %ymm6, %ymm5, %ymm5 - LONG $0x177de2c4; BYTE $0xed // vptest %ymm5, %ymm5 - JNE LBB10_53 - SUBQ $-128, BX - LEAQ -128(CX), DI - CMPQ CX, $255 - MOVQ DI, CX - JG LBB10_45 - -LBB10_47: - TESTQ DI, DI - JS LBB10_5 - LONG $0x0b74fdc5 // vpcmpeqb (%rbx), %ymm0, %ymm1 - LONG $0xc1d77dc5 // vpmovmskb %ymm1, %r8d - TESTL R8, R8 - JE LBB10_50 - -LBB10_49: - MOVQ BX, CX - JMP LBB10_58 - -LBB10_50: - CMPQ DI, $31 - JLE LBB10_5 - LEAQ 32(BX), CX - LONG $0x0974fdc5 // vpcmpeqb (%rcx), %ymm0, %ymm1 - LONG $0xc1d77dc5 // vpmovmskb %ymm1, %r8d - TESTL R8, R8 - JE LBB10_55 - ADDQ $-32, DI - JMP LBB10_58 - -LBB10_53: - LONG $0xccd7fdc5 // vpmovmskb %ymm4, %ecx - TESTL CX, CX - JE LBB10_63 - MOVL CX, CX - SUBQ SI, BX - MOVQ $4294967296, DX - ORQ DX, CX - BSFQ CX, CX - JMP LBB10_60 - -LBB10_55: - CMPQ DI, $64 - JL LBB10_5 - LEAQ 64(BX), CX - LONG $0x0974fdc5 // vpcmpeqb (%rcx), %ymm0, %ymm1 - LONG $0xc1d77dc5 // vpmovmskb %ymm1, %r8d - TESTL R8, R8 - JE LBB10_65 - ADDQ $-64, DI - -LBB10_58: - MOVL R8, DX - MOVQ $4294967296, BX - ORQ BX, DX - BSFQ DX, BX - CMPQ BX, DI - JGE LBB10_5 - SUBQ SI, CX - -LBB10_60: - ADDQ BX, CX - -LBB10_61: - CMPQ CX, R11 - JAE LBB10_5 - ADDQ R15, CX - JNS LBB10_37 - JMP LBB10_5 - -LBB10_63: - LONG $0xcbd7fdc5 // vpmovmskb %ymm3, %ecx - TESTL CX, CX - JE LBB10_68 - MOVL CX, CX - MOVQ $4294967296, DX - ORQ DX, CX - BSFQ CX, CX - SUBQ SI, BX - LEAQ 32(BX)(CX*1), CX - JMP LBB10_61 - -LBB10_65: - CMPQ DI, $96 - JL LBB10_5 - ADDQ $96, BX - LONG $0x0b74fdc5 // vpcmpeqb (%rbx), %ymm0, %ymm1 - LONG $0xc1d77dc5 // vpmovmskb %ymm1, %r8d - TESTL R8, R8 - JE LBB10_5 - ADDQ $-96, DI - JMP LBB10_49 - -LBB10_68: - LONG $0xcad7fdc5 // vpmovmskb %ymm2, %ecx - SUBQ SI, BX - TESTL CX, CX - JE LBB10_70 - MOVL CX, CX - MOVQ $4294967296, DX - ORQ DX, CX - BSFQ CX, CX - LEAQ 64(BX)(CX*1), CX - JMP LBB10_61 - -LBB10_70: - LONG $0xc9d7fdc5 // vpmovmskb %ymm1, %ecx - MOVQ $4294967296, DX - ORQ DX, CX - BSFQ CX, CX - LEAQ 96(BX)(CX*1), CX - JMP LBB10_61 - -LBB10_71: - MOVQ AX, DX - TESTQ CX, CX - JNS LBB10_3 - JMP LBB10_5 - -LBB10_72: - CMPQ BX, $96 - JL LBB10_5 - ADDQ $96, DI - LONG $0x076ffdc5 // vmovdqa (%rdi), %ymm0 - QUAD $0xfffffad50574fdc5 // vpcmpeqb $-1323(%rip), %ymm0, %ymm0 /* LCPI10_0(%rip) */ - LONG $0xf0d7fdc5 // vpmovmskb %ymm0, %esi - TESTL SI, SI - JE LBB10_5 - ADDQ $-96, BX - JMP LBB10_18 - -LCPI11_0: +LCPI10_0: QUAD $0x4024000000000000 // .quad 0x4024000000000000 -LCPI11_1: +LCPI10_1: QUAD $0x7ff0000000000000 // .quad 0x7ff0000000000000 _vnumber: @@ -3659,83 +3589,83 @@ _vnumber: MOVQ 0(SI), CX MOVQ CX, 24(DX) CMPQ AX, R15 - JAE LBB11_56 + JAE LBB10_56 MOVB 0(R8)(AX*1), CX MOVL $1, R10 CMPB CX, $45 - JNE LBB11_4 + JNE LBB10_4 INCQ AX CMPQ AX, R15 - JAE LBB11_56 + JAE LBB10_56 MOVB 0(R8)(AX*1), CX MOVL $-1, R10 -LBB11_4: +LBB10_4: LEAL -48(CX), DI CMPB DI, $10 - JB LBB11_6 + JB LBB10_6 MOVQ AX, 0(SI) MOVQ $-2, 0(DX) - JMP LBB11_57 + JMP LBB10_57 -LBB11_6: +LBB10_6: CMPB CX, $48 - JNE LBB11_10 + JNE LBB10_10 LEAQ 1(AX), CX CMPQ AX, R15 - JAE LBB11_21 + JAE LBB10_21 MOVB 0(R8)(CX*1), BX ADDB $-46, BX CMPB BX, $55 - JA LBB11_21 + JA LBB10_21 MOVBLZX BX, DI MOVQ $36028797027352577, BX BTQ DI, BX - JAE LBB11_21 + JAE LBB10_21 -LBB11_10: +LBB10_10: CMPQ AX, R15 MOVQ R15, R9 LONG $0xc8470f4c // cmovaq %rax, %r9 XORL R12, R12 -LBB11_11: +LBB10_11: MOVQ R12, DI CMPQ R9, AX - JE LBB11_22 + JE LBB10_22 MOVQ AX, R13 MOVBLZX 0(R8)(AX*1), BX LEAL -48(BX), AX CMPB AX, $9 - JA LBB11_23 + JA LBB10_23 ADDL $-48, BX IMULL R10, BX IMUL3Q $10, DI, R12 - JO LBB11_15 + JO LBB10_15 LEAQ 1(R13), AX MOVLQSX BX, CX ADDQ CX, R12 - JNO LBB11_11 + JNO LBB10_11 -LBB11_15: +LBB10_15: LONG $0x2af3e1c4; BYTE $0xc7 // vcvtsi2sd %rdi, %xmm1, %xmm0 - QUAD $0xfffffef10559fbc5 // vmulsd $-271(%rip), %xmm0, %xmm0 /* LCPI11_0(%rip) */ + QUAD $0xfffffef10559fbc5 // vmulsd $-271(%rip), %xmm0, %xmm0 /* LCPI10_0(%rip) */ LONG $0xcb2af3c5 // vcvtsi2sd %ebx, %xmm1, %xmm1 LONG $0xc158fbc5 // vaddsd %xmm1, %xmm0, %xmm0 MOVQ $8, 0(DX) LEAQ 1(R13), AX CMPQ AX, R15 SETCS CX - JAE LBB11_26 + JAE LBB10_26 MOVB 1(R8)(R13*1), DI LEAL -48(DI), BX MOVB $1, CX CMPB BX, $9 - JA LBB11_26 + JA LBB10_26 ADDQ $2, R13 - QUAD $0xfffffeb70d10fbc5 // vmovsd $-329(%rip), %xmm1 /* LCPI11_0(%rip) */ + QUAD $0xfffffeb70d10fbc5 // vmovsd $-329(%rip), %xmm1 /* LCPI10_0(%rip) */ -LBB11_18: +LBB10_18: MOVQ R13, CX MOVBLZX DI, AX LONG $0xc159fbc5 // vmulsd %xmm1, %xmm0, %xmm0 @@ -3744,78 +3674,78 @@ LBB11_18: LONG $0xd02ae3c5 // vcvtsi2sd %eax, %xmm3, %xmm2 LONG $0xc258fbc5 // vaddsd %xmm2, %xmm0, %xmm0 CMPQ R15, R13 - JE LBB11_24 + JE LBB10_24 MOVBLZX 0(R8)(CX*1), DI LEAL -48(DI), AX LEAQ 1(CX), R13 CMPB AX, $9 - JBE LBB11_18 + JBE LBB10_18 DECQ R13 MOVQ R13, AX - JMP LBB11_25 + JMP LBB10_25 -LBB11_21: +LBB10_21: MOVQ CX, 0(SI) - JMP LBB11_57 + JMP LBB10_57 -LBB11_22: +LBB10_22: LONG $0x2af3e1c4; BYTE $0xc7 // vcvtsi2sd %rdi, %xmm1, %xmm0 MOVQ R9, R15 MOVQ DI, R12 - JMP LBB11_75 + JMP LBB10_75 -LBB11_23: +LBB10_23: LONG $0x2af3e1c4; BYTE $0xc7 // vcvtsi2sd %rdi, %xmm1, %xmm0 MOVB $1, R9 MOVQ DI, R12 CMPQ R13, R15 - JB LBB11_27 - JMP LBB11_49 + JB LBB10_27 + JMP LBB10_49 -LBB11_24: +LBB10_24: MOVQ R15, AX -LBB11_25: +LBB10_25: CMPQ CX, R15 SETCS CX -LBB11_26: +LBB10_26: XORL R9, R9 MOVQ AX, R13 TESTB CX, CX - JE LBB11_49 + JE LBB10_49 -LBB11_27: +LBB10_27: CMPB 0(R8)(R13*1), $46 - JNE LBB11_49 + JNE LBB10_49 LEAQ 1(R13), R11 MOVQ $8, 0(DX) CMPQ R11, R15 - JAE LBB11_56 + JAE LBB10_56 MOVB 0(R8)(R11*1), R14 LEAL -48(R14), CX CMPB CX, $9 - JBE LBB11_31 + JBE LBB10_31 MOVQ R11, 0(SI) MOVQ $-2, 0(DX) - JMP LBB11_57 + JMP LBB10_57 -LBB11_31: +LBB10_31: LONG $0xc957f1c5 // vxorpd %xmm1, %xmm1, %xmm1 MOVQ R11, AX LONG $0xd257e9c5 // vxorpd %xmm2, %xmm2, %xmm2 CMPB CX, $9 - JA LBB11_40 + JA LBB10_40 LEAL 18(R13), AX MOVLQSX AX, DI MOVQ R11, AX LONG $0xd257e9c5 // vxorpd %xmm2, %xmm2, %xmm2 CMPQ R13, DI - JGE LBB11_40 + JGE LBB10_40 ADDQ $2, R13 XORL CX, CX -LBB11_34: +LBB10_34: MOVBLZX R14, AX LEAQ 0(CX)(CX*4), CX ADDL $-48, AX @@ -3823,92 +3753,92 @@ LBB11_34: WORD $0x9848 // cltq LEAQ 0(AX)(CX*2), CX CMPQ R15, R13 - JE LBB11_38 + JE LBB10_38 MOVBLZX 0(R8)(R13*1), R14 LEAL -48(R14), BX LEAQ 1(R13), AX CMPB BX, $9 - JA LBB11_37 + JA LBB10_37 CMPQ R13, DI MOVQ AX, R13 - JLE LBB11_34 + JLE LBB10_34 -LBB11_37: +LBB10_37: DECQ AX - JMP LBB11_39 + JMP LBB10_39 -LBB11_38: +LBB10_38: MOVQ R15, AX -LBB11_39: +LBB10_39: LONG $0x2ae3e1c4; BYTE $0xd1 // vcvtsi2sd %rcx, %xmm3, %xmm2 -LBB11_40: +LBB10_40: SUBQ AX, R11 CMPL R11, $-323 - JL LBB11_44 + JL LBB10_44 CMPL R11, $308 - JLE LBB11_43 - QUAD $0xfffffd820d10fbc5 // vmovsd $-638(%rip), %xmm1 /* LCPI11_1(%rip) */ - JMP LBB11_44 + JLE LBB10_43 + QUAD $0xfffffd820d10fbc5 // vmovsd $-638(%rip), %xmm1 /* LCPI10_1(%rip) */ + JMP LBB10_44 -LBB11_43: +LBB10_43: ADDL $323, R11 - LONG $0x250d8d48; WORD $0x0018; BYTE $0x00 // leaq $6181(%rip), %rcx /* _P10_TAB(%rip) */ + LONG $0xb90d8d48; WORD $0x003b; BYTE $0x00 // leaq $15289(%rip), %rcx /* _P10_TAB(%rip) */ LONG $0x596ba1c4; WORD $0xd90c // vmulsd (%rcx,%r11,8), %xmm2, %xmm1 -LBB11_44: +LBB10_44: LONG $0xc158fbc5 // vaddsd %xmm1, %xmm0, %xmm0 CMPQ AX, R15 - JAE LBB11_48 + JAE LBB10_48 -LBB11_45: +LBB10_45: MOVBLZX 0(R8)(AX*1), CX ADDB $-48, CX CMPB CX, $9 - JA LBB11_48 + JA LBB10_48 INCQ AX CMPQ R15, AX - JNE LBB11_45 - JMP LBB11_74 + JNE LBB10_45 + JMP LBB10_74 -LBB11_48: +LBB10_48: MOVQ AX, R13 -LBB11_49: +LBB10_49: CMPQ R13, R15 - JAE LBB11_73 + JAE LBB10_73 MOVB 0(R8)(R13*1), AX ORB $32, AX CMPB AX, $101 - JNE LBB11_73 + JNE LBB10_73 LEAQ 1(R13), CX MOVQ $8, 0(DX) CMPQ CX, R15 - JAE LBB11_56 + JAE LBB10_56 MOVB 0(R8)(CX*1), AX CMPB AX, $45 - JE LBB11_54 + JE LBB10_54 MOVL $1, R10 CMPB AX, $43 - JNE LBB11_58 + JNE LBB10_58 -LBB11_54: +LBB10_54: ADDQ $2, R13 CMPQ R13, R15 - JAE LBB11_56 + JAE LBB10_56 XORL CX, CX CMPB AX, $43 SETEQ CX LEAL -1(CX)(CX*1), R10 MOVB 0(R8)(R13*1), AX - JMP LBB11_59 + JMP LBB10_59 -LBB11_56: +LBB10_56: MOVQ R15, 0(SI) MOVQ $-1, 0(DX) -LBB11_57: +LBB10_57: BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 WORD $0x5d41 // popq %r13 @@ -3917,78 +3847,78 @@ LBB11_57: BYTE $0x5d // popq %rbp RET -LBB11_58: +LBB10_58: MOVQ CX, R13 -LBB11_59: +LBB10_59: LEAL -48(AX), CX CMPB CX, $9 - JBE LBB11_61 + JBE LBB10_61 MOVQ R13, 0(SI) MOVQ $-2, 0(DX) - JMP LBB11_57 + JMP LBB10_57 -LBB11_61: +LBB10_61: XORL R11, R11 CMPQ R13, R15 - JAE LBB11_72 + JAE LBB10_72 XORL R11, R11 CMPB CX, $9 - JA LBB11_67 + JA LBB10_67 LEAQ -1(R15), CX XORL R11, R11 -LBB11_64: +LBB10_64: LEAL 0(R11)(R11*4), DI MOVBLZX AX, AX ADDL $-48, AX IMULL R10, AX LEAL 0(AX)(DI*2), R11 CMPQ CX, R13 - JE LBB11_66 + JE LBB10_66 MOVBLZX 1(R8)(R13*1), AX INCQ R13 LEAL -48(AX), DI CMPB DI, $10 - JB LBB11_64 - JMP LBB11_67 + JB LBB10_64 + JMP LBB10_67 -LBB11_66: +LBB10_66: MOVQ R15, R13 -LBB11_67: +LBB10_67: CMPL R11, $1 - JE LBB11_73 + JE LBB10_73 CMPL R11, $-323 - JGE LBB11_70 + JGE LBB10_70 LONG $0xc057f9c5 // vxorpd %xmm0, %xmm0, %xmm0 - JMP LBB11_73 + JMP LBB10_73 -LBB11_70: +LBB10_70: CMPL R11, $308 - JLE LBB11_72 - QUAD $0xfffffc5b0510fbc5 // vmovsd $-933(%rip), %xmm0 /* LCPI11_1(%rip) */ - JMP LBB11_73 + JLE LBB10_72 + QUAD $0xfffffc5b0510fbc5 // vmovsd $-933(%rip), %xmm0 /* LCPI10_1(%rip) */ + JMP LBB10_73 -LBB11_72: +LBB10_72: ADDL $323, R11 - LONG $0xfe058d48; WORD $0x0016; BYTE $0x00 // leaq $5886(%rip), %rax /* _P10_TAB(%rip) */ + LONG $0x92058d48; WORD $0x003a; BYTE $0x00 // leaq $14994(%rip), %rax /* _P10_TAB(%rip) */ LONG $0x597ba1c4; WORD $0xd804 // vmulsd (%rax,%r11,8), %xmm0, %xmm0 -LBB11_73: +LBB10_73: MOVQ R13, R15 -LBB11_74: +LBB10_74: TESTB R9, R9 - JE LBB11_76 + JE LBB10_76 -LBB11_75: +LBB10_75: MOVQ R12, 16(DX) -LBB11_76: +LBB10_76: MOVQ R15, 0(SI) LONG $0x4211fbc5; BYTE $0x08 // vmovsd %xmm0, $8(%rdx) - JMP LBB11_57 + JMP LBB10_57 _vsigned: BYTE $0x55 // pushq %rbp @@ -4003,71 +3933,71 @@ _vsigned: MOVQ 0(SI), CX MOVQ CX, 24(DX) CMPQ AX, R11 - JAE LBB12_1 + JAE LBB11_1 MOVB 0(R8)(AX*1), CX MOVL $1, R9 CMPB CX, $45 - JNE LBB12_5 + JNE LBB11_5 INCQ AX CMPQ AX, R11 - JAE LBB12_1 + JAE LBB11_1 MOVB 0(R8)(AX*1), CX MOVQ $-1, R9 -LBB12_5: +LBB11_5: LEAL -48(CX), DI CMPB DI, $10 - JB LBB12_7 + JB LBB11_7 MOVQ AX, 0(SI) MOVQ $-2, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB12_1: +LBB11_1: MOVQ R11, 0(SI) MOVQ $-1, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB12_7: +LBB11_7: CMPB CX, $48 - JNE LBB12_12 + JNE LBB11_12 LEAQ 1(AX), DI CMPQ AX, R11 - JAE LBB12_11 + JAE LBB11_11 MOVB 0(R8)(DI*1), CX ADDB $-46, CX CMPB CX, $55 - JA LBB12_11 + JA LBB11_11 MOVBLZX CX, R10 MOVQ $36028797027352577, CX BTQ R10, CX - JAE LBB12_11 + JAE LBB11_11 -LBB12_12: +LBB11_12: CMPQ AX, R11 MOVQ R11, R10 LONG $0xd0470f4c // cmovaq %rax, %r10 XORL DI, DI -LBB12_13: +LBB11_13: CMPQ R10, AX - JE LBB12_23 + JE LBB11_23 MOVBQSX 0(R8)(AX*1), CX LEAL -48(CX), BX CMPB BX, $9 - JA LBB12_18 + JA LBB11_18 IMUL3Q $10, DI, DI - JO LBB12_17 + JO LBB11_17 INCQ AX ADDL $-48, CX IMULQ R9, CX ADDQ CX, DI - JNO LBB12_13 + JNO LBB11_13 -LBB12_17: +LBB11_17: DECQ AX MOVQ AX, 0(SI) MOVQ $-5, 0(DX) @@ -4075,33 +4005,33 @@ LBB12_17: BYTE $0x5d // popq %rbp RET -LBB12_11: +LBB11_11: MOVQ DI, 0(SI) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB12_18: +LBB11_18: CMPQ AX, R11 - JAE LBB12_22 + JAE LBB11_22 CMPB CX, $46 - JE LBB12_25 + JE LBB11_25 CMPB CX, $69 - JE LBB12_25 + JE LBB11_25 CMPB CX, $101 - JNE LBB12_22 + JNE LBB11_22 -LBB12_25: +LBB11_25: MOVQ AX, 0(SI) MOVQ $-6, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB12_22: +LBB11_22: MOVQ AX, R10 -LBB12_23: +LBB11_23: MOVQ R10, 0(SI) MOVQ DI, 16(DX) BYTE $0x5b // popq %rbx @@ -4122,60 +4052,60 @@ _vunsigned: MOVQ 0(SI), AX MOVQ AX, 24(DX) CMPQ CX, R11 - JAE LBB13_1 + JAE LBB12_1 MOVB 0(R9)(CX*1), AX CMPB AX, $45 - JNE LBB13_4 + JNE LBB12_4 -LBB13_3: +LBB12_3: MOVQ CX, 0(SI) MOVQ $-6, 0(R8) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB13_1: +LBB12_1: MOVQ R11, 0(SI) MOVQ $-1, 0(R8) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB13_4: +LBB12_4: LEAL -48(AX), DX CMPB DX, $10 - JB LBB13_6 + JB LBB12_6 MOVQ CX, 0(SI) MOVQ $-2, 0(R8) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB13_6: +LBB12_6: CMPB AX, $48 - JNE LBB13_7 + JNE LBB12_7 MOVB 1(R9)(CX*1), AX ADDB $-46, AX CMPB AX, $55 - JA LBB13_16 + JA LBB12_16 MOVBLZX AX, AX MOVQ $36028797027352577, DX BTQ AX, DX - JAE LBB13_16 + JAE LBB12_16 -LBB13_7: +LBB12_7: XORL AX, AX MOVL $10, R10 -LBB13_8: +LBB12_8: CMPQ R11, CX - JE LBB13_22 + JE LBB12_22 MOVBLSX 0(R9)(CX*1), DI LEAL -48(DI), DX CMPB DX, $9 - JA LBB13_17 + JA LBB12_17 MULQ R10 - JO LBB13_13 + JO LBB12_13 INCQ CX ADDL $-48, DI XORL BX, BX @@ -4184,11 +4114,11 @@ LBB13_8: MOVQ BX, DX NEGQ DX XORQ DX, BX - JNE LBB13_13 + JNE LBB12_13 TESTQ DX, DX - JNS LBB13_8 + JNS LBB12_8 -LBB13_13: +LBB12_13: DECQ CX MOVQ CX, 0(SI) MOVQ $-5, 0(R8) @@ -4196,27 +4126,27 @@ LBB13_13: BYTE $0x5d // popq %rbp RET -LBB13_17: +LBB12_17: CMPQ CX, R11 - JAE LBB13_21 + JAE LBB12_21 CMPB DI, $46 - JE LBB13_3 + JE LBB12_3 CMPB DI, $69 - JE LBB13_3 + JE LBB12_3 CMPB DI, $101 - JE LBB13_3 + JE LBB12_3 -LBB13_21: +LBB12_21: MOVQ CX, R11 -LBB13_22: +LBB12_22: MOVQ R11, 0(SI) MOVQ AX, 16(R8) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB13_16: +LBB12_16: INCQ CX MOVQ CX, 0(SI) BYTE $0x5b // popq %rbx @@ -4234,6 +4164,34 @@ _skip_one: BYTE $0x5d // popq %rbp JMP _fsm_exec +LCPI14_0: + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + +LCPI14_1: + QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' + QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' + +LCPI14_2: + QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' + QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' + +LCPI14_3: + QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' + QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' + +LCPI14_4: + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + +LCPI14_5: + QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' + +LCPI14_6: + QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' + +LCPI14_7: + QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' + _fsm_exec: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp @@ -4242,474 +4200,793 @@ _fsm_exec: WORD $0x5541 // pushq %r13 WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx - SUBQ $40, SP + SUBQ $24, SP CMPL 0(DI), $0 - JE LBB15_2 - MOVQ DX, BX - MOVQ SI, R15 + JE LBB14_2 + MOVQ DX, R10 MOVQ DI, R13 - MOVQ $-1, R12 - MOVQ DX, -48(BP) - JMP LBB15_7 + MOVQ $-1, R15 + MOVQ $4294977024, R14 + QUAD $0xffffff0b1d6ffec5 // vmovdqu $-245(%rip), %ymm3 /* LCPI14_0(%rip) */ + QUAD $0xffffff23256ffec5 // vmovdqu $-221(%rip), %ymm4 /* LCPI14_1(%rip) */ + QUAD $0xffffff3b2d6ffec5 // vmovdqu $-197(%rip), %ymm5 /* LCPI14_2(%rip) */ + QUAD $0xffffff53356ffec5 // vmovdqu $-173(%rip), %ymm6 /* LCPI14_3(%rip) */ + MOVQ SI, -48(BP) + JMP LBB14_4 -LBB15_2: - MOVQ $-1, AX - JMP LBB15_56 +LBB14_2: + MOVQ $-1, BX + JMP LBB14_112 -LBB15_3: - LEAQ 3(CX), AX - MOVQ AX, 0(BX) - MOVQ R14, AX - TESTQ CX, CX - JLE LBB15_56 +LBB14_3: + LEAQ 3(AX), CX + MOVQ CX, 0(R10) + TESTQ AX, AX + JLE LBB14_109 -LBB15_5: - MOVL 0(R13), DX - MOVQ R12, AX - TESTL DX, DX - JE LBB15_56 +LBB14_85: + MOVL 0(R13), AX + MOVQ R15, BX + TESTL AX, AX + JE LBB14_112 -LBB15_7: - MOVQ 0(R15), DI - MOVQ 8(R15), SI - MOVQ 0(BX), DX - LONG $0xffd0e6e8; BYTE $0xff // callq _lspace - MOVQ AX, CX - MOVQ AX, 0(BX) - CMPQ AX, 8(R15) - JAE LBB15_9 - MOVQ 0(R15), AX - MOVQ CX, DX - INCQ DX - MOVQ DX, 0(BX) - MOVBLZX 0(AX)(CX*1), SI - MOVQ DX, CX - JMP LBB15_10 +LBB14_4: + MOVQ 0(R10), CX + MOVQ 0(SI), R9 + MOVQ 8(SI), R8 + CMPQ CX, R8 + JAE LBB14_24 + MOVB 0(R9)(CX*1), AX + CMPB AX, $13 + JE LBB14_8 + CMPB AX, $32 + JE LBB14_8 + ADDB $-9, AX + CMPB AX, $1 + JA LBB14_49 -LBB15_9: - XORL SI, SI +LBB14_8: + LEAQ 1(CX), DX + CMPQ DX, R8 + JAE LBB14_23 + MOVB 0(R9)(DX*1), AX + CMPB AX, $13 + JE LBB14_13 + CMPB AX, $32 + JE LBB14_13 + ADDB $-9, AX + CMPB AX, $1 + JA LBB14_12 -LBB15_10: - MOVLQSX 0(R13), AX - LEAQ -1(AX), DX - MOVL 0(R13)(AX*4), DI - LEAQ -1(CX), R14 - CMPQ R12, $-1 - LONG $0xe6440f4d // cmoveq %r14, %r12 +LBB14_13: + LEAQ 2(CX), DX + CMPQ DX, R8 + JAE LBB14_23 + MOVB 0(R9)(DX*1), AX + CMPB AX, $13 + JE LBB14_18 + CMPB AX, $32 + JE LBB14_18 + ADDB $-9, AX + CMPB AX, $1 + JA LBB14_12 + +LBB14_18: + LEAQ 3(CX), DX + CMPQ DX, R8 + JAE LBB14_23 + MOVB 0(R9)(DX*1), AX + CMPB AX, $13 + JE LBB14_86 + CMPB AX, $32 + JE LBB14_86 + ADDB $-9, AX + CMPB AX, $1 + JBE LBB14_86 + +LBB14_12: + MOVQ DX, CX + JMP LBB14_49 + +LBB14_23: + MOVQ DX, CX + +LBB14_24: + LEAQ 0(R9)(CX*1), DX + MOVQ R8, DI + SUBQ CX, DI + JE LBB14_32 + +LBB14_25: + MOVL DX, AX + ANDL $31, AX + TESTQ AX, AX + JE LBB14_32 + LEAQ -1(DI), R11 + XORL BX, BX + +LBB14_27: + MOVBLSX 0(DX)(BX*1), AX + CMPL AX, $32 + JA LBB14_45 + BTQ AX, R14 + JAE LBB14_45 + LEAQ 1(BX), AX + CMPQ R11, BX + JE LBB14_31 + LEAQ 1(DX)(BX*1), CX + ANDL $31, CX + MOVQ AX, BX + TESTQ CX, CX + JNE LBB14_27 + +LBB14_31: + ADDQ AX, DX + SUBQ AX, DI + +LBB14_32: + CMPQ DI, $32 + JB LBB14_35 + +LBB14_33: + LONG $0x026ffdc5 // vmovdqa (%rdx), %ymm0 + LONG $0xcb74fdc5 // vpcmpeqb %ymm3, %ymm0, %ymm1 + LONG $0xd474fdc5 // vpcmpeqb %ymm4, %ymm0, %ymm2 + LONG $0xcaebf5c5 // vpor %ymm2, %ymm1, %ymm1 + LONG $0xd574fdc5 // vpcmpeqb %ymm5, %ymm0, %ymm2 + LONG $0xc674fdc5 // vpcmpeqb %ymm6, %ymm0, %ymm0 + LONG $0xc2ebfdc5 // vpor %ymm2, %ymm0, %ymm0 + LONG $0xc1ebfdc5 // vpor %ymm1, %ymm0, %ymm0 + LONG $0xc0d7fdc5 // vpmovmskb %ymm0, %eax + CMPL AX, $-1 + JNE LBB14_44 + ADDQ $32, DX + ADDQ $-32, DI + CMPQ DI, $31 + JA LBB14_33 + +LBB14_35: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + CMPQ DI, $16 + QUAD $0xfffffe131d6ffac5 // vmovdqu $-493(%rip), %xmm3 /* LCPI14_4(%rip) */ + QUAD $0xfffffe1b256ffac5 // vmovdqu $-485(%rip), %xmm4 /* LCPI14_5(%rip) */ + QUAD $0xfffffe232d6ffac5 // vmovdqu $-477(%rip), %xmm5 /* LCPI14_6(%rip) */ + QUAD $0xfffffe2b356ffac5 // vmovdqu $-469(%rip), %xmm6 /* LCPI14_7(%rip) */ + JB LBB14_38 + +LBB14_36: + LONG $0x026ff9c5 // vmovdqa (%rdx), %xmm0 + LONG $0xcb74f9c5 // vpcmpeqb %xmm3, %xmm0, %xmm1 + LONG $0xd474f9c5 // vpcmpeqb %xmm4, %xmm0, %xmm2 + LONG $0xcaebf1c5 // vpor %xmm2, %xmm1, %xmm1 + LONG $0xd574f9c5 // vpcmpeqb %xmm5, %xmm0, %xmm2 + LONG $0xc674f9c5 // vpcmpeqb %xmm6, %xmm0, %xmm0 + LONG $0xc2ebf9c5 // vpor %xmm2, %xmm0, %xmm0 + LONG $0xc1ebf9c5 // vpor %xmm1, %xmm0, %xmm0 + LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax + CMPW AX, $-1 + JNE LBB14_101 + ADDQ $16, DX + ADDQ $-16, DI + CMPQ DI, $15 + JA LBB14_36 + +LBB14_38: + TESTQ DI, DI + JE LBB14_46 + LEAQ 0(DX)(DI*1), BX + INCQ DX + MOVQ DX, CX + +LBB14_40: + MOVBLSX -1(CX), AX + CMPL AX, $32 + JA LBB14_102 + BTQ AX, R14 + JAE LBB14_102 + DECQ DI + INCQ CX + TESTQ DI, DI + JNE LBB14_40 + MOVQ BX, DX + JMP LBB14_46 + +LBB14_44: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + SUBQ R9, DX + NOTL AX + WORD $0x9848 // cltq + BSFQ AX, CX + ADDQ DX, CX + JMP LBB14_47 + +LBB14_45: + ADDQ BX, DX + +LBB14_46: + SUBQ R9, DX + MOVQ DX, CX + +LBB14_47: + CMPQ CX, R8 + JAE LBB14_50 + MOVQ 0(SI), R9 + QUAD $0xfffffcdb1d6ffec5 // vmovdqu $-805(%rip), %ymm3 /* LCPI14_0(%rip) */ + QUAD $0xfffffcf3256ffec5 // vmovdqu $-781(%rip), %ymm4 /* LCPI14_1(%rip) */ + QUAD $0xfffffd0b2d6ffec5 // vmovdqu $-757(%rip), %ymm5 /* LCPI14_2(%rip) */ + QUAD $0xfffffd23356ffec5 // vmovdqu $-733(%rip), %ymm6 /* LCPI14_3(%rip) */ + +LBB14_49: + LEAQ 1(CX), AX + MOVQ AX, 0(R10) + MOVB 0(R9)(CX*1), DX + JMP LBB14_51 + +LBB14_50: + XORL DX, DX + QUAD $0xfffffcac1d6ffec5 // vmovdqu $-852(%rip), %ymm3 /* LCPI14_0(%rip) */ + QUAD $0xfffffcc4256ffec5 // vmovdqu $-828(%rip), %ymm4 /* LCPI14_1(%rip) */ + QUAD $0xfffffcdc2d6ffec5 // vmovdqu $-804(%rip), %ymm5 /* LCPI14_2(%rip) */ + QUAD $0xfffffcf4356ffec5 // vmovdqu $-780(%rip), %ymm6 /* LCPI14_3(%rip) */ + +LBB14_51: + MOVLQSX 0(R13), CX + LEAQ -1(CX), AX + MOVL 0(R13)(CX*4), DI + CMPQ R15, $-1 + JNE LBB14_53 + MOVQ 0(R10), R15 + DECQ R15 + +LBB14_53: DECL DI CMPL DI, $5 - JA LBB15_54 - LONG $0x3c1d8d48; WORD $0x0003; BYTE $0x00 // leaq $828(%rip), %rbx /* LJTI15_0(%rip) */ + JA LBB14_58 + LONG $0x381d8d48; WORD $0x0005; BYTE $0x00 // leaq $1336(%rip), %rbx /* LJTI14_0(%rip) */ MOVLQSX 0(BX)(DI*4), DI ADDQ BX, DI JMP DI -LBB15_12: - MOVBLSX SI, CX - CMPL CX, $44 - MOVQ -48(BP), BX - JE LBB15_29 - CMPL CX, $93 - JE LBB15_14 - JMP LBB15_55 +LBB14_55: + MOVBLSX DX, DX + CMPL DX, $44 + JE LBB14_77 + CMPL DX, $93 + JNE LBB14_111 + MOVL AX, 0(R13) + MOVQ R15, BX + TESTL AX, AX + JNE LBB14_4 + JMP LBB14_112 -LBB15_54: - MOVL DX, 0(R13) - MOVBLSX SI, DX - CMPL DX, $123 - JBE LBB15_24 - JMP LBB15_55 +LBB14_58: + MOVL AX, 0(R13) + MOVBLSX DX, AX + CMPL AX, $123 + JBE LBB14_74 + JMP LBB14_111 -LBB15_15: - MOVBLSX SI, CX - CMPL CX, $44 - MOVQ -48(BP), BX - JNE LBB15_16 - CMPL AX, $65535 - JG LBB15_61 - LEAL 1(AX), CX - MOVL CX, 0(R13) - MOVL $3, 4(R13)(AX*4) - JMP LBB15_5 +LBB14_59: + MOVBLSX DX, DX + CMPL DX, $44 + JE LBB14_79 + CMPL DX, $125 + JNE LBB14_111 + MOVL AX, 0(R13) + MOVQ R15, BX + TESTL AX, AX + JNE LBB14_4 + JMP LBB14_112 -LBB15_17: - CMPB SI, $34 - MOVQ -48(BP), BX - JNE LBB15_55 - MOVL $4, 0(R13)(AX*4) +LBB14_62: + CMPB DX, $34 + JNE LBB14_111 + MOVQ R15, R14 + MOVL $4, 0(R13)(CX*4) -LBB15_19: - MOVQ R15, DI - MOVQ BX, SI - LONG $0x000519e8; BYTE $0x00 // callq _skip_string +LBB14_64: + MOVQ 0(R10), R12 + MOVQ 0(SI), DI + MOVQ 8(SI), SI + MOVQ R12, DX + LEAQ -56(BP), CX + MOVQ R10, R15 + WORD $0xf8c5; BYTE $0x77 // vzeroupper + LONG $0xfff34ee8; BYTE $0xff // callq _advance_string + MOVQ AX, BX TESTQ AX, AX - JNS LBB15_5 - JMP LBB15_56 + JS LBB14_103 + MOVQ BX, 0(R15) + TESTQ R12, R12 + MOVQ R15, R10 + MOVQ -48(BP), SI + MOVQ R14, R15 + MOVQ $4294977024, R14 + QUAD $0xfffffb9e1d6ffec5 // vmovdqu $-1122(%rip), %ymm3 /* LCPI14_0(%rip) */ + QUAD $0xfffffbb6256ffec5 // vmovdqu $-1098(%rip), %ymm4 /* LCPI14_1(%rip) */ + QUAD $0xfffffbce2d6ffec5 // vmovdqu $-1074(%rip), %ymm5 /* LCPI14_2(%rip) */ + QUAD $0xfffffbe6356ffec5 // vmovdqu $-1050(%rip), %ymm6 /* LCPI14_3(%rip) */ + JG LBB14_85 + JMP LBB14_104 -LBB15_20: - CMPB SI, $58 - MOVQ -48(BP), BX - JNE LBB15_55 - MOVL $0, 0(R13)(AX*4) - JMP LBB15_5 +LBB14_66: + CMPB DX, $58 + JNE LBB14_111 + MOVL $0, 0(R13)(CX*4) + JMP LBB14_85 -LBB15_22: - CMPB SI, $93 - MOVQ -48(BP), BX - JE LBB15_14 - MOVL $1, 0(R13)(AX*4) - MOVBLSX SI, DX - CMPL DX, $123 - JA LBB15_55 +LBB14_68: + CMPB DX, $93 + JNE LBB14_73 + MOVL AX, 0(R13) + MOVQ R15, BX + TESTL AX, AX + JNE LBB14_4 + JMP LBB14_112 -LBB15_24: - MOVQ $-1, AX - LONG $0x6b358d48; WORD $0x0002; BYTE $0x00 // leaq $619(%rip), %rsi /* LJTI15_1(%rip) */ - MOVLQSX 0(SI)(DX*4), DX - ADDQ SI, DX - JMP DX +LBB14_70: + MOVBLSX DX, DX + CMPL DX, $34 + JE LBB14_81 + CMPL DX, $125 + JNE LBB14_111 + MOVL AX, 0(R13) + MOVQ R15, BX + TESTL AX, AX + JNE LBB14_4 + JMP LBB14_112 -LBB15_27: - MOVQ 0(R15), DI - MOVQ 8(R15), SI - MOVQ BX, DX - MOVQ R14, CX +LBB14_73: + MOVL $1, 0(R13)(CX*4) + MOVBLSX DX, AX + CMPL AX, $123 + JA LBB14_111 -LBB15_28: - LEAQ -80(BP), R8 - MOVQ R14, R9 - LONG $0x00098ee8; BYTE $0x00 // callq _advance_number +LBB14_74: + MOVQ $-1, BX + LONG $0xe20d8d48; WORD $0x0003; BYTE $0x00 // leaq $994(%rip), %rcx /* LJTI14_1(%rip) */ + MOVLQSX 0(CX)(AX*4), AX + ADDQ CX, AX + JMP AX + +LBB14_75: + MOVQ R15, R14 + MOVQ 0(R10), R12 + LEAQ -1(R12), BX + MOVQ 0(SI), DI + ADDQ BX, DI + MOVQ 8(SI), SI + SUBQ BX, SI + MOVQ R10, R15 + WORD $0xf8c5; BYTE $0x77 // vzeroupper + LONG $0x0007c8e8; BYTE $0x00 // callq _skip_number TESTQ AX, AX - LONG $0xf0480f4c // cmovsq %rax, %r14 - MOVQ R14, AX - TESTQ R14, R14 - JNS LBB15_5 - JMP LBB15_56 + JS LBB14_105 + MOVQ 0(R15), CX + LEAQ -1(AX)(CX*1), AX + MOVQ AX, 0(R15) + TESTQ R12, R12 + MOVQ R15, R10 + MOVQ -48(BP), SI + MOVQ R14, R15 + MOVQ $4294977024, R14 + QUAD $0xfffffaa01d6ffec5 // vmovdqu $-1376(%rip), %ymm3 /* LCPI14_0(%rip) */ + QUAD $0xfffffab8256ffec5 // vmovdqu $-1352(%rip), %ymm4 /* LCPI14_1(%rip) */ + QUAD $0xfffffad02d6ffec5 // vmovdqu $-1328(%rip), %ymm5 /* LCPI14_2(%rip) */ + QUAD $0xfffffae8356ffec5 // vmovdqu $-1304(%rip), %ymm6 /* LCPI14_3(%rip) */ + JG LBB14_85 + JMP LBB14_112 -LBB15_25: - MOVBLSX SI, CX - CMPL CX, $34 - MOVQ -48(BP), BX - JE LBB15_33 +LBB14_77: + CMPL CX, $65535 + JG LBB14_106 + LEAL 1(CX), AX + MOVL AX, 0(R13) + MOVL $0, 4(R13)(CX*4) + JMP LBB14_85 -LBB15_16: - CMPL CX, $125 - JNE LBB15_55 +LBB14_79: + CMPL CX, $65535 + JG LBB14_106 + LEAL 1(CX), AX + MOVL AX, 0(R13) + MOVL $3, 4(R13)(CX*4) + JMP LBB14_85 -LBB15_14: - MOVL DX, 0(R13) - MOVQ R12, AX - TESTL DX, DX - JNE LBB15_7 - JMP LBB15_56 - -LBB15_29: - CMPL AX, $65535 - JG LBB15_61 - LEAL 1(AX), CX - MOVL CX, 0(R13) - MOVL $0, 4(R13)(AX*4) - JMP LBB15_5 - -LBB15_33: - MOVL $2, 0(R13)(AX*4) - MOVQ R15, DI - MOVQ BX, SI - LONG $0x000429e8; BYTE $0x00 // callq _skip_string +LBB14_81: + MOVQ R15, -64(BP) + MOVL $2, 0(R13)(CX*4) + MOVQ 0(R10), R12 + MOVQ 0(SI), DI + MOVQ 8(SI), SI + MOVQ R12, DX + LEAQ -56(BP), CX + MOVQ R10, R15 + WORD $0xf8c5; BYTE $0x77 // vzeroupper + LONG $0xfff194e8; BYTE $0xff // callq _advance_string + MOVQ AX, BX TESTQ AX, AX - JS LBB15_56 + JS LBB14_103 + MOVQ BX, 0(R15) + TESTQ R12, R12 + JLE LBB14_104 MOVLQSX 0(R13), AX CMPQ AX, $65535 - JG LBB15_61 + JG LBB14_106 + MOVQ R15, R10 LEAL 1(AX), CX MOVL CX, 0(R13) MOVL $4, 4(R13)(AX*4) - JMP LBB15_5 + MOVQ -48(BP), SI + MOVQ -64(BP), R15 + QUAD $0xfffff9c71d6ffec5 // vmovdqu $-1593(%rip), %ymm3 /* LCPI14_0(%rip) */ + QUAD $0xfffff9df256ffec5 // vmovdqu $-1569(%rip), %ymm4 /* LCPI14_1(%rip) */ + QUAD $0xfffff9f72d6ffec5 // vmovdqu $-1545(%rip), %ymm5 /* LCPI14_2(%rip) */ + QUAD $0xfffffa0f356ffec5 // vmovdqu $-1521(%rip), %ymm6 /* LCPI14_3(%rip) */ + JMP LBB14_85 -LBB15_36: - MOVQ 0(R15), DI - MOVQ 8(R15), SI - MOVQ BX, DX - JMP LBB15_28 +LBB14_86: + ADDQ $4, CX + LEAQ 0(R9)(CX*1), DX + MOVQ R8, DI + SUBQ CX, DI + JNE LBB14_25 + JMP LBB14_32 -LBB15_37: +LBB14_87: + MOVQ R15, R14 + JMP LBB14_64 + +LBB14_88: + MOVQ R15, R14 + MOVQ 0(R10), BX + MOVQ 0(SI), DI + ADDQ BX, DI + MOVQ 8(SI), SI + SUBQ BX, SI + MOVQ R10, R15 + WORD $0xf8c5; BYTE $0x77 // vzeroupper + LONG $0x000660e8; BYTE $0x00 // callq _skip_number + TESTQ AX, AX + JS LBB14_110 + ADDQ AX, 0(R15) + TESTQ BX, BX + MOVQ R15, R10 + MOVQ -48(BP), SI + MOVQ R14, R15 + MOVQ $4294977024, R14 + QUAD $0xfffff9401d6ffec5 // vmovdqu $-1728(%rip), %ymm3 /* LCPI14_0(%rip) */ + QUAD $0xfffff958256ffec5 // vmovdqu $-1704(%rip), %ymm4 /* LCPI14_1(%rip) */ + QUAD $0xfffff9702d6ffec5 // vmovdqu $-1680(%rip), %ymm5 /* LCPI14_2(%rip) */ + QUAD $0xfffff988356ffec5 // vmovdqu $-1656(%rip), %ymm6 /* LCPI14_3(%rip) */ + JG LBB14_85 + JMP LBB14_118 + +LBB14_90: MOVLQSX 0(R13), AX CMPQ AX, $65535 - JG LBB15_61 + JG LBB14_106 LEAL 1(AX), CX MOVL CX, 0(R13) MOVL $5, 4(R13)(AX*4) - JMP LBB15_5 + JMP LBB14_85 -LBB15_39: - MOVQ 8(R15), DX - LEAQ -4(DX), SI - CMPQ CX, SI - JA LBB15_60 - MOVQ 0(R15), DX - MOVL 0(DX)(CX*1), SI - CMPL SI, $1702063201 - JNE LBB15_57 - LEAQ 4(CX), AX - MOVQ AX, 0(BX) - MOVQ R14, AX - TESTQ CX, CX - JG LBB15_5 - JMP LBB15_56 +LBB14_92: + MOVQ 0(R10), AX + MOVQ 8(SI), CX + LEAQ -4(CX), DX + CMPQ AX, DX + JA LBB14_115 + MOVQ 0(SI), CX + MOVL 0(CX)(AX*1), DX + CMPL DX, $1702063201 + JNE LBB14_119 + LEAQ 4(AX), CX + MOVQ CX, 0(R10) + TESTQ AX, AX + JG LBB14_85 + JMP LBB14_109 -LBB15_42: - MOVQ 8(R15), DX - LEAQ -3(DX), SI - CMPQ CX, SI - JA LBB15_60 - MOVQ 0(R15), DX - CMPL -1(DX)(CX*1), $1819047278 - JE LBB15_3 - JMP LBB15_44 +LBB14_95: + MOVQ 0(R10), AX + MOVQ 8(SI), CX + LEAQ -3(CX), DX + CMPQ AX, DX + JA LBB14_115 + MOVQ 0(SI), CX + CMPL -1(CX)(AX*1), $1819047278 + JE LBB14_3 + JMP LBB14_122 -LBB15_47: - MOVQ 8(R15), DX - LEAQ -3(DX), SI - CMPQ CX, SI - JA LBB15_60 - MOVQ 0(R15), DX - CMPL -1(DX)(CX*1), $1702195828 - JE LBB15_3 - JMP LBB15_49 +LBB14_97: + MOVQ 0(R10), AX + MOVQ 8(SI), CX + LEAQ -3(CX), DX + CMPQ AX, DX + JA LBB14_115 + MOVQ 0(SI), CX + CMPL -1(CX)(AX*1), $1702195828 + JE LBB14_3 + JMP LBB14_125 -LBB15_52: +LBB14_99: MOVLQSX 0(R13), AX CMPQ AX, $65535 - JG LBB15_61 + JG LBB14_106 LEAL 1(AX), CX MOVL CX, 0(R13) MOVL $6, 4(R13)(AX*4) - JMP LBB15_5 + JMP LBB14_85 -LBB15_55: - MOVQ $-2, AX - JMP LBB15_56 +LBB14_101: + MOVWLZX AX, AX + SUBQ R9, DX + NOTL AX + BSFL AX, CX + ADDQ DX, CX + JMP LBB14_47 -LBB15_61: - MOVQ $-7, AX +LBB14_102: + NOTQ R9 + ADDQ R9, CX + JMP LBB14_47 -LBB15_56: - ADDQ $40, SP - BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp +LBB14_106: + MOVQ $-7, BX + JMP LBB14_112 + +LBB14_103: + MOVQ -48(BP), AX + MOVQ 8(AX), AX + MOVQ AX, 0(R15) + JMP LBB14_112 + +LBB14_104: + DECQ R12 + MOVQ R12, BX + JMP LBB14_112 + +LBB14_105: + MOVQ 0(R15), CX + SUBQ AX, CX + ADDQ $-2, CX + MOVQ CX, 0(R15) + +LBB14_111: + MOVQ $-2, BX + +LBB14_112: + MOVQ BX, AX + ADDQ $24, SP + BYTE $0x5b // popq %rbx + WORD $0x5c41 // popq %r12 + WORD $0x5d41 // popq %r13 + WORD $0x5e41 // popq %r14 + WORD $0x5f41 // popq %r15 + BYTE $0x5d // popq %rbp + WORD $0xf8c5; BYTE $0x77 // vzeroupper RET -LBB15_60: - MOVQ DX, 0(BX) - JMP LBB15_56 +LBB14_115: + MOVQ CX, 0(R10) + JMP LBB14_112 -LBB15_57: - MOVQ $-2, AX - CMPB SI, $97 - JNE LBB15_56 - INCQ CX - MOVL $1702063201, SI +LBB14_109: + DECQ AX + MOVQ AX, BX + JMP LBB14_112 -LBB15_59: - SHRL $8, SI - MOVQ CX, 0(BX) - MOVBLSX 0(DX)(CX*1), DI - MOVBLZX SI, BX - INCQ CX - CMPL BX, DI - MOVQ -48(BP), BX - JE LBB15_59 - JMP LBB15_56 +LBB14_110: + NOTQ AX + ADDQ AX, 0(R15) + JMP LBB14_111 -LBB15_49: - MOVQ R14, 0(BX) - MOVQ $-2, AX - CMPB 0(DX)(R14*1), $116 - JNE LBB15_56 - MOVL $1702195828, SI +LBB14_118: + DECQ BX + JMP LBB14_112 -LBB15_51: - SHRL $8, SI - MOVQ CX, 0(BX) - MOVBLSX 0(DX)(CX*1), DI - MOVBLZX SI, BX - INCQ CX - CMPL BX, DI - MOVQ -48(BP), BX - JE LBB15_51 - JMP LBB15_56 +LBB14_119: + MOVQ $-2, BX + CMPB DX, $97 + JNE LBB14_112 + INCQ AX + MOVL $1702063201, DX -LBB15_44: - MOVQ R14, 0(BX) - MOVQ $-2, AX - CMPB 0(DX)(R14*1), $110 - JNE LBB15_56 - MOVL $1819047278, SI +LBB14_121: + SHRL $8, DX + MOVQ AX, 0(R10) + MOVBLSX 0(CX)(AX*1), SI + MOVBLZX DX, DI + INCQ AX + CMPL DI, SI + JE LBB14_121 + JMP LBB14_112 -LBB15_46: - SHRL $8, SI - MOVQ CX, 0(BX) - MOVBLSX 0(DX)(CX*1), DI - MOVBLZX SI, BX - INCQ CX - CMPL BX, DI - MOVQ -48(BP), BX - JE LBB15_46 - JMP LBB15_56 +LBB14_122: + LEAQ -1(AX), DX + MOVQ DX, 0(R10) + MOVQ $-2, BX + CMPB -1(CX)(AX*1), $110 + JNE LBB14_112 + MOVL $1819047278, DX -// .set L15_0_set_12, LBB15_12-LJTI15_0 -// .set L15_0_set_15, LBB15_15-LJTI15_0 -// .set L15_0_set_17, LBB15_17-LJTI15_0 -// .set L15_0_set_20, LBB15_20-LJTI15_0 -// .set L15_0_set_22, LBB15_22-LJTI15_0 -// .set L15_0_set_25, LBB15_25-LJTI15_0 -LJTI15_0: - LONG $0xfffffccd // .long L15_0_set_12 - LONG $0xfffffd02 // .long L15_0_set_15 - LONG $0xfffffd33 // .long L15_0_set_17 - LONG $0xfffffd63 // .long L15_0_set_20 - LONG $0xfffffd7f // .long L15_0_set_22 - LONG $0xfffffde7 // .long L15_0_set_25 +LBB14_124: + SHRL $8, DX + MOVQ AX, 0(R10) + MOVBLSX 0(CX)(AX*1), SI + MOVBLZX DX, DI + INCQ AX + CMPL DI, SI + JE LBB14_124 + JMP LBB14_112 - // .set L15_1_set_56, LBB15_56-LJTI15_1 - // .set L15_1_set_55, LBB15_55-LJTI15_1 - // .set L15_1_set_19, LBB15_19-LJTI15_1 - // .set L15_1_set_36, LBB15_36-LJTI15_1 - // .set L15_1_set_27, LBB15_27-LJTI15_1 - // .set L15_1_set_37, LBB15_37-LJTI15_1 - // .set L15_1_set_39, LBB15_39-LJTI15_1 - // .set L15_1_set_42, LBB15_42-LJTI15_1 - // .set L15_1_set_47, LBB15_47-LJTI15_1 - // .set L15_1_set_52, LBB15_52-LJTI15_1 -LJTI15_1: - LONG $0xffffff3b // .long L15_1_set_56 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xfffffd32 // .long L15_1_set_19 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xfffffe5b // .long L15_1_set_36 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xfffffd9e // .long L15_1_set_27 - LONG $0xfffffd9e // .long L15_1_set_27 - LONG $0xfffffd9e // .long L15_1_set_27 - LONG $0xfffffd9e // .long L15_1_set_27 - LONG $0xfffffd9e // .long L15_1_set_27 - LONG $0xfffffd9e // .long L15_1_set_27 - LONG $0xfffffd9e // .long L15_1_set_27 - LONG $0xfffffd9e // .long L15_1_set_27 - LONG $0xfffffd9e // .long L15_1_set_27 - LONG $0xfffffd9e // .long L15_1_set_27 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xfffffe6a // .long L15_1_set_37 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xfffffe8f // .long L15_1_set_39 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xfffffec7 // .long L15_1_set_42 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xfffffeea // .long L15_1_set_47 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff2b // .long L15_1_set_55 - LONG $0xffffff0a // .long L15_1_set_52 +LBB14_125: + LEAQ -1(AX), DX + MOVQ DX, 0(R10) + MOVQ $-2, BX + CMPB -1(CX)(AX*1), $116 + JNE LBB14_112 + MOVL $1702195828, DX + +LBB14_127: + SHRL $8, DX + MOVQ AX, 0(R10) + MOVBLSX 0(CX)(AX*1), SI + MOVBLZX DX, DI + INCQ AX + CMPL DI, SI + JE LBB14_127 + JMP LBB14_112 + +// .set L14_0_set_55, LBB14_55-LJTI14_0 +// .set L14_0_set_59, LBB14_59-LJTI14_0 +// .set L14_0_set_62, LBB14_62-LJTI14_0 +// .set L14_0_set_66, LBB14_66-LJTI14_0 +// .set L14_0_set_68, LBB14_68-LJTI14_0 +// .set L14_0_set_70, LBB14_70-LJTI14_0 +LJTI14_0: + LONG $0xfffffad1 // .long L14_0_set_55 + LONG $0xfffffb0f // .long L14_0_set_59 + LONG $0xfffffb38 // .long L14_0_set_62 + LONG $0xfffffbba // .long L14_0_set_66 + LONG $0xfffffbd1 // .long L14_0_set_68 + LONG $0xfffffbea // .long L14_0_set_70 + + // .set L14_1_set_112, LBB14_112-LJTI14_1 + // .set L14_1_set_111, LBB14_111-LJTI14_1 + // .set L14_1_set_87, LBB14_87-LJTI14_1 + // .set L14_1_set_88, LBB14_88-LJTI14_1 + // .set L14_1_set_75, LBB14_75-LJTI14_1 + // .set L14_1_set_90, LBB14_90-LJTI14_1 + // .set L14_1_set_92, LBB14_92-LJTI14_1 + // .set L14_1_set_95, LBB14_95-LJTI14_1 + // .set L14_1_set_97, LBB14_97-LJTI14_1 + // .set L14_1_set_99, LBB14_99-LJTI14_1 +LJTI14_1: + LONG $0xffffff25 // .long L14_1_set_112 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xfffffd8c // .long L14_1_set_87 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xfffffd94 // .long L14_1_set_88 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xfffffc27 // .long L14_1_set_75 + LONG $0xfffffc27 // .long L14_1_set_75 + LONG $0xfffffc27 // .long L14_1_set_75 + LONG $0xfffffc27 // .long L14_1_set_75 + LONG $0xfffffc27 // .long L14_1_set_75 + LONG $0xfffffc27 // .long L14_1_set_75 + LONG $0xfffffc27 // .long L14_1_set_75 + LONG $0xfffffc27 // .long L14_1_set_75 + LONG $0xfffffc27 // .long L14_1_set_75 + LONG $0xfffffc27 // .long L14_1_set_75 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xfffffe00 // .long L14_1_set_90 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xfffffe25 // .long L14_1_set_92 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xfffffe60 // .long L14_1_set_95 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xfffffe8a // .long L14_1_set_97 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xffffff1e // .long L14_1_set_111 + LONG $0xfffffeb4 // .long L14_1_set_99 _skip_array: BYTE $0x55 // pushq %rbp @@ -4735,719 +5012,547 @@ _skip_object: BYTE $0x5d // popq %rbp JMP _fsm_exec -LCPI18_0: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - _skip_string: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp WORD $0x5741 // pushq %r15 WORD $0x5641 // pushq %r14 - WORD $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx BYTE $0x50 // pushq %rax MOVQ SI, R14 - MOVQ DI, BX - MOVQ 0(SI), R15 - MOVQ R15, SI - MOVL $34, DX - MOVL $92, CX - LONG $0xffcf45e8; BYTE $0xff // callq _strchr2 + MOVQ DI, R15 + MOVQ 0(SI), BX + MOVQ 0(DI), DI + MOVQ 8(R15), SI + LEAQ -32(BP), CX + MOVQ BX, DX + LONG $0xffec43e8; BYTE $0xff // callq _advance_string TESTQ AX, AX - JS LBB18_3 + JS LBB17_2 + DECQ BX MOVQ AX, CX - MOVQ 0(BX), R11 - CMPB 0(R11)(AX*1), $34 - JNE LBB18_6 + MOVQ BX, AX + JMP LBB17_3 -LBB18_2: - DECQ R15 - INCQ CX - MOVQ CX, R12 - MOVQ R15, AX - JMP LBB18_5 +LBB17_2: + MOVQ 8(R15), CX + +LBB17_3: + MOVQ CX, 0(R14) + ADDQ $8, SP + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 + WORD $0x5f41 // popq %r15 + BYTE $0x5d // popq %rbp + RET + +_skip_negative: + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5641 // pushq %r14 + BYTE $0x53 // pushq %rbx + MOVQ SI, R14 + MOVQ 0(SI), BX + MOVQ 0(DI), AX + ADDQ BX, AX + MOVQ 8(DI), SI + SUBQ BX, SI + MOVQ AX, DI + LONG $0x000172e8; BYTE $0x00 // callq _skip_number + TESTQ AX, AX + JS LBB18_1 + ADDQ AX, 0(R14) + DECQ BX + JMP LBB18_3 + +LBB18_1: + NOTQ AX + ADDQ AX, 0(R14) + MOVQ $-2, BX LBB18_3: - MOVQ 8(BX), R12 + MOVQ BX, AX + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 + BYTE $0x5d // popq %rbp + RET -LBB18_4: +LCPI19_0: + QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' + QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' + +LCPI19_1: + QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' + QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' + +LCPI19_2: + QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' + QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' + +LCPI19_3: + QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' + QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' + +LCPI19_4: + QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' + QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' + +LCPI19_5: + QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' + QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' + +LCPI19_6: + QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE' + QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE' + +LCPI19_7: + QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' + +LCPI19_8: + QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' + +LCPI19_9: + QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' + +LCPI19_10: + QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' + +LCPI19_11: + QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' + +LCPI19_12: + QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' + +LCPI19_13: + QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE' + +_skip_number: + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5741 // pushq %r15 + WORD $0x5641 // pushq %r14 + BYTE $0x53 // pushq %rbx + TESTQ SI, SI + JE LBB19_49 + CMPB 0(DI), $48 + JNE LBB19_4 + MOVL $1, AX + CMPQ SI, $1 + JE LBB19_50 + CMPB 1(DI), $46 + JNE LBB19_50 + +LBB19_4: + MOVQ $-1, R10 + CMPQ SI, $32 + JB LBB19_69 + QUAD $0xfffffe67056ffec5 // vmovdqu $-409(%rip), %ymm0 /* LCPI19_0(%rip) */ + QUAD $0xfffffe7f0d6ffec5 // vmovdqu $-385(%rip), %ymm1 /* LCPI19_1(%rip) */ + QUAD $0xfffffe97156ffec5 // vmovdqu $-361(%rip), %ymm2 /* LCPI19_2(%rip) */ + QUAD $0xfffffeaf1d6ffec5 // vmovdqu $-337(%rip), %ymm3 /* LCPI19_3(%rip) */ + QUAD $0xfffffec7256ffec5 // vmovdqu $-313(%rip), %ymm4 /* LCPI19_4(%rip) */ + QUAD $0xfffffedf2d6ffec5 // vmovdqu $-289(%rip), %ymm5 /* LCPI19_5(%rip) */ + QUAD $0xfffffef7356ffec5 // vmovdqu $-265(%rip), %ymm6 /* LCPI19_6(%rip) */ + MOVQ $-1, R8 + MOVQ $-1, R9 + MOVQ DI, R14 + +LBB19_6: + LONG $0x6f7ec1c4; BYTE $0x3e // vmovdqu (%r14), %ymm7 + LONG $0xc06445c5 // vpcmpgtb %ymm0, %ymm7, %ymm8 + LONG $0xcf6475c5 // vpcmpgtb %ymm7, %ymm1, %ymm9 + LONG $0xdb3541c4; BYTE $0xc0 // vpand %ymm8, %ymm9, %ymm8 + LONG $0xca7445c5 // vpcmpeqb %ymm2, %ymm7, %ymm9 + LONG $0xd37445c5 // vpcmpeqb %ymm3, %ymm7, %ymm10 + LONG $0xeb2d41c4; BYTE $0xc9 // vpor %ymm9, %ymm10, %ymm9 + LONG $0xd4db45c5 // vpand %ymm4, %ymm7, %ymm10 + LONG $0xd6742dc5 // vpcmpeqb %ymm6, %ymm10, %ymm10 + LONG $0xfd74c5c5 // vpcmpeqb %ymm5, %ymm7, %ymm7 + LONG $0xc7d7fdc5 // vpmovmskb %ymm7, %eax + LONG $0xd77dc1c4; BYTE $0xda // vpmovmskb %ymm10, %ebx + LONG $0xd77d41c4; BYTE $0xd9 // vpmovmskb %ymm9, %r11d + LONG $0xffebbdc5 // vpor %ymm7, %ymm8, %ymm7 + LONG $0xeb2d41c4; BYTE $0xc1 // vpor %ymm9, %ymm10, %ymm8 + LONG $0xffebbdc5 // vpor %ymm7, %ymm8, %ymm7 + LONG $0xcfd7fdc5 // vpmovmskb %ymm7, %ecx + NOTQ CX + BSFQ CX, CX + CMPL CX, $32 + JE LBB19_8 + MOVL $-1, DX + SHLL CX, DX + NOTL DX + ANDL DX, AX + ANDL DX, BX + ANDL R11, DX + MOVL DX, R11 + +LBB19_8: + LEAL -1(AX), DX + ANDL AX, DX + JNE LBB19_66 + LEAL -1(BX), DX + ANDL BX, DX + JNE LBB19_66 + LEAL -1(R11), DX + ANDL R11, DX + JNE LBB19_66 + TESTL AX, AX + JE LBB19_14 + MOVQ R14, DX + SUBQ DI, DX + BSFL AX, AX + ADDQ DX, AX + CMPQ R9, $-1 + JNE LBB19_67 + MOVQ AX, R9 + +LBB19_14: + TESTL BX, BX + JE LBB19_17 + MOVQ R14, DX + SUBQ DI, DX + BSFL BX, AX + ADDQ DX, AX + CMPQ R8, $-1 + JNE LBB19_67 + MOVQ AX, R8 + +LBB19_17: + TESTL R11, R11 + JE LBB19_20 + MOVQ R14, DX + SUBQ DI, DX + BSFL R11, AX + ADDQ DX, AX + CMPQ R10, $-1 + JNE LBB19_67 + MOVQ AX, R10 + +LBB19_20: + CMPL CX, $32 + JNE LBB19_51 + ADDQ $32, R14 + ADDQ $-32, SI + CMPQ SI, $31 + JA LBB19_6 + WORD $0xf8c5; BYTE $0x77 // vzeroupper + CMPQ SI, $16 + JB LBB19_40 + +LBB19_23: + QUAD $0xfffffdf1056f7ac5 // vmovdqu $-527(%rip), %xmm8 /* LCPI19_7(%rip) */ + QUAD $0xfffffdf90d6f7ac5 // vmovdqu $-519(%rip), %xmm9 /* LCPI19_8(%rip) */ + QUAD $0xfffffe01156f7ac5 // vmovdqu $-511(%rip), %xmm10 /* LCPI19_9(%rip) */ + QUAD $0xfffffe091d6f7ac5 // vmovdqu $-503(%rip), %xmm11 /* LCPI19_10(%rip) */ + QUAD $0xfffffe11256ffac5 // vmovdqu $-495(%rip), %xmm4 /* LCPI19_11(%rip) */ + QUAD $0xfffffe192d6ffac5 // vmovdqu $-487(%rip), %xmm5 /* LCPI19_12(%rip) */ + QUAD $0xfffffe21356ffac5 // vmovdqu $-479(%rip), %xmm6 /* LCPI19_13(%rip) */ + MOVL $4294967295, R11 + +LBB19_24: + LONG $0x6f7ac1c4; BYTE $0x3e // vmovdqu (%r14), %xmm7 + LONG $0x6441c1c4; BYTE $0xc0 // vpcmpgtb %xmm8, %xmm7, %xmm0 + LONG $0xcf64b1c5 // vpcmpgtb %xmm7, %xmm9, %xmm1 + LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 + LONG $0xcf74a9c5 // vpcmpeqb %xmm7, %xmm10, %xmm1 + LONG $0xd774a1c5 // vpcmpeqb %xmm7, %xmm11, %xmm2 + LONG $0xc9ebe9c5 // vpor %xmm1, %xmm2, %xmm1 + LONG $0xd4dbc1c5 // vpand %xmm4, %xmm7, %xmm2 + LONG $0xd674e9c5 // vpcmpeqb %xmm6, %xmm2, %xmm2 + LONG $0xfd74c1c5 // vpcmpeqb %xmm5, %xmm7, %xmm7 + LONG $0xdfebe9c5 // vpor %xmm7, %xmm2, %xmm3 + LONG $0xc0ebf1c5 // vpor %xmm0, %xmm1, %xmm0 + LONG $0xc0ebe1c5 // vpor %xmm0, %xmm3, %xmm0 + LONG $0xc7d7f9c5 // vpmovmskb %xmm7, %eax + LONG $0xdad7f9c5 // vpmovmskb %xmm2, %ebx + LONG $0xf9d779c5 // vpmovmskb %xmm1, %r15d + LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx + XORQ R11, CX + BSFQ CX, CX + CMPL CX, $16 + JE LBB19_26 + MOVL $-1, DX + SHLL CX, DX + NOTL DX + ANDL DX, AX + ANDL DX, BX + ANDL R15, DX + MOVL DX, R15 + +LBB19_26: + LEAL -1(AX), DX + ANDL AX, DX + JNE LBB19_66 + LEAL -1(BX), DX + ANDL BX, DX + JNE LBB19_66 + LEAL -1(R15), DX + ANDL R15, DX + JNE LBB19_66 + TESTL AX, AX + JE LBB19_32 + MOVQ R14, DX + SUBQ DI, DX + BSFL AX, AX + ADDQ DX, AX + CMPQ R9, $-1 + JNE LBB19_67 + MOVQ AX, R9 + +LBB19_32: + TESTL BX, BX + JE LBB19_35 + MOVQ R14, DX + SUBQ DI, DX + BSFL BX, AX + ADDQ DX, AX + CMPQ R8, $-1 + JNE LBB19_67 + MOVQ AX, R8 + +LBB19_35: + TESTL R15, R15 + JE LBB19_38 + MOVQ R14, DX + SUBQ DI, DX + BSFL R15, AX + ADDQ DX, AX + CMPQ R10, $-1 + JNE LBB19_67 + MOVQ AX, R10 + +LBB19_38: + CMPL CX, $16 + JNE LBB19_52 + ADDQ $16, R14 + ADDQ $-16, SI + CMPQ SI, $15 + JA LBB19_24 + +LBB19_40: + LONG $0x19158d48; WORD $0x0001; BYTE $0x00 // leaq $281(%rip), %rdx /* LJTI19_0(%rip) */ + +LBB19_41: + MOVQ R14, CX + MOVBLSX 0(R14), AX + ADDL $-43, AX + CMPL AX, $58 + JA LBB19_54 + LEAQ 1(CX), R14 + MOVLQSX 0(DX)(AX*4), AX + ADDQ DX, AX + JMP AX + +LBB19_43: + MOVQ R14, AX + SUBQ DI, AX + CMPQ R10, $-1 + JNE LBB19_68 + DECQ AX + MOVQ AX, R10 + JMP LBB19_41 + +LBB19_45: + MOVQ R14, AX + SUBQ DI, AX + CMPQ R8, $-1 + JNE LBB19_68 + DECQ AX + MOVQ AX, R8 + JMP LBB19_41 + +LBB19_47: + MOVQ R14, AX + SUBQ DI, AX + CMPQ R9, $-1 + JNE LBB19_68 + DECQ AX + MOVQ AX, R9 + JMP LBB19_41 + +LBB19_49: MOVQ $-1, AX -LBB18_5: - MOVQ R12, 0(R14) - ADDQ $8, SP +LBB19_50: BYTE $0x5b // popq %rbx - WORD $0x5c41 // popq %r12 - WORD $0x5d41 // popq %r13 WORD $0x5e41 // popq %r14 WORD $0x5f41 // popq %r15 BYTE $0x5d // popq %rbp WORD $0xf8c5; BYTE $0x77 // vzeroupper RET -LBB18_6: - MOVQ $4294967296, R9 - LEAQ 1(CX), R8 - MOVQ 8(BX), R12 - MOVQ R12, DX - SUBQ R8, DX - LEAQ 1(R11)(CX*1), DI - MOVQ DI, CX - MOVQ DX, AX - MOVQ DI, SI - ANDQ $31, CX - JE LBB18_10 - MOVQ DI, AX - ANDQ $-32, AX - LONG $0x006ffdc5 // vmovdqa (%rax), %ymm0 - QUAD $0xffffff380574fdc5 // vpcmpeqb $-200(%rip), %ymm0, %ymm0 /* LCPI18_0(%rip) */ - LONG $0xc0d7fdc5 // vpmovmskb %ymm0, %eax - WORD $0x9848 // cltq - SARQ CX, AX - TESTQ AX, AX - JE LBB18_9 - ORQ R9, AX - BSFQ AX, AX - CMPQ AX, DX - MOVQ $-1, CX - LONG $0xc84c0f48 // cmovlq %rax, %rcx - JMP LBB18_33 +LBB19_51: + ADDQ CX, R14 + WORD $0xf8c5; BYTE $0x77 // vzeroupper + JMP LBB19_53 -LBB18_9: - MOVL $32, BX - SUBQ CX, BX - LEAQ 0(DI)(BX*1), SI - MOVQ DX, AX - SUBQ BX, AX +LBB19_52: + ADDQ CX, R14 -LBB18_10: - CMPQ AX, $128 - JL LBB18_14 - QUAD $0xfffffeee0d6ffec5 // vmovdqu $-274(%rip), %ymm1 /* LCPI18_0(%rip) */ - -LBB18_12: - LONG $0x266ffdc5 // vmovdqa (%rsi), %ymm4 - LONG $0x5e6ffdc5; BYTE $0x20 // vmovdqa $32(%rsi), %ymm3 - LONG $0x566ffdc5; BYTE $0x40 // vmovdqa $64(%rsi), %ymm2 - LONG $0x466ffdc5; BYTE $0x60 // vmovdqa $96(%rsi), %ymm0 - LONG $0xe974ddc5 // vpcmpeqb %ymm1, %ymm4, %ymm5 - LONG $0xf174e5c5 // vpcmpeqb %ymm1, %ymm3, %ymm6 - LONG $0xedebcdc5 // vpor %ymm5, %ymm6, %ymm5 - LONG $0xf174edc5 // vpcmpeqb %ymm1, %ymm2, %ymm6 - LONG $0xf974fdc5 // vpcmpeqb %ymm1, %ymm0, %ymm7 - LONG $0xf7ebcdc5 // vpor %ymm7, %ymm6, %ymm6 - LONG $0xeeebd5c5 // vpor %ymm6, %ymm5, %ymm5 - LONG $0x177de2c4; BYTE $0xed // vptest %ymm5, %ymm5 - JNE LBB18_20 - SUBQ $-128, SI - LEAQ -128(AX), BX - CMPQ AX, $255 - MOVQ BX, AX - JG LBB18_12 - JMP LBB18_15 - -LBB18_14: - MOVQ AX, BX - -LBB18_15: - MOVQ $-1, AX - TESTQ BX, BX - JS LBB18_5 - LONG $0x066ffdc5 // vmovdqa (%rsi), %ymm0 - QUAD $0xfffffe840574fdc5 // vpcmpeqb $-380(%rip), %ymm0, %ymm0 /* LCPI18_0(%rip) */ - LONG $0xd0d77dc5 // vpmovmskb %ymm0, %r10d - TESTL R10, R10 - JE LBB18_22 - -LBB18_17: - MOVQ SI, CX - -LBB18_18: - MOVL R10, SI - ORQ R9, SI - BSFQ SI, SI - CMPQ SI, BX - JGE LBB18_5 - SUBQ DI, CX - ADDQ SI, CX - JMP LBB18_33 - -LBB18_20: - QUAD $0xfffffe520d74ddc5 // vpcmpeqb $-430(%rip), %ymm4, %ymm1 /* LCPI18_0(%rip) */ - LONG $0xc1d7fdc5 // vpmovmskb %ymm1, %eax - TESTL AX, AX - JE LBB18_25 - MOVL AX, AX - SUBQ DI, SI - ORQ R9, AX - BSFQ AX, CX - ADDQ SI, CX - JMP LBB18_33 - -LBB18_22: - CMPQ BX, $31 - JLE LBB18_5 - LEAQ 32(SI), CX - LONG $0x016ffdc5 // vmovdqa (%rcx), %ymm0 - QUAD $0xfffffe1c0574fdc5 // vpcmpeqb $-484(%rip), %ymm0, %ymm0 /* LCPI18_0(%rip) */ - LONG $0xd0d77dc5 // vpmovmskb %ymm0, %r10d - TESTL R10, R10 - JE LBB18_29 - ADDQ $-32, BX - JMP LBB18_18 - -LBB18_25: - QUAD $0xfffffe050d74e5c5 // vpcmpeqb $-507(%rip), %ymm3, %ymm1 /* LCPI18_0(%rip) */ - LONG $0xc1d7fdc5 // vpmovmskb %ymm1, %eax - TESTL AX, AX - JE LBB18_27 - MOVL AX, AX - ORQ R9, AX - BSFQ AX, AX - SUBQ DI, SI - LEAQ 32(SI)(AX*1), CX - JMP LBB18_33 - -LBB18_27: - QUAD $0xfffffde20d74edc5 // vpcmpeqb $-542(%rip), %ymm2, %ymm1 /* LCPI18_0(%rip) */ - LONG $0xc1d7fdc5 // vpmovmskb %ymm1, %eax - SUBQ DI, SI - TESTL AX, AX - JE LBB18_32 - MOVL AX, AX - ORQ R9, AX - BSFQ AX, AX - LEAQ 64(SI)(AX*1), CX - JMP LBB18_33 - -LBB18_29: - CMPQ BX, $64 - JL LBB18_5 - LEAQ 64(SI), CX - LONG $0x016ffdc5 // vmovdqa (%rcx), %ymm0 - QUAD $0xfffffdad0574fdc5 // vpcmpeqb $-595(%rip), %ymm0, %ymm0 /* LCPI18_0(%rip) */ - LONG $0xd0d77dc5 // vpmovmskb %ymm0, %r10d - TESTL R10, R10 - JE LBB18_72 - ADDQ $-64, BX - JMP LBB18_18 - -LBB18_32: - QUAD $0xfffffd8f0574fdc5 // vpcmpeqb $-625(%rip), %ymm0, %ymm0 /* LCPI18_0(%rip) */ - LONG $0xc0d7fdc5 // vpmovmskb %ymm0, %eax - ORQ R9, AX - BSFQ AX, AX - LEAQ 96(SI)(AX*1), CX - -LBB18_33: - MOVQ $-1, AX - CMPQ CX, DX - JAE LBB18_5 - ADDQ R8, CX - JS LBB18_5 - LEAQ -1(R11), R10 - QUAD $0xfffffd5a056ffec5 // vmovdqu $-678(%rip), %ymm0 /* LCPI18_0(%rip) */ - -LBB18_36: - LEAQ 0(R10)(CX*1), DX - XORL AX, AX - -LBB18_37: - CMPB 0(DX)(AX*1), $92 - LEAQ -1(AX), AX - JE LBB18_37 - NOTL AX - TESTB $1, AX - JE LBB18_70 - LEAQ 1(CX), R13 - MOVQ R12, DX - SUBQ R13, DX - LEAQ 1(R11)(CX*1), BX - MOVQ BX, CX - MOVQ DX, DI - MOVQ BX, SI - ANDQ $31, CX - JE LBB18_43 - MOVQ BX, AX - ANDQ $-32, AX - LONG $0x0874fdc5 // vpcmpeqb (%rax), %ymm0, %ymm1 - LONG $0xc1d7fdc5 // vpmovmskb %ymm1, %eax - WORD $0x9848 // cltq - SARQ CX, AX - TESTQ AX, AX - JE LBB18_42 - ORQ R9, AX - BSFQ AX, CX - CMPQ CX, DX - MOVQ $-1, AX - LONG $0xc84d0f48 // cmovgeq %rax, %rcx - JMP LBB18_60 - -LBB18_42: - MOVL $32, AX - SUBQ CX, AX - LEAQ 0(BX)(AX*1), SI - MOVQ DX, DI - SUBQ AX, DI - -LBB18_43: - MOVQ DI, AX - CMPQ DI, $128 - JL LBB18_46 - -LBB18_44: - LONG $0x2674fdc5 // vpcmpeqb (%rsi), %ymm0, %ymm4 - LONG $0x5e74fdc5; BYTE $0x20 // vpcmpeqb $32(%rsi), %ymm0, %ymm3 - LONG $0x5674fdc5; BYTE $0x40 // vpcmpeqb $64(%rsi), %ymm0, %ymm2 - LONG $0x4e74fdc5; BYTE $0x60 // vpcmpeqb $96(%rsi), %ymm0, %ymm1 - LONG $0xecebe5c5 // vpor %ymm4, %ymm3, %ymm5 - LONG $0xf1ebedc5 // vpor %ymm1, %ymm2, %ymm6 - LONG $0xeeebd5c5 // vpor %ymm6, %ymm5, %ymm5 - LONG $0x177de2c4; BYTE $0xed // vptest %ymm5, %ymm5 - JNE LBB18_52 - SUBQ $-128, SI - LEAQ -128(AX), DI - CMPQ AX, $255 - MOVQ DI, AX - JG LBB18_44 - -LBB18_46: - MOVQ $-1, AX - TESTQ DI, DI - JS LBB18_5 - LONG $0x0e74fdc5 // vpcmpeqb (%rsi), %ymm0, %ymm1 - LONG $0xc1d77dc5 // vpmovmskb %ymm1, %r8d - TESTL R8, R8 - JE LBB18_49 - -LBB18_48: - MOVQ SI, CX - JMP LBB18_57 - -LBB18_49: - CMPQ DI, $31 - JLE LBB18_5 - LEAQ 32(SI), CX - LONG $0x0974fdc5 // vpcmpeqb (%rcx), %ymm0, %ymm1 - LONG $0xc1d77dc5 // vpmovmskb %ymm1, %r8d - TESTL R8, R8 - JE LBB18_54 - ADDQ $-32, DI - JMP LBB18_57 - -LBB18_52: - LONG $0xc4d7fdc5 // vpmovmskb %ymm4, %eax - TESTL AX, AX - JE LBB18_62 - MOVL AX, AX - SUBQ BX, SI - ORQ R9, AX - BSFQ AX, CX - JMP LBB18_59 - -LBB18_54: - CMPQ DI, $64 - JL LBB18_5 - LEAQ 64(SI), CX - LONG $0x0974fdc5 // vpcmpeqb (%rcx), %ymm0, %ymm1 - LONG $0xc1d77dc5 // vpmovmskb %ymm1, %r8d - TESTL R8, R8 - JE LBB18_64 - ADDQ $-64, DI - -LBB18_57: - MOVL R8, SI - ORQ R9, SI - BSFQ SI, SI - CMPQ SI, DI - JGE LBB18_5 - SUBQ BX, CX - -LBB18_59: - ADDQ SI, CX - -LBB18_60: - MOVQ $-1, AX - CMPQ CX, DX - JAE LBB18_5 - ADDQ R13, CX - JNS LBB18_36 - JMP LBB18_5 - -LBB18_62: - LONG $0xc3d7fdc5 // vpmovmskb %ymm3, %eax - TESTL AX, AX - JE LBB18_67 - MOVL AX, AX - ORQ R9, AX - BSFQ AX, AX - SUBQ BX, SI - LEAQ 32(SI)(AX*1), CX - JMP LBB18_60 - -LBB18_64: - CMPQ DI, $96 - JL LBB18_5 - ADDQ $96, SI - LONG $0x0e74fdc5 // vpcmpeqb (%rsi), %ymm0, %ymm1 - LONG $0xc1d77dc5 // vpmovmskb %ymm1, %r8d - TESTL R8, R8 - JE LBB18_5 - ADDQ $-96, DI - JMP LBB18_48 - -LBB18_67: - LONG $0xc2d7fdc5 // vpmovmskb %ymm2, %eax - SUBQ BX, SI - TESTL AX, AX - JE LBB18_69 - MOVL AX, AX - ORQ R9, AX - BSFQ AX, AX - LEAQ 64(SI)(AX*1), CX - JMP LBB18_60 - -LBB18_69: - LONG $0xc1d7fdc5 // vpmovmskb %ymm1, %eax - ORQ R9, AX - BSFQ AX, AX - LEAQ 96(SI)(AX*1), CX - JMP LBB18_60 - -LBB18_70: - TESTQ CX, CX - JNS LBB18_2 - JMP LBB18_4 - -LBB18_72: - CMPQ BX, $96 - JL LBB18_5 - ADDQ $96, SI - LONG $0x066ffdc5 // vmovdqa (%rsi), %ymm0 - QUAD $0xfffffb4e0574fdc5 // vpcmpeqb $-1202(%rip), %ymm0, %ymm0 /* LCPI18_0(%rip) */ - LONG $0xd0d77dc5 // vpmovmskb %ymm0, %r10d - TESTL R10, R10 - JE LBB18_5 - ADDQ $-96, BX - JMP LBB18_17 - -_skip_negative: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - BYTE $0x53 // pushq %rbx - SUBQ $40, SP - MOVQ SI, DX - MOVQ 0(SI), CX - LEAQ -1(CX), BX - MOVQ 0(DI), AX - MOVQ 8(DI), SI - LEAQ -40(BP), R8 - MOVQ AX, DI - MOVQ BX, R9 - LONG $0x00001ee8; BYTE $0x00 // callq _advance_number - TESTQ AX, AX - LONG $0xc3490f48 // cmovnsq %rbx, %rax - ADDQ $40, SP - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - RET - -LCPI20_0: - QUAD $0x4024000000000000 // .quad 0x4024000000000000 - -LCPI20_1: - QUAD $0x7ff0000000000000 // .quad 0x7ff0000000000000 - -_advance_number: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 - WORD $0x5641 // pushq %r14 - BYTE $0x53 // pushq %rbx - MOVQ $-1, AX - CMPQ SI, CX - JBE LBB20_9 - MOVQ $0, 16(R8) - MOVQ R9, 24(R8) - MOVB 0(DI)(CX*1), R14 - CMPB R14, $48 - JNE LBB20_10 - INCQ CX - CMPQ CX, SI - JAE LBB20_12 - XORL R9, R9 - -LBB20_4: - LONG $0x2afbc1c4; BYTE $0xc1 // vcvtsi2sd %r9, %xmm0, %xmm0 - MOVQ R9, 16(R8) - LONG $0x117bc1c4; WORD $0x0840 // vmovsd %xmm0, $8(%r8) - ADDQ $8, R8 - MOVL $9, BX - MOVQ R8, R9 - CMPQ CX, SI - JAE LBB20_25 - JMP LBB20_5 - -LBB20_10: - LEAL -48(R14), BX - CMPB BX, $9 - JBE LBB20_13 - -LBB20_11: - MOVQ $-2, AX - JMP LBB20_55 - -LBB20_12: - MOVL $9, AX - JMP LBB20_55 - -LBB20_13: - INCQ CX - XORL R11, R11 - MOVQ CX, R10 - -LBB20_14: - IMUL3Q $10, R11, R9 - JO LBB20_19 - MOVBLZX R14, CX - ADDQ $-48, CX - ADDQ CX, R9 - JO LBB20_19 - CMPQ SI, R10 - JE LBB20_34 - MOVBLZX 0(DI)(R10*1), R14 - LEAL -48(R14), CX - INCQ R10 - MOVQ R9, R11 - CMPB CX, $10 - JB LBB20_14 - DECQ R10 - MOVQ R10, CX - JMP LBB20_4 - -LBB20_19: - MOVQ R9, 16(R8) - LONG $0x2afbc1c4; BYTE $0xc9 // vcvtsi2sd %r9, %xmm0, %xmm1 - LONG $0x2afbc1c4; BYTE $0xc3 // vcvtsi2sd %r11, %xmm0, %xmm0 - LEAQ 8(R8), R9 - CMPQ R10, SI - MOVQ R10, R11 - LONG $0xde420f4c // cmovbq %rsi, %r11 - LONG $0x117bc1c4; WORD $0x0848 // vmovsd %xmm1, $8(%r8) - MOVB -1(DI)(R10*1), BX - DECQ R10 - QUAD $0xfffffef80d10fbc5 // vmovsd $-264(%rip), %xmm1 /* LCPI20_0(%rip) */ - -LBB20_20: - LONG $0xc159fbc5 // vmulsd %xmm1, %xmm0, %xmm0 - LEAQ 1(R10), CX - MOVBLSX BX, BX - ADDL $-48, BX - LONG $0xd32ae3c5 // vcvtsi2sd %ebx, %xmm3, %xmm2 - LONG $0xc258fbc5 // vaddsd %xmm2, %xmm0, %xmm0 - CMPQ CX, SI - JAE LBB20_23 - MOVBLZX 1(DI)(R10*1), BX - LEAL -48(BX), R14 - MOVQ CX, R10 - CMPB R14, $10 - JB LBB20_20 - JMP LBB20_24 - -LBB20_23: - MOVQ R11, CX - -LBB20_24: - LONG $0x117bc1c4; WORD $0x0840 // vmovsd %xmm0, $8(%r8) - MOVQ $9223372036854775807, BX - MOVQ BX, 16(R8) - MOVL $8, BX - CMPQ CX, SI - JAE LBB20_25 - -LBB20_5: - CMPB 0(DI)(CX*1), $46 - JNE LBB20_25 - INCQ CX - CMPQ CX, SI - JAE LBB20_9 - MOVB 0(DI)(CX*1), R14 - LEAL -48(R14), BX - CMPB BX, $9 - JA LBB20_11 - MOVL $2, R11 - SUBQ SI, R11 - XORL R10, R10 - MOVQ CX, R8 - -LBB20_36: - LEAQ 0(R11)(R8*1), R15 - LEAL 0(R10)(R10*4), R10 - MOVBLZX R14, BX - LEAL -48(BX)(R10*2), R10 - CMPQ R15, $1 - JE LBB20_44 - MOVBLZX 1(DI)(R8*1), R14 - INCQ R8 - LEAL -48(R14), BX - CMPB BX, $10 - JB LBB20_36 - JMP LBB20_45 - -LBB20_25: - MOVQ CX, R8 - CMPQ R8, SI - JAE LBB20_54 - -LBB20_26: - MOVB 0(DI)(R8*1), CX - ORB $32, CX - CMPB CX, $101 - JNE LBB20_54 - LEAQ 1(R8), CX - CMPQ CX, SI - JAE LBB20_9 - MOVB 0(DI)(CX*1), R10 - CMPB R10, $45 - JE LBB20_30 - MOVL $1, R11 - CMPB R10, $43 - JNE LBB20_38 - -LBB20_30: - LEAQ -1(SI), BX - CMPQ CX, BX - JAE LBB20_55 - LEAQ 2(R8), R14 - XORL AX, AX - CMPB R10, $43 - SETEQ AX - LEAL -1(AX)(AX*1), R11 - MOVB 2(DI)(R8*1), R10 - JMP LBB20_39 - -LBB20_9: - MOVQ SI, CX - -LBB20_55: - MOVQ CX, 0(DX) - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - RET - -LBB20_34: - MOVQ SI, CX - JMP LBB20_4 - -LBB20_38: - MOVQ CX, R14 - -LBB20_39: - LEAL -48(R10), CX - MOVQ $-2, AX - CMPB CX, $9 - JBE LBB20_41 +LBB19_53: MOVQ R14, CX - JMP LBB20_55 -LBB20_41: - LEAQ 1(R14), R8 - CMPQ R8, SI - LONG $0xc6420f4c // cmovbq %rsi, %r8 - XORL AX, AX +LBB19_54: + MOVQ $-1, AX + TESTQ R10, R10 + JE LBB19_50 + TESTQ R9, R9 + JE LBB19_50 + TESTQ R10, R10 + JLE LBB19_59 + LEAQ -1(R10), AX + CMPQ R8, AX + JE LBB19_59 + NOTQ R10 + MOVQ R10, AX + JMP LBB19_50 -LBB20_42: - LEAL 0(AX)(AX*4), AX - LEAQ 1(R14), CX - MOVBLZX R10, BX - LEAL -48(BX)(AX*2), AX - CMPQ CX, SI - JAE LBB20_48 - MOVBLZX 1(DI)(R14*1), R10 - LEAL -48(R10), BX - MOVQ CX, R14 - CMPB BX, $10 - JB LBB20_42 - JMP LBB20_49 +LBB19_59: + MOVQ R9, AX + ORQ R8, AX + CMPQ R9, R8 + JL LBB19_62 + TESTQ AX, AX + JS LBB19_62 + NOTQ R9 + MOVQ R9, AX + JMP LBB19_50 -LBB20_44: - MOVQ SI, R8 +LBB19_62: + LEAQ -1(R8), DX + CMPQ R9, DX + JNE LBB19_65 + TESTQ AX, AX + JS LBB19_65 + NOTQ R8 + MOVQ R8, AX + JMP LBB19_50 -LBB20_45: - SUBQ R8, CX - LONG $0xc957f1c5 // vxorpd %xmm1, %xmm1, %xmm1 - CMPL CX, $-323 - JL LBB20_53 - CMPL CX, $308 - JLE LBB20_52 - QUAD $0xfffffd6a0d10fbc5 // vmovsd $-662(%rip), %xmm1 /* LCPI20_1(%rip) */ - JMP LBB20_53 +LBB19_65: + SUBQ DI, CX + MOVQ CX, AX + JMP LBB19_50 -LBB20_48: - MOVQ R8, CX +LBB19_66: + SUBQ DI, R14 + BSFL DX, AX + ADDQ R14, AX -LBB20_49: - IMULL R11, AX - LONG $0xc957f1c5 // vxorpd %xmm1, %xmm1, %xmm1 - CMPL AX, $-323 - JL LBB20_57 - CMPL AX, $308 - JLE LBB20_56 - QUAD $0xfffffd470d10fbc5 // vmovsd $-697(%rip), %xmm1 /* LCPI20_1(%rip) */ - JMP LBB20_57 +LBB19_67: + NOTQ AX + JMP LBB19_50 -LBB20_52: - LONG $0x2a63c1c4; BYTE $0xca // vcvtsi2sd %r10d, %xmm3, %xmm1 - ADDL $323, CX - LONG $0x8e1d8d48; WORD $0x0006; BYTE $0x00 // leaq $1678(%rip), %rbx /* _P10_TAB(%rip) */ - LONG $0x0c59f3c5; BYTE $0xcb // vmulsd (%rbx,%rcx,8), %xmm1, %xmm1 +LBB19_68: + NEGQ AX + JMP LBB19_50 -LBB20_53: - LONG $0xc058f3c5 // vaddsd %xmm0, %xmm1, %xmm0 - LONG $0x117bc1c4; BYTE $0x01 // vmovsd %xmm0, (%r9) - MOVL $8, BX - CMPQ R8, SI - JB LBB20_26 +LBB19_69: + MOVQ $-1, R8 + MOVQ $-1, R9 + MOVQ DI, R14 + CMPQ SI, $16 + JAE LBB19_23 + JMP LBB19_40 -LBB20_54: - MOVQ R8, CX - MOVQ BX, AX - JMP LBB20_55 - -LBB20_56: - ADDL $323, AX - LONG $0x5b358d48; WORD $0x0006; BYTE $0x00 // leaq $1627(%rip), %rsi /* _P10_TAB(%rip) */ - LONG $0x0c59fbc5; BYTE $0xc6 // vmulsd (%rsi,%rax,8), %xmm0, %xmm1 - -LBB20_57: - LONG $0x117bc1c4; BYTE $0x09 // vmovsd %xmm1, (%r9) - MOVL $8, AX - JMP LBB20_55 +// .set L19_0_set_43, LBB19_43-LJTI19_0 +// .set L19_0_set_54, LBB19_54-LJTI19_0 +// .set L19_0_set_47, LBB19_47-LJTI19_0 +// .set L19_0_set_41, LBB19_41-LJTI19_0 +// .set L19_0_set_45, LBB19_45-LJTI19_0 +LJTI19_0: + LONG $0xffffff03 // .long L19_0_set_43 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff03 // .long L19_0_set_43 + LONG $0xffffff33 // .long L19_0_set_47 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xfffffee7 // .long L19_0_set_41 + LONG $0xfffffee7 // .long L19_0_set_41 + LONG $0xfffffee7 // .long L19_0_set_41 + LONG $0xfffffee7 // .long L19_0_set_41 + LONG $0xfffffee7 // .long L19_0_set_41 + LONG $0xfffffee7 // .long L19_0_set_41 + LONG $0xfffffee7 // .long L19_0_set_41 + LONG $0xfffffee7 // .long L19_0_set_41 + LONG $0xfffffee7 // .long L19_0_set_41 + LONG $0xfffffee7 // .long L19_0_set_41 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff1b // .long L19_0_set_45 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff6a // .long L19_0_set_54 + LONG $0xffffff1b // .long L19_0_set_45 _skip_positive: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5641 // pushq %r14 BYTE $0x53 // pushq %rbx - SUBQ $40, SP - MOVQ SI, DX + MOVQ SI, R14 MOVQ 0(SI), BX DECQ BX MOVQ 0(DI), AX + ADDQ BX, AX MOVQ 8(DI), SI - LEAQ -40(BP), R8 + SUBQ BX, SI MOVQ AX, DI - MOVQ BX, CX - MOVQ BX, R9 - LONG $0xfffcc9e8; BYTE $0xff // callq _advance_number + LONG $0xfffafee8; BYTE $0xff // callq _skip_number TESTQ AX, AX - LONG $0xc3490f48 // cmovnsq %rbx, %rax - ADDQ $40, SP - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp + JS LBB20_1 + MOVQ 0(R14), CX + LEAQ -1(AX)(CX*1), CX + JMP LBB20_3 + +LBB20_1: + MOVQ 0(R14), CX + SUBQ AX, CX + ADDQ $-2, CX + MOVQ $-2, BX + +LBB20_3: + MOVQ CX, 0(R14) + MOVQ BX, AX + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 + BYTE $0x5d // popq %rbp RET _TabPowE: @@ -5666,6 +5771,590 @@ _VecShiftShuffles: QUAD $0x0e0d0c0b0a090807; QUAD $0xffffffffffffff0f // .ascii 16, '\x07\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff' QUAD $0x0f0e0d0c0b0a0908; QUAD $0xffffffffffffffff // .ascii 16, '\x08\t\n\x0b\x0c\r\x0e\x0f\xff\xff\xff\xff\xff\xff\xff\xff' +__SingleQuoteTab: + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000030303030755c // .asciz 8, '\\u0000\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000031303030755c // .asciz 8, '\\u0001\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000032303030755c // .asciz 8, '\\u0002\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000033303030755c // .asciz 8, '\\u0003\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000034303030755c // .asciz 8, '\\u0004\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000035303030755c // .asciz 8, '\\u0005\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000036303030755c // .asciz 8, '\\u0006\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000037303030755c // .asciz 8, '\\u0007\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x000000000000625c // .asciz 8, '\\b\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x000000000000745c // .asciz 8, '\\t\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x0000000000006e5c // .asciz 8, '\\n\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000062303030755c // .asciz 8, '\\u000b\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x000000000000665c // .asciz 8, '\\f\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x000000000000725c // .asciz 8, '\\r\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000065303030755c // .asciz 8, '\\u000e\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000066303030755c // .asciz 8, '\\u000f\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000030313030755c // .asciz 8, '\\u0010\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000031313030755c // .asciz 8, '\\u0011\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000032313030755c // .asciz 8, '\\u0012\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000033313030755c // .asciz 8, '\\u0013\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000034313030755c // .asciz 8, '\\u0014\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000035313030755c // .asciz 8, '\\u0015\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000036313030755c // .asciz 8, '\\u0016\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000037313030755c // .asciz 8, '\\u0017\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000038313030755c // .asciz 8, '\\u0018\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000039313030755c // .asciz 8, '\\u0019\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000061313030755c // .asciz 8, '\\u001a\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000062313030755c // .asciz 8, '\\u001b\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000063313030755c // .asciz 8, '\\u001c\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000064313030755c // .asciz 8, '\\u001d\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000065313030755c // .asciz 8, '\\u001e\x00\x00' + QUAD $0x0000000000000006 // .quad 6 + QUAD $0x000066313030755c // .asciz 8, '\\u001f\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x000000000000225c // .asciz 8, '\\"\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000002 // .quad 2 + QUAD $0x0000000000005c5c // .asciz 8, '\\\\\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + +__DoubleQuoteTab: + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0030303030755c5c // .asciz 8, '\\\\u0000\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0031303030755c5c // .asciz 8, '\\\\u0001\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0032303030755c5c // .asciz 8, '\\\\u0002\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0033303030755c5c // .asciz 8, '\\\\u0003\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0034303030755c5c // .asciz 8, '\\\\u0004\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0035303030755c5c // .asciz 8, '\\\\u0005\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0036303030755c5c // .asciz 8, '\\\\u0006\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0037303030755c5c // .asciz 8, '\\\\u0007\x00' + QUAD $0x0000000000000003 // .quad 3 + QUAD $0x0000000000625c5c // .asciz 8, '\\\\b\x00\x00\x00\x00\x00' + QUAD $0x0000000000000003 // .quad 3 + QUAD $0x0000000000745c5c // .asciz 8, '\\\\t\x00\x00\x00\x00\x00' + QUAD $0x0000000000000003 // .quad 3 + QUAD $0x00000000006e5c5c // .asciz 8, '\\\\n\x00\x00\x00\x00\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0062303030755c5c // .asciz 8, '\\\\u000b\x00' + QUAD $0x0000000000000003 // .quad 3 + QUAD $0x0000000000665c5c // .asciz 8, '\\\\f\x00\x00\x00\x00\x00' + QUAD $0x0000000000000003 // .quad 3 + QUAD $0x0000000000725c5c // .asciz 8, '\\\\r\x00\x00\x00\x00\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0065303030755c5c // .asciz 8, '\\\\u000e\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0066303030755c5c // .asciz 8, '\\\\u000f\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0030313030755c5c // .asciz 8, '\\\\u0010\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0031313030755c5c // .asciz 8, '\\\\u0011\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0032313030755c5c // .asciz 8, '\\\\u0012\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0033313030755c5c // .asciz 8, '\\\\u0013\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0034313030755c5c // .asciz 8, '\\\\u0014\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0035313030755c5c // .asciz 8, '\\\\u0015\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0036313030755c5c // .asciz 8, '\\\\u0016\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0037313030755c5c // .asciz 8, '\\\\u0017\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0038313030755c5c // .asciz 8, '\\\\u0018\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0039313030755c5c // .asciz 8, '\\\\u0019\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0061313030755c5c // .asciz 8, '\\\\u001a\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0062313030755c5c // .asciz 8, '\\\\u001b\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0063313030755c5c // .asciz 8, '\\\\u001c\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0064313030755c5c // .asciz 8, '\\\\u001d\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0065313030755c5c // .asciz 8, '\\\\u001e\x00' + QUAD $0x0000000000000007 // .quad 7 + QUAD $0x0066313030755c5c // .asciz 8, '\\\\u001f\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000004 // .quad 4 + QUAD $0x00000000225c5c5c // .asciz 8, '\\\\\\"\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000004 // .quad 4 + QUAD $0x000000005c5c5c5c // .asciz 8, '\\\\\\\\\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + __UnquoteTab: QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' @@ -6322,21 +7011,14 @@ _P10_TAB: TEXT ·__f64toa(SB), NOSPLIT, $0 - 24 MOVQ out+0(FP), DI MOVSD val+8(FP), X0 - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+3038(SB) // _f64toa + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+822(SB) // _f64toa MOVQ AX, ret+16(FP) RET TEXT ·__i64toa(SB), NOSPLIT, $0 - 24 MOVQ out+0(FP), DI MOVQ val+8(FP), SI - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+6102(SB) // _i64toa - MOVQ AX, ret+16(FP) - RET - -TEXT ·__lquote(SB), NOSPLIT, $0 - 24 - MOVQ buf+0(FP), DI - MOVQ off+8(FP), SI - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+376(SB) // _lquote + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+3886(SB) // _i64toa MOVQ AX, ret+16(FP) RET @@ -6344,7 +7026,7 @@ TEXT ·__lspace(SB), NOSPLIT, $0 - 32 MOVQ sp+0(FP), DI MOVQ nb+8(FP), SI MOVQ off+16(FP), DX - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+1268(SB) // _lspace + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+366(SB) // _lspace MOVQ AX, ret+24(FP) RET @@ -6355,11 +7037,21 @@ TEXT ·__lzero(SB), NOSPLIT, $0 - 24 MOVQ AX, ret+16(FP) RET +TEXT ·__quote(SB), NOSPLIT, $0 - 48 + MOVQ sp+0(FP), DI + MOVQ nb+8(FP), SI + MOVQ dp+16(FP), DX + MOVQ dn+24(FP), CX + MOVQ flags+32(FP), R8 + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+5299(SB) // _quote + MOVQ AX, ret+40(FP) + RET + TEXT ·__skip_array(SB), NOSPLIT, $0 - 32 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+14748(SB) // _skip_array + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+15851(SB) // _skip_array MOVQ AX, ret+24(FP) RET @@ -6367,7 +7059,7 @@ TEXT ·__skip_object(SB), NOSPLIT, $0 - 32 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+14783(SB) // _skip_object + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+15886(SB) // _skip_object MOVQ AX, ret+24(FP) RET @@ -6375,24 +7067,24 @@ TEXT ·__skip_one(SB), NOSPLIT, $0 - 32 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+13195(SB) // _skip_one + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+13051(SB) // _skip_one MOVQ AX, ret+24(FP) RET TEXT ·__u64toa(SB), NOSPLIT, $0 - 24 MOVQ out+0(FP), DI MOVQ val+8(FP), SI - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+6195(SB) // _u64toa + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+3979(SB) // _u64toa MOVQ AX, ret+16(FP) RET TEXT ·__unquote(SB), NOSPLIT, $0 - 48 - MOVQ s+0(FP), DI + MOVQ sp+0(FP), DI MOVQ nb+8(FP), SI MOVQ dp+16(FP), DX MOVQ ep+24(FP), CX MOVQ flags+32(FP), R8 - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+7419(SB) // _unquote + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+7136(SB) // _unquote MOVQ AX, ret+40(FP) RET @@ -6402,7 +7094,7 @@ TEXT ·__value(SB), NOSPLIT, $0 - 48 MOVQ p+16(FP), DX MOVQ v+24(FP), CX MOVQ allow_control+32(FP), R8 - CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+9196(SB) // _value + CALL ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+9082(SB) // _value MOVQ AX, ret+40(FP) RET @@ -6410,26 +7102,26 @@ TEXT ·__vnumber(SB), NOSPLIT, $0 - 24 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+11673(SB), AX // _vnumber + LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+11529(SB), AX // _vnumber JMP AX TEXT ·__vsigned(SB), NOSPLIT, $0 - 24 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+12645(SB), AX // _vsigned + LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+12501(SB), AX // _vsigned JMP AX TEXT ·__vstring(SB), NOSPLIT, $0 - 24 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+10345(SB), AX // _vstring + LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+10760(SB), AX // _vstring JMP AX TEXT ·__vunsigned(SB), NOSPLIT, $0 - 24 MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+12922(SB), AX // _vunsigned + LEAQ ·___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___+12778(SB), AX // _vunsigned JMP AX diff --git a/internal/native/avx2/native_amd64_test.go b/internal/native/avx2/native_amd64_test.go index 9e9fce7..d267b08 100644 --- a/internal/native/avx2/native_amd64_test.go +++ b/internal/native/avx2/native_amd64_test.go @@ -43,6 +43,45 @@ func TestNative_Value(t *testing.T) { assert.Equal(t, 3, v.Ep) } +func TestNative_Quote(t *testing.T) { + s := "hello\b\f\n\r\t\\\"\u666fworld" + d := make([]byte, 256) + dp := (*rt.GoSlice)(unsafe.Pointer(&d)) + sp := (*rt.GoString)(unsafe.Pointer(&s)) + rv := __quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, 0) + if rv < 0 { + require.NoError(t, types.ParsingError(-rv)) + } + assert.Equal(t, len(s), rv) + assert.Equal(t, 27, len(d)) + assert.Equal(t, `hello\b\f\n\r\t\\\"景world`, string(d)) +} + +func TestNative_QuoteNoMem(t *testing.T) { + s := "hello\b\f\n\r\t\\\"\u666fworld" + d := make([]byte, 10) + dp := (*rt.GoSlice)(unsafe.Pointer(&d)) + sp := (*rt.GoString)(unsafe.Pointer(&s)) + rv := __quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, 0) + assert.Equal(t, -8, rv) + assert.Equal(t, 9, len(d)) + assert.Equal(t, `hello\b\f`, string(d)) +} + +func TestNative_DoubleQuote(t *testing.T) { + s := "hello\b\f\n\r\t\\\"\u666fworld" + d := make([]byte, 256) + dp := (*rt.GoSlice)(unsafe.Pointer(&d)) + sp := (*rt.GoString)(unsafe.Pointer(&s)) + rv := __quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, types.F_DOUBLE_UNQUOTE) + if rv < 0 { + require.NoError(t, types.ParsingError(-rv)) + } + assert.Equal(t, len(s), rv) + assert.Equal(t, 36, len(d)) + assert.Equal(t, `hello\\b\\f\\n\\r\\t\\\\\\\"景world`, string(d)) +} + func TestNative_Unquote(t *testing.T) { s := `hello\b\f\n\r\t\\\"\u2333world` d := make([]byte, 0, len(s)) @@ -173,6 +212,16 @@ func TestNative_Vstring(t *testing.T) { assert.Equal(t, int64(5), v.Iv) } +func TestNative_VstringEscapeEOF(t *testing.T) { + var v types.JsonState + i := 0 + s := `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"x` + __vstring(&s, &i, &v) + assert.Equal(t, 95, i) + assert.Equal(t, 63, v.Ep) + assert.Equal(t, int64(0), v.Iv) +} + func TestNative_VstringHangUpOnRandomData(t *testing.T) { v, e := hex.DecodeString( "228dc61efd54ef80a908fb6026b7f2d5f92a257ba8b347c995f259eb8685376a" + diff --git a/internal/native/avx2/native_export_amd64.go b/internal/native/avx2/native_export_amd64.go index 93d200c..5216915 100644 --- a/internal/native/avx2/native_export_amd64.go +++ b/internal/native/avx2/native_export_amd64.go @@ -21,12 +21,12 @@ package avx2 var ( S_f64toa = _subr__f64toa S_i64toa = _subr__i64toa - S_lquote = _subr__lquote S_u64toa = _subr__u64toa + S_lspace = _subr__lspace ) var ( - S_lspace = _subr__lspace + S_quote = _subr__quote S_unquote = _subr__unquote ) diff --git a/internal/native/avx2/native_subr_amd64.go b/internal/native/avx2/native_subr_amd64.go index eb7f6b8..30907d8 100644 --- a/internal/native/avx2/native_subr_amd64.go +++ b/internal/native/avx2/native_subr_amd64.go @@ -14,29 +14,29 @@ func ___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___() var ( _func__base = ___asm2asm_compiled_code__DO_NOT_CALL_THIS_SYMBOL___ - _subr__f64toa = **(**uintptr)(unsafe.Pointer(&_func__base)) + 3038 - _subr__i64toa = **(**uintptr)(unsafe.Pointer(&_func__base)) + 6102 - _subr__lquote = **(**uintptr)(unsafe.Pointer(&_func__base)) + 376 - _subr__lspace = **(**uintptr)(unsafe.Pointer(&_func__base)) + 1268 + _subr__f64toa = **(**uintptr)(unsafe.Pointer(&_func__base)) + 822 + _subr__i64toa = **(**uintptr)(unsafe.Pointer(&_func__base)) + 3886 + _subr__lspace = **(**uintptr)(unsafe.Pointer(&_func__base)) + 366 _subr__lzero = **(**uintptr)(unsafe.Pointer(&_func__base)) + 0 - _subr__skip_array = **(**uintptr)(unsafe.Pointer(&_func__base)) + 14748 - _subr__skip_object = **(**uintptr)(unsafe.Pointer(&_func__base)) + 14783 - _subr__skip_one = **(**uintptr)(unsafe.Pointer(&_func__base)) + 13195 - _subr__u64toa = **(**uintptr)(unsafe.Pointer(&_func__base)) + 6195 - _subr__unquote = **(**uintptr)(unsafe.Pointer(&_func__base)) + 7419 - _subr__value = **(**uintptr)(unsafe.Pointer(&_func__base)) + 9196 - _subr__vnumber = **(**uintptr)(unsafe.Pointer(&_func__base)) + 11673 - _subr__vsigned = **(**uintptr)(unsafe.Pointer(&_func__base)) + 12645 - _subr__vstring = **(**uintptr)(unsafe.Pointer(&_func__base)) + 10345 - _subr__vunsigned = **(**uintptr)(unsafe.Pointer(&_func__base)) + 12922 + _subr__quote = **(**uintptr)(unsafe.Pointer(&_func__base)) + 5299 + _subr__skip_array = **(**uintptr)(unsafe.Pointer(&_func__base)) + 15851 + _subr__skip_object = **(**uintptr)(unsafe.Pointer(&_func__base)) + 15886 + _subr__skip_one = **(**uintptr)(unsafe.Pointer(&_func__base)) + 13051 + _subr__u64toa = **(**uintptr)(unsafe.Pointer(&_func__base)) + 3979 + _subr__unquote = **(**uintptr)(unsafe.Pointer(&_func__base)) + 7136 + _subr__value = **(**uintptr)(unsafe.Pointer(&_func__base)) + 9082 + _subr__vnumber = **(**uintptr)(unsafe.Pointer(&_func__base)) + 11529 + _subr__vsigned = **(**uintptr)(unsafe.Pointer(&_func__base)) + 12501 + _subr__vstring = **(**uintptr)(unsafe.Pointer(&_func__base)) + 10760 + _subr__vunsigned = **(**uintptr)(unsafe.Pointer(&_func__base)) + 12778 ) var ( _ = _subr__f64toa _ = _subr__i64toa - _ = _subr__lquote _ = _subr__lspace _ = _subr__lzero + _ = _subr__quote _ = _subr__skip_array _ = _subr__skip_object _ = _subr__skip_one diff --git a/internal/native/dispatch_amd64.go b/internal/native/dispatch_amd64.go index 9c1724b..59c20a4 100644 --- a/internal/native/dispatch_amd64.go +++ b/internal/native/dispatch_amd64.go @@ -26,11 +26,14 @@ import ( ) var ( - S_f64toa uintptr - S_i64toa uintptr - S_u64toa uintptr - S_lquote uintptr - S_lspace uintptr + S_f64toa uintptr + S_i64toa uintptr + S_u64toa uintptr + S_lspace uintptr +) + +var ( + S_quote uintptr S_unquote uintptr ) @@ -56,12 +59,12 @@ func Lzero(p unsafe.Pointer, n int) int //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func Lquote(buf *string, off int) int +func Quote(s unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int, flags uint64) int //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func Lspace(sp unsafe.Pointer, nb int, off int) int +func Unquote(s unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) int //go:nosplit //go:noescape @@ -73,17 +76,12 @@ func Value(s unsafe.Pointer, n int, p int, v *types.JsonState, allow_control int //goland:noinspection GoUnusedParameter func SkipOne(s *string, p *int, m *types.StateMachine) int -//go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func Unquote(s unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) int - func useAVX() { S_f64toa = avx.S_f64toa S_i64toa = avx.S_i64toa S_u64toa = avx.S_u64toa - S_lquote = avx.S_lquote S_lspace = avx.S_lspace + S_quote = avx.S_quote S_unquote = avx.S_unquote S_value = avx.S_value S_vstring = avx.S_vstring @@ -99,8 +97,8 @@ func useAVX2() { S_f64toa = avx2.S_f64toa S_i64toa = avx2.S_i64toa S_u64toa = avx2.S_u64toa - S_lquote = avx2.S_lquote S_lspace = avx2.S_lspace + S_quote = avx2.S_quote S_unquote = avx2.S_unquote S_value = avx2.S_value S_vstring = avx2.S_vstring diff --git a/internal/native/dispatch_amd64.s b/internal/native/dispatch_amd64.s index 210c1bf..52b4a31 100644 --- a/internal/native/dispatch_amd64.s +++ b/internal/native/dispatch_amd64.s @@ -24,17 +24,17 @@ TEXT ·Lzero(SB), NOSPLIT, $0 - 24 JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__lzero(SB) JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__lzero(SB) -TEXT ·Lquote(SB), NOSPLIT, $0 - 24 +TEXT ·Quote(SB), NOSPLIT, $0 - 48 CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__lquote(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__lquote(SB) + JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__quote(SB) + JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__quote(SB) -TEXT ·Lspace(SB), NOSPLIT, $0 - 32 +TEXT ·Unquote(SB), NOSPLIT, $0 - 48 CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__lspace(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__lspace(SB) + JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__unquote(SB) + JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__unquote(SB) TEXT ·Value(SB), NOSPLIT, $0 - 48 CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 @@ -47,9 +47,3 @@ TEXT ·SkipOne(SB), NOSPLIT, $0 - 32 JE 2(PC) JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__skip_one(SB) JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__skip_one(SB) - -TEXT ·Unquote(SB), NOSPLIT, $0 - 48 - CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 - JE 2(PC) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__unquote(SB) - JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__unquote(SB) diff --git a/internal/native/native_amd64.tmpl b/internal/native/native_amd64.tmpl index 7ce573b..b434cf9 100644 --- a/internal/native/native_amd64.tmpl +++ b/internal/native/native_amd64.tmpl @@ -45,12 +45,17 @@ func __lzero(p unsafe.Pointer, n int) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __lquote(buf *string, off int) (ret int) +func __lspace(sp unsafe.Pointer, nb int, off int) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __lspace(sp unsafe.Pointer, nb int, off int) (ret int) +func __quote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int, flags uint64) (ret int) + +//go:nosplit +//go:noescape +//goland:noinspection GoUnusedParameter +func __unquote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) (ret int) //go:nosplit //go:noescape @@ -91,8 +96,3 @@ func __skip_array(s *string, p *int, m *types.StateMachine) (ret int) //go:noescape //goland:noinspection GoUnusedParameter func __skip_object(s *string, p *int, m *types.StateMachine) (ret int) - -//go:nosplit -//go:noescape -//goland:noinspection GoUnusedParameter -func __unquote(s unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint64) (ret int) diff --git a/internal/native/native_amd64_test.tmpl b/internal/native/native_amd64_test.tmpl index a936116..70f9db1 100644 --- a/internal/native/native_amd64_test.tmpl +++ b/internal/native/native_amd64_test.tmpl @@ -41,6 +41,45 @@ func TestNative_Value(t *testing.T) { assert.Equal(t, 3, v.Ep) } +func TestNative_Quote(t *testing.T) { + s := "hello\b\f\n\r\t\\\"\u666fworld" + d := make([]byte, 256) + dp := (*rt.GoSlice)(unsafe.Pointer(&d)) + sp := (*rt.GoString)(unsafe.Pointer(&s)) + rv := __quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, 0) + if rv < 0 { + require.NoError(t, types.ParsingError(-rv)) + } + assert.Equal(t, len(s), rv) + assert.Equal(t, 27, len(d)) + assert.Equal(t, `hello\b\f\n\r\t\\\"景world`, string(d)) +} + +func TestNative_QuoteNoMem(t *testing.T) { + s := "hello\b\f\n\r\t\\\"\u666fworld" + d := make([]byte, 10) + dp := (*rt.GoSlice)(unsafe.Pointer(&d)) + sp := (*rt.GoString)(unsafe.Pointer(&s)) + rv := __quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, 0) + assert.Equal(t, -8, rv) + assert.Equal(t, 9, len(d)) + assert.Equal(t, `hello\b\f`, string(d)) +} + +func TestNative_DoubleQuote(t *testing.T) { + s := "hello\b\f\n\r\t\\\"\u666fworld" + d := make([]byte, 256) + dp := (*rt.GoSlice)(unsafe.Pointer(&d)) + sp := (*rt.GoString)(unsafe.Pointer(&s)) + rv := __quote(sp.Ptr, sp.Len, dp.Ptr, &dp.Len, types.F_DOUBLE_UNQUOTE) + if rv < 0 { + require.NoError(t, types.ParsingError(-rv)) + } + assert.Equal(t, len(s), rv) + assert.Equal(t, 36, len(d)) + assert.Equal(t, `hello\\b\\f\\n\\r\\t\\\\\\\"景world`, string(d)) +} + func TestNative_Unquote(t *testing.T) { s := `hello\b\f\n\r\t\\\"\u2333world` d := make([]byte, 0, len(s)) @@ -171,6 +210,16 @@ func TestNative_Vstring(t *testing.T) { assert.Equal(t, int64(5), v.Iv) } +func TestNative_VstringEscapeEOF(t *testing.T) { + var v types.JsonState + i := 0 + s := `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"x` + __vstring(&s, &i, &v) + assert.Equal(t, 95, i) + assert.Equal(t, 63, v.Ep) + assert.Equal(t, int64(0), v.Iv) +} + func TestNative_VstringHangUpOnRandomData(t *testing.T) { v, e := hex.DecodeString( "228dc61efd54ef80a908fb6026b7f2d5f92a257ba8b347c995f259eb8685376a" + diff --git a/internal/native/native_export_amd64.tmpl b/internal/native/native_export_amd64.tmpl index c662202..3fc1387 100644 --- a/internal/native/native_export_amd64.tmpl +++ b/internal/native/native_export_amd64.tmpl @@ -19,12 +19,12 @@ package {{PACKAGE}} var ( S_f64toa = _subr__f64toa S_i64toa = _subr__i64toa - S_lquote = _subr__lquote S_u64toa = _subr__u64toa + S_lspace = _subr__lspace ) var ( - S_lspace = _subr__lspace + S_quote = _subr__quote S_unquote = _subr__unquote ) diff --git a/native/fastbytes.c b/native/fastbytes.c index 9eede0f..457c0f7 100644 --- a/native/fastbytes.c +++ b/native/fastbytes.c @@ -16,417 +16,48 @@ #include "native.h" -#if USE_SSE -#define loop_decl() \ - size_t v; \ - size_t n = 0; \ - const char * p = s; \ - -#define loop_simd(size, load, func, ...) { \ - while (nb >= size) { \ - if ((v = func(load((const void *)(p)), ## __VA_ARGS__)) < size) { \ - return n + v; \ - } else { \ - n += v; \ - p += size; \ - nb -= size; \ - } \ - } \ +static inline int is_zero_sse(__m128i v) { + return _mm_testz_si128(v, v); } -#if !USE_AVX2 -#define loop_zero() -#define loop_m256(func, ...) -#else -#define loop_zero() _mm256_zeroupper(); -#define loop_m256(func, ...) loop_simd(32, _mm256_loadu_si256, func, ## __VA_ARGS__) -#endif - -#define loop_m128(func, ...) loop_simd(16, _mm_loadu_si128, func, ## __VA_ARGS__) -#define loop_last(func, ...) return func(_mm_loadu_si128(as_m128c(p + nb - 16)), ## __VA_ARGS__) + n + nb - 16; - -#define loop_bulk(func, ...) { \ - loop_decl() \ - loop_m256(func ## _avx2, ## __VA_ARGS__) \ - loop_zero(); \ - loop_m128(func ## _sse2, ## __VA_ARGS__) \ - loop_last(func ## _sse2, ## __VA_ARGS__) \ -} - -#define loop_duff(func, ...) { \ - size_t r = nb; \ - __m128i m = _mm_set1_epi8(0xff); \ - \ - /* remaining bytes */ \ - switch (r) { \ - case 15 : m = _mm_insert_epi8(m, s[14], 14); \ - case 14 : m = _mm_insert_epi8(m, s[13], 13); \ - case 13 : m = _mm_insert_epi8(m, s[12], 12); \ - case 12 : m = _mm_insert_epi8(m, s[11], 11); \ - case 11 : m = _mm_insert_epi8(m, s[10], 10); \ - case 10 : m = _mm_insert_epi8(m, s[ 9], 9); \ - case 9 : m = _mm_insert_epi8(m, s[ 8], 8); \ - case 8 : m = _mm_insert_epi8(m, s[ 7], 7); \ - case 7 : m = _mm_insert_epi8(m, s[ 6], 6); \ - case 6 : m = _mm_insert_epi8(m, s[ 5], 5); \ - case 5 : m = _mm_insert_epi8(m, s[ 4], 4); \ - case 4 : m = _mm_insert_epi8(m, s[ 3], 3); \ - case 3 : m = _mm_insert_epi8(m, s[ 2], 2); \ - case 2 : m = _mm_insert_epi8(m, s[ 1], 1); \ - case 1 : m = _mm_insert_epi8(m, s[ 0], 0); \ - default : return func ## _sse2(m, ## __VA_ARGS__); \ - } \ -} - -static inline size_t lspace_sse2(__m128i v0) { - __m128i v1 = _mm_cmpeq_epi8 (v0, _mm_set1_epi8(' ')); - __m128i v2 = _mm_cmpeq_epi8 (v0, _mm_set1_epi8('\t')); - __m128i v3 = _mm_cmpeq_epi8 (v0, _mm_set1_epi8('\n')); - __m128i v4 = _mm_cmpeq_epi8 (v0, _mm_set1_epi8('\r')); - __m128i v5 = _mm_or_si128 (v1, v2); - __m128i v6 = _mm_or_si128 (v3, v4); - __m128i v7 = _mm_or_si128 (v5, v6); - uint32_t v8 = _mm_movemask_epi8 (v7); - uint32_t v9 = __builtin_ctz (~v8); - return v9; -} - -#if USE_AVX2 -static inline size_t lspace_avx2(__m256i v0) { - __m256i v1 = _mm256_cmpeq_epi8 (v0, _mm256_set1_epi8(' ')); - __m256i v2 = _mm256_cmpeq_epi8 (v0, _mm256_set1_epi8('\t')); - __m256i v3 = _mm256_cmpeq_epi8 (v0, _mm256_set1_epi8('\n')); - __m256i v4 = _mm256_cmpeq_epi8 (v0, _mm256_set1_epi8('\r')); - __m256i v5 = _mm256_or_si256 (v1, v2); - __m256i v6 = _mm256_or_si256 (v3, v4); - __m256i v7 = _mm256_or_si256 (v5, v6); - uint32_t v8 = _mm256_movemask_epi8 (v7); - uint64_t v9 = __builtin_ctzll (~(uint64_t)(v8)); - return v9; -} -#endif - -static inline size_t lquote_sse2(__m128i v0) { - __m128i v1 = _mm_cmpgt_epi8 (v0, _mm_set1_epi8(-1)); - __m128i v2 = _mm_cmplt_epi8 (v0, _mm_set1_epi8(' ')); - __m128i v3 = _mm_cmpeq_epi8 (v0, _mm_set1_epi8('"')); - __m128i v4 = _mm_cmpeq_epi8 (v0, _mm_set1_epi8('\\')); - __m128i v5 = _mm_and_si128 (v1, v2); - __m128i v6 = _mm_or_si128 (v3, v4); - __m128i v7 = _mm_or_si128 (v5, v6); - uint32_t v8 = _mm_movemask_epi8 (v7); - uint32_t v9 = __builtin_ctz (v8 | 0xffff0000); - return v9; -} - -#if USE_AVX2 -static inline size_t lquote_avx2(__m256i v0) { - __m256i v1 = _mm256_cmpgt_epi8 (v0, _mm256_set1_epi8(-1)); - __m256i v2 = _mm256_cmpgt_epi8 (v0, _mm256_set1_epi8(31)); - __m256i v3 = _mm256_cmpeq_epi8 (v0, _mm256_set1_epi8('"')); - __m256i v4 = _mm256_cmpeq_epi8 (v0, _mm256_set1_epi8('\\')); - __m256i v5 = _mm256_andnot_si256 (v2, v1); - __m256i v6 = _mm256_or_si256 (v3, v4); - __m256i v7 = _mm256_or_si256 (v5, v6); - uint32_t v8 = _mm256_movemask_epi8 (v7); - uint64_t v9 = __builtin_ctzll ((uint64_t)v8 | 0xffffffff00000000); - return v9; -} -#endif - -static inline size_t strchr2_sse2(__m128i v0, uint64_t c0, uint64_t c1) { - __m128i v1 = _mm_cmpeq_epi8 (v0, _mm_set1_epi8((char)c0)); - __m128i v2 = _mm_cmpeq_epi8 (v0, _mm_set1_epi8((char)c1)); - __m128i v3 = _mm_or_si128 (v1, v2); - uint32_t v4 = _mm_movemask_epi8 (v3); - uint32_t v5 = __builtin_ctz (v4 | 0xffff0000); - return v5; -} - -#if USE_AVX2 -static inline size_t strchr2_avx2(__m256i v0, uint64_t c0, uint64_t c1) { - __m256i v1 = _mm256_cmpeq_epi8 (v0, _mm256_set1_epi8((char)c0)); - __m256i v2 = _mm256_cmpeq_epi8 (v0, _mm256_set1_epi8((char)c1)); - __m256i v3 = _mm256_or_si256 (v1, v2); - uint32_t v4 = _mm256_movemask_epi8 (v3); - uint64_t v5 = __builtin_ctzll ((uint64_t)v4 | 0xffffffff00000000); - return v5; -} -#endif - -#define do_simd(func, ...) { \ - if (nb == 0) { \ - return 0; \ - } if (nb < 16) { \ - loop_duff(func, ## __VA_ARGS__) \ - } else { \ - loop_bulk(func, ## __VA_ARGS__) \ - } \ -} -#endif - -#define is_quote(c) ((c) == '"' || (c) == '\\' || ((c) >= 0 && (c) <= 31)) -#define is_space(c) ((c) == ' ' || (c) == '\t' || (c) == '\n' || (c) == '\r') - -static inline size_t lspace_p(const char *s, size_t nb) { -#if USE_SSE - do_simd(lspace) -#else - size_t i = 0; - while (i < nb && !is_space(s[i])) i++; - return i; -#endif -} - -static inline size_t lquote_p(const char *s, size_t nb) { -#if USE_SSE - do_simd(lquote) -#else - size_t i = 0; - while (i < nb && !is_quote(s[i])) i++; - return i; -#endif -} - -static inline size_t strchr1_p(const char *p, size_t nb, uint64_t ch) { -#if USE_SSE - int64_t r; - uint32_t t; - - /* prepare the vector */ - ssize_t n = nb; - uintptr_t m = (uintptr_t)p; - const char * q = p; - -#if USE_AVX2 -#define ALIGN_VAL 31 -#define _mm_or _mm256_or_si256 -#define _mm_load _mm256_load_si256 -#define _mm_cmpeq(a, b) _mm256_cmpeq_epi8(a, b) -#define _mm_testz(v) _mm256_testz_si256(v, v) -#define _mm_movemask(v) _mm256_movemask_epi8(v) - __m256i a; - __m256i b; - __m256i c; - __m256i d; - __m256i u; - __m256i v; - __m256i w; - __m256i x = _mm256_set1_epi8(ch); -#else -#define ALIGN_VAL 15 -#define _mm_or _mm_or_si128 -#define _mm_load _mm_load_si128 -#define _mm_cmpeq(a, b) _mm_cmpeq_epi8(a, b) -#define _mm_testz(v) (_mm_movemask_epi8(v) == 0) -#define _mm_movemask(v) _mm_movemask_epi8(v) - __m128i a; - __m128i b; - __m128i c; - __m128i d; - __m128i u; - __m128i v; - __m128i w; - __m128i x = _mm_set1_epi8(ch); -#endif - -#define BLOCK_SIZE (ALIGN_VAL + 1) -#define BLOCK_MASK (1ull << BLOCK_SIZE) -#define BLOCK_LARGE (BLOCK_SIZE * 4) - - /* check for pointer alignment */ - if (m & ALIGN_VAL) { - v = _mm_load ((const void *)(m & -BLOCK_SIZE)); - v = _mm_cmpeq (v, x); - r = _mm_movemask (v); - - /* check for match in the first characters */ - if ((r >>= (t = m & ALIGN_VAL)) != 0) { - if ((r = __builtin_ctzll(r | BLOCK_MASK)) < n) { - return r; - } else { - return -1; - } - } - - /* make the pointer aligned */ - p += BLOCK_SIZE - t; - n -= BLOCK_SIZE - t; - } - - /* attempt to compare 4 blocks at a time */ - while (n >= BLOCK_LARGE) { - a = _mm_load ((const void *)(p + BLOCK_SIZE * 0)); - b = _mm_load ((const void *)(p + BLOCK_SIZE * 1)); - c = _mm_load ((const void *)(p + BLOCK_SIZE * 2)); - d = _mm_load ((const void *)(p + BLOCK_SIZE * 3)); - a = _mm_cmpeq (a, x); - b = _mm_cmpeq (b, x); - c = _mm_cmpeq (c, x); - d = _mm_cmpeq (d, x); - u = _mm_or (a, b); - v = _mm_or (c, d); - w = _mm_or (u, v); - - /* check if anything matches */ - if (_mm_testz(w)) { - p += BLOCK_LARGE; - n -= BLOCK_LARGE; - continue; - } - - /* match something in the 4-blocks region */ - if ((r = _mm_movemask(a)) != 0) { - return p - q + __builtin_ctzll(r | BLOCK_MASK); - } else if ((r = _mm_movemask(b)) != 0) { - return p - q + __builtin_ctzll(r | BLOCK_MASK) + BLOCK_SIZE; - } else if ((r = _mm_movemask(c)) != 0) { - return p - q + __builtin_ctzll(r | BLOCK_MASK) + BLOCK_SIZE * 2; - } else { - return p - q + __builtin_ctzll(_mm_movemask(d) | BLOCK_MASK) + BLOCK_SIZE * 3; - } - } - - /* check every block, at most 4 times */ - for (int i = 0; i < 4 && n >= 0; i++) { - v = _mm_load ((const void *)p); - v = _mm_cmpeq (v, x); - r = _mm_movemask (v); - - /* found something */ - if (r != 0) { - if ((r = __builtin_ctzll(r | BLOCK_MASK)) >= n) { - return -1; - } else { - return p - q + r; - } - } - - /* otherwise advance to next block */ - p += BLOCK_SIZE; - n -= BLOCK_SIZE; - } - -#undef _mm_load -#undef _mm_bitor -#undef _mm_cmpeq -#undef _mm_testz -#undef _mm_movemask -#undef ALIGN_VAL -#undef BLOCK_SIZE -#undef BLOCK_LARGE -#else - for (size_t i = 0; i < nb; i++) { - if (p[i] == ch) { - return i; - } - } -#endif - - /* not found */ - return nb; -} - -static inline size_t strchr2_p(const char *s, size_t nb, uint64_t c0, uint64_t c1) { -#if USE_SSE - do_simd(strchr2, c0, c1) -#else - size_t i = 0; - while (i < nb && s[i] != c0 && s[i] != c1) i++; - return i; -#endif -} - -size_t lzero(const char *p, size_t n) { -#if USE_SSE #if USE_AVX - __m256i a; - __m256i b; - __m256i c; - __m256i d; - __m256i u; - __m256i v; - __m256i w; - __m256i y = _mm256_set1_epi8(0xff); - __m256i z = _mm256_setzero_si256(); - #define BLOCK_SIZE 32 -#else - __m128i a; - __m128i b; - __m128i c; - __m128i d; - __m128i u; - __m128i v; - __m128i w; - __m128i z = _mm_setzero_si128(); - #define BLOCK_SIZE 16 +static inline int is_zero_avx(__m256i v) { + return _mm256_testz_si256(v, v); +} #endif -#if USE_AVX2 -#define _mm_load _mm256_load_si256 -#define _mm_and(a, b) _mm256_and_si256(a, b) -#define _mm_cmpeq(a, b) _mm256_cmpeq_epi8(a, b) -#define _mm_testinz(v) (!_mm256_testc_si256(v, y)) -#elif USE_AVX -#define _mm_load _mm256_load_si256 -#define _mm_and(a, b) _mm256_and_ps((__m256)a, (__m256)b) -#define _mm_cmpeq(a, b) _mm256_cmp_ps(a, b, _CMP_EQ_OQ) -#define _mm_testinz(v) (!_mm256_testc_si256(v, y)) -#else -#define _mm_load _mm_load_si128 -#define _mm_and(a, b) _mm_and_si128(a, b) -#define _mm_cmpeq(a, b) _mm_cmpeq_epi8(a, b) -#define _mm_testinz(v) (_mm_movemask_epi8(v) != 0xffff) -#endif +size_t lzero(const char *sp, size_t nb) { + size_t n = nb; + const char * p = sp; - /* multi-block loop */ - while (n >= BLOCK_SIZE * 4) { - a = _mm_load ((const void *)(p + BLOCK_SIZE * 0)); - b = _mm_load ((const void *)(p + BLOCK_SIZE * 1)); - c = _mm_load ((const void *)(p + BLOCK_SIZE * 2)); - d = _mm_load ((const void *)(p + BLOCK_SIZE * 3)); - a = _mm_cmpeq (a, z); - b = _mm_cmpeq (b, z); - c = _mm_cmpeq (c, z); - d = _mm_cmpeq (d, z); - u = _mm_and (a, b); - v = _mm_and (c, d); - w = _mm_and (u, v); - - /* test for zeros */ - if (_mm_testinz(w)) { +#if USE_AVX + /* 32-byte loop */ + while (n >= 32) { + if (!is_zero_avx(_mm256_loadu_si256((const void *)p))) { + _mm256_zeroupper(); return 1; + } else { + p += 32; + n -= 32; } - - /* move to next block */ - p += BLOCK_SIZE * 4; - n -= BLOCK_SIZE * 4; } - /* single block loop */ - while (n >= BLOCK_SIZE) { - a = _mm_load ((const void *)(p)); - b = _mm_cmpeq (a, z); - - /* test for zeros */ - if (_mm_testinz(b)) { - return 1; - } - - /* move to next block */ - p += BLOCK_SIZE; - n -= BLOCK_SIZE; - } - -#undef _mm_load -#undef _mm_cmpeq -#undef _mm_bitand -#undef _mm_testinz -#undef BLOCK_SIZE + /* clear upper half to avoid AVX-SSE transition penalty */ + _mm256_zeroupper(); #endif - /* 8 bytes loop */ - while (n >= 8) { + /* 16-byte loop */ + while (n >= 16) { + if (!is_zero_sse(_mm_loadu_si128((const void *)p))) { + return 1; + } else { + p += 16; + n -= 16; + } + } + + /* 8-byte test */ + if (n >= 8) { if (*(uint64_t *)p) { return 1; } else { @@ -435,7 +66,7 @@ size_t lzero(const char *p, size_t n) { } } - /* 4 bytes test */ + /* 4-byte test */ if (n >= 4) { if (*(uint32_t *)p) { return 1; @@ -445,7 +76,7 @@ size_t lzero(const char *p, size_t n) { } } - /* 2 bytes test */ + /* 2-byte test */ if (n >= 2) { if (*(uint16_t *)p) { return 1; @@ -463,22 +94,90 @@ size_t lzero(const char *p, size_t n) { } } -size_t lquote(const GoString *s, size_t p) { - return lquote_p(s->buf + p, s->len - p) + p; -} +#if USE_AVX2 +static const uintptr_t ALIGN_MASK = 31; +#else +static const uintptr_t ALIGN_MASK = 15; +#endif size_t lspace(const char *sp, size_t nb, size_t p) { - return lspace_p(sp + p, nb - p) + p; -} + int32_t ms; + const char * ss = sp; -ssize_t strchr1(const GoString *s, size_t p, char ch) { - size_t n = s->len - p; - size_t v = strchr1_p(s->buf + p, n, ch); - return v >= n ? -1 : v + p; -} + /* seek to `p` */ + sp += p; + nb -= p; -ssize_t strchr2(const GoString *s, size_t p, char c0, char c1) { - size_t n = s->len - p; - size_t v = strchr2_p(s->buf + p, n, c0, c1); - return v >= n ? -1 : v + p; -} + /* likely to run into non-spaces within a few characters, try scalar code first */ + while (nb > 0 && ((uintptr_t)sp & ALIGN_MASK)) { + switch ((nb--, *sp++)) { + case ' ' : break; + case '\r' : break; + case '\n' : break; + case '\t' : break; + default : return sp - ss - 1; + } + } + +#if USE_AVX2 + /* 32-byte loop */ + while (likely(nb >= 32)) { + __m256i x = _mm256_load_si256 ((const void *)sp); + __m256i a = _mm256_cmpeq_epi8 (x, _mm256_set1_epi8(' ')); + __m256i b = _mm256_cmpeq_epi8 (x, _mm256_set1_epi8('\t')); + __m256i c = _mm256_cmpeq_epi8 (x, _mm256_set1_epi8('\n')); + __m256i d = _mm256_cmpeq_epi8 (x, _mm256_set1_epi8('\r')); + __m256i u = _mm256_or_si256 (a, b); + __m256i v = _mm256_or_si256 (c, d); + __m256i w = _mm256_or_si256 (u, v); + + /* check for matches */ + if ((ms = _mm256_movemask_epi8(w)) != -1) { + _mm256_zeroupper(); + return sp - ss + __builtin_ctzll(~(uint64_t)ms); + } + + /* move to next block */ + sp += 32; + nb -= 32; + } + + /* clear upper half to avoid AVX-SSE transition penalty */ + _mm256_zeroupper(); +#endif + + /* 16-byte loop */ + while (likely(nb >= 16)) { + __m128i x = _mm_load_si128 ((const void *)sp); + __m128i a = _mm_cmpeq_epi8 (x, _mm_set1_epi8(' ')); + __m128i b = _mm_cmpeq_epi8 (x, _mm_set1_epi8('\t')); + __m128i c = _mm_cmpeq_epi8 (x, _mm_set1_epi8('\n')); + __m128i d = _mm_cmpeq_epi8 (x, _mm_set1_epi8('\r')); + __m128i u = _mm_or_si128 (a, b); + __m128i v = _mm_or_si128 (c, d); + __m128i w = _mm_or_si128 (u, v); + + /* check for matches */ + if ((ms = _mm_movemask_epi8(w)) != 0xffff) { + return sp - ss + __builtin_ctz(~ms); + } + + /* move to next block */ + sp += 16; + nb -= 16; + } + + /* remaining bytes, do with scalar code */ + while (nb-- > 0) { + switch (*sp++) { + case ' ' : break; + case '\r' : break; + case '\n' : break; + case '\t' : break; + default : return sp - ss - 1; + } + } + + /* all the characters are spaces */ + return sp - ss; +} \ No newline at end of file diff --git a/native/fastint.c b/native/fastint.c index 7b34509..dbe1ea3 100644 --- a/native/fastint.c +++ b/native/fastint.c @@ -16,8 +16,6 @@ #include "native.h" -#if USE_SSE - static const char Digits[200] = { '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9', '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', @@ -223,8 +221,6 @@ static inline int u64toa_xlarge_sse2(char *out, uint64_t val) { return n + 16; } -#endif - int i64toa(char *out, int64_t val) { if (likely(val >= 0)) { return u64toa(out, (uint64_t)val); @@ -234,8 +230,6 @@ int i64toa(char *out, int64_t val) { } } -#if USE_SSE - int u64toa(char *out, uint64_t val) { if (likely(val < 10000)) { return u32toa_small(out, (uint32_t)val); @@ -247,29 +241,3 @@ int u64toa(char *out, uint64_t val) { return u64toa_xlarge_sse2(out, val); } } - -#else - -int u64toa(char *out, uint64_t val) { - char c; - long n = 0; - uint64_t v = val; - - /* convert each digit */ - while (val) { - out[n++] = v % 10 + '0'; - v /= 10; - } - - /* reverse the output */ - for (long i = 0; i < n / 2; i++) { - c = out[i]; - out[i] = out[n - i - 1]; - out[n - i - 1] = c; - } - - /* all done */ - return n; -} - -#endif diff --git a/native/native.h b/native/native.h index f7a0cd6..8d883bb 100644 --- a/native/native.h +++ b/native/native.h @@ -93,13 +93,11 @@ int f64toa(char *out, double val); int i64toa(char *out, int64_t val); int u64toa(char *out, uint64_t val); -size_t lzero(const char *p, size_t n); -size_t lquote(const GoString *s, size_t p); -size_t lspace(const char *sp, size_t nb, size_t p); -ssize_t unquote(const char *sp, ssize_t nb, char *dp, ssize_t *ep, uint64_t flags); +size_t lzero(const char *sp, size_t nb); +size_t lspace(const char *sp, size_t nb, size_t p); -ssize_t strchr1(const GoString *s, size_t p, char ch); -ssize_t strchr2(const GoString *s, size_t p, char c0, char c1); +ssize_t quote(const char *sp, ssize_t nb, char *dp, ssize_t *dn, uint64_t flags); +ssize_t unquote(const char *sp, ssize_t nb, char *dp, ssize_t *ep, uint64_t flags); long value(const char *s, size_t n, long p, JsonState *ret, int allow_control); void vstring(const GoString *src, long *p, JsonState *ret); diff --git a/native/parsing.c b/native/parsing.c index 55a828c..2f15a84 100644 --- a/native/parsing.c +++ b/native/parsing.c @@ -16,6 +16,292 @@ #include "native.h" +/** String Quoting **/ + +typedef struct { + const long n; + const char s[8]; +} quoted_t; + +static const quoted_t _SingleQuoteTab[256] = { + ['\x00'] = { .n = 6, .s = "\\u0000" }, + ['\x01'] = { .n = 6, .s = "\\u0001" }, + ['\x02'] = { .n = 6, .s = "\\u0002" }, + ['\x03'] = { .n = 6, .s = "\\u0003" }, + ['\x04'] = { .n = 6, .s = "\\u0004" }, + ['\x05'] = { .n = 6, .s = "\\u0005" }, + ['\x06'] = { .n = 6, .s = "\\u0006" }, + ['\x07'] = { .n = 6, .s = "\\u0007" }, + ['\b' ] = { .n = 2, .s = "\\b" }, + ['\t' ] = { .n = 2, .s = "\\t" }, + ['\n' ] = { .n = 2, .s = "\\n" }, + ['\x0b'] = { .n = 6, .s = "\\u000b" }, + ['\f' ] = { .n = 2, .s = "\\f" }, + ['\r' ] = { .n = 2, .s = "\\r" }, + ['\x0e'] = { .n = 6, .s = "\\u000e" }, + ['\x0f'] = { .n = 6, .s = "\\u000f" }, + ['\x10'] = { .n = 6, .s = "\\u0010" }, + ['\x11'] = { .n = 6, .s = "\\u0011" }, + ['\x12'] = { .n = 6, .s = "\\u0012" }, + ['\x13'] = { .n = 6, .s = "\\u0013" }, + ['\x14'] = { .n = 6, .s = "\\u0014" }, + ['\x15'] = { .n = 6, .s = "\\u0015" }, + ['\x16'] = { .n = 6, .s = "\\u0016" }, + ['\x17'] = { .n = 6, .s = "\\u0017" }, + ['\x18'] = { .n = 6, .s = "\\u0018" }, + ['\x19'] = { .n = 6, .s = "\\u0019" }, + ['\x1a'] = { .n = 6, .s = "\\u001a" }, + ['\x1b'] = { .n = 6, .s = "\\u001b" }, + ['\x1c'] = { .n = 6, .s = "\\u001c" }, + ['\x1d'] = { .n = 6, .s = "\\u001d" }, + ['\x1e'] = { .n = 6, .s = "\\u001e" }, + ['\x1f'] = { .n = 6, .s = "\\u001f" }, + ['"' ] = { .n = 2, .s = "\\\"" }, + ['\\' ] = { .n = 2, .s = "\\\\" }, +}; + +static const quoted_t _DoubleQuoteTab[256] = { + ['\x00'] = { .n = 7, .s = "\\\\u0000" }, + ['\x01'] = { .n = 7, .s = "\\\\u0001" }, + ['\x02'] = { .n = 7, .s = "\\\\u0002" }, + ['\x03'] = { .n = 7, .s = "\\\\u0003" }, + ['\x04'] = { .n = 7, .s = "\\\\u0004" }, + ['\x05'] = { .n = 7, .s = "\\\\u0005" }, + ['\x06'] = { .n = 7, .s = "\\\\u0006" }, + ['\x07'] = { .n = 7, .s = "\\\\u0007" }, + ['\b' ] = { .n = 3, .s = "\\\\b" }, + ['\t' ] = { .n = 3, .s = "\\\\t" }, + ['\n' ] = { .n = 3, .s = "\\\\n" }, + ['\x0b'] = { .n = 7, .s = "\\\\u000b" }, + ['\f' ] = { .n = 3, .s = "\\\\f" }, + ['\r' ] = { .n = 3, .s = "\\\\r" }, + ['\x0e'] = { .n = 7, .s = "\\\\u000e" }, + ['\x0f'] = { .n = 7, .s = "\\\\u000f" }, + ['\x10'] = { .n = 7, .s = "\\\\u0010" }, + ['\x11'] = { .n = 7, .s = "\\\\u0011" }, + ['\x12'] = { .n = 7, .s = "\\\\u0012" }, + ['\x13'] = { .n = 7, .s = "\\\\u0013" }, + ['\x14'] = { .n = 7, .s = "\\\\u0014" }, + ['\x15'] = { .n = 7, .s = "\\\\u0015" }, + ['\x16'] = { .n = 7, .s = "\\\\u0016" }, + ['\x17'] = { .n = 7, .s = "\\\\u0017" }, + ['\x18'] = { .n = 7, .s = "\\\\u0018" }, + ['\x19'] = { .n = 7, .s = "\\\\u0019" }, + ['\x1a'] = { .n = 7, .s = "\\\\u001a" }, + ['\x1b'] = { .n = 7, .s = "\\\\u001b" }, + ['\x1c'] = { .n = 7, .s = "\\\\u001c" }, + ['\x1d'] = { .n = 7, .s = "\\\\u001d" }, + ['\x1e'] = { .n = 7, .s = "\\\\u001e" }, + ['\x1f'] = { .n = 7, .s = "\\\\u001f" }, + ['"' ] = { .n = 4, .s = "\\\\\\\"" }, + ['\\' ] = { .n = 4, .s = "\\\\\\\\" }, +}; + +static inline void memcpy_p8(char *dp, const char *sp, size_t nb) { + if (nb >= 4) { *(uint32_t *)dp = *(const uint32_t *)sp; sp += 4, dp += 4, nb -= 4; } + if (nb >= 2) { *(uint16_t *)dp = *(const uint16_t *)sp; sp += 2, dp += 2, nb -= 2; } + if (nb >= 1) { *dp = *sp; } +} + +static inline void memcpy_p16(char *dp, const char *sp, size_t nb) { + if (nb >= 8) { *(uint64_t *)dp = *(const uint64_t *)sp; sp += 8, dp += 8, nb -= 8; } + if (nb >= 4) { *(uint32_t *)dp = *(const uint32_t *)sp; sp += 4, dp += 4, nb -= 4; } + if (nb >= 2) { *(uint16_t *)dp = *(const uint16_t *)sp; sp += 2, dp += 2, nb -= 2; } + if (nb >= 1) { *dp = *sp; } +} + +static inline void memcpy_p32(char *dp, const char *sp, size_t nb) { + if (nb >= 16) { _mm_storeu_si128((void *)dp, _mm_loadu_si128((const void *)sp)); sp += 16, dp += 16, nb -= 16; } + if (nb >= 8) { *(uint64_t *)dp = *(const uint64_t *)sp; sp += 8, dp += 8, nb -= 8; } + if (nb >= 4) { *(uint32_t *)dp = *(const uint32_t *)sp; sp += 4, dp += 4, nb -= 4; } + if (nb >= 2) { *(uint16_t *)dp = *(const uint16_t *)sp; sp += 2, dp += 2, nb -= 2; } + if (nb >= 1) { *dp = *sp; } +} + +static inline __m128i _mm_find_quote(__m128i vv) { + __m128i e1 = _mm_cmpgt_epi8 (vv, _mm_set1_epi8(-1)); + __m128i e2 = _mm_cmpgt_epi8 (vv, _mm_set1_epi8(31)); + __m128i e3 = _mm_cmpeq_epi8 (vv, _mm_set1_epi8('"')); + __m128i e4 = _mm_cmpeq_epi8 (vv, _mm_set1_epi8('\\')); + __m128i r1 = _mm_andnot_si128 (e2, e1); + __m128i r2 = _mm_or_si128 (e3, e4); + __m128i rv = _mm_or_si128 (r1, r2); + return rv; +} + +#if USE_AVX2 +static inline __m256i _mm256_find_quote(__m256i vv) { + __m256i e1 = _mm256_cmpgt_epi8 (vv, _mm256_set1_epi8(-1)); + __m256i e2 = _mm256_cmpgt_epi8 (vv, _mm256_set1_epi8(31)); + __m256i e3 = _mm256_cmpeq_epi8 (vv, _mm256_set1_epi8('"')); + __m256i e4 = _mm256_cmpeq_epi8 (vv, _mm256_set1_epi8('\\')); + __m256i r1 = _mm256_andnot_si256 (e2, e1); + __m256i r2 = _mm256_or_si256 (e3, e4); + __m256i rv = _mm256_or_si256 (r1, r2); + return rv; +} +#endif + +static inline ssize_t memcchr_quote(const char *sp, ssize_t nb, char *dp, ssize_t dn) { + uint32_t mm; + const char * ss = sp; + +#if USE_AVX2 + /* 32-byte loop, full store */ + while (nb >= 32 && dn >= 32) { + __m256i vv = _mm256_loadu_si256 ((const void *)sp); + __m256i rv = _mm256_find_quote (vv); + _mm256_storeu_si256 ((void *)dp, vv); + + /* check for matches */ + if ((mm = _mm256_movemask_epi8(rv)) != 0) { + return sp - ss + __builtin_ctz(mm); + } + + /* move to next block */ + sp += 32; + dp += 32; + nb -= 32; + dn -= 32; + } + + /* 32-byte test, partial store */ + if (nb >= 32) { + __m256i vv = _mm256_loadu_si256 ((const void *)sp); + __m256i rv = _mm256_find_quote (vv); + uint32_t mv = _mm256_movemask_epi8 (rv); + uint32_t fv = __builtin_ctzll ((uint64_t)mv | 0x0100000000); + + /* copy at most `dn` characters */ + if (fv <= dn) { + memcpy_p32(dp, sp, fv); + return sp - ss + fv; + } else { + memcpy_p32(dp, sp, dn); + return -(sp - ss + dn) - 1; + } + } + + /* clear upper half to avoid AVX-SSE transition penalty */ + _mm256_zeroupper(); +#endif + + /* 16-byte loop, full store */ + while (nb >= 16 && dn >= 16) { + __m128i vv = _mm_loadu_si128 ((const void *)sp); + __m128i rv = _mm_find_quote (vv); + _mm_storeu_si128 ((void *)dp, vv); + + /* check for matches */ + if ((mm = _mm_movemask_epi8(rv)) != 0) { + return sp - ss + __builtin_ctz(mm); + } + + /* move to next block */ + sp += 16; + dp += 16; + nb -= 16; + dn -= 16; + } + + /* 16-byte test, partial store */ + if (nb >= 16) { + __m128i vv = _mm_loadu_si128 ((const void *)sp); + __m128i rv = _mm_find_quote (vv); + uint32_t mv = _mm_movemask_epi8 (rv); + uint32_t fv = __builtin_ctz (mv | 0x010000); + + /* copy at most `dn` characters */ + if (fv <= dn) { + memcpy_p16(dp, sp, fv); + return sp - ss + fv; + } else { + memcpy_p16(dp, sp, dn); + return -(sp - ss + dn) - 1; + } + } + + /* handle the remaining bytes with scalar code */ + while (nb > 0 && dn > 0) { + if (_SingleQuoteTab[*(uint8_t *)sp].n) { + return sp - ss; + } else { + dn--, nb--; + *dp++ = *sp++; + } + } + + /* check for dest buffer */ + if (nb == 0) { + return sp - ss; + } else { + return -(sp - ss) - 1; + } +} + +ssize_t quote(const char *sp, ssize_t nb, char *dp, ssize_t *dn, uint64_t flags) { + ssize_t nd = *dn; + const char * ds = dp; + const char * ss = sp; + const quoted_t * tab; + + /* select quoting table */ + if (!(flags & F_DBLUNQ)) { + tab = _SingleQuoteTab; + } else { + tab = _DoubleQuoteTab; + } + + /* find the special characters, copy on the fly */ + while (nb != 0) { + int nc; + uint8_t ch; + ssize_t rb = memcchr_quote(sp, nb, dp, nd); + + /* not enough buffer space */ + if (rb < 0) { + *dn = dp - ds - rb - 1; + return -(sp - ss - rb - 1) - 1; + } + + /* skip already copied bytes */ + sp += rb; + dp += rb; + nb -= rb; + nd -= rb; + + /* get the escape entry, handle consecutive quotes */ + while (nb != 0) { + ch = *(uint8_t *)sp; + nc = tab[ch].n; + + /* check for escape character */ + if (nc == 0) { + break; + } + + /* check for buffer space */ + if (nc > nd) { + *dn = dp - ds; + return -(sp - ss) - 1; + } + + /* copy the quoted value */ + memcpy_p8(dp, tab[ch].s, nc); + sp++; + nb--; + dp += nc; + nd -= nc; + } + } + + /* all done */ + *dn = dp - ds; + return sp - ss; +} + +/** String Unquoting **/ + static const char _UnquoteTab[256] = { ['/' ] = '/', ['"' ] = '"', @@ -46,7 +332,7 @@ static inline ssize_t memcchr_p32(const char *s, ssize_t nb, char *p) { /* check for matches */ if ((r = _mm256_movemask_epi8(v)) != 0) { - return s - q + __builtin_ctzll(r | (1ull << 32)); + return s - q + __builtin_ctzll(r); } /* move to the next 32 bytes */ @@ -54,13 +340,12 @@ static inline ssize_t memcchr_p32(const char *s, ssize_t nb, char *p) { p += 32; n -= 32; } -#endif -#if USE_AVX2 + /* clear upper half to avoid AVX-SSE transition penalty */ _mm256_zeroupper(); #endif -#if USE_SSE + /* initialze with '\\' */ __m128i x; __m128i y; __m128i a = _mm_set1_epi8('\\'); @@ -73,7 +358,7 @@ static inline ssize_t memcchr_p32(const char *s, ssize_t nb, char *p) { /* check for matches */ if ((r = _mm_movemask_epi8(y)) != 0) { - return s - q + __builtin_ctzll(r | (1 << 16)); + return s - q + __builtin_ctzll(r); } /* move to the next 16 bytes */ @@ -81,7 +366,6 @@ static inline ssize_t memcchr_p32(const char *s, ssize_t nb, char *p) { p += 16; n -= 16; } -#endif /* remaining bytes, do with scalar code */ while (n--) { diff --git a/native/scanning.c b/native/scanning.c index 1af4244..0830255 100644 --- a/native/scanning.c +++ b/native/scanning.c @@ -19,6 +19,9 @@ static const char *CS_ARRAY = "[]{},\"[]{},\"[]{}"; static const char *CS_OBJECT = "[]{},:\"[]{}:,\"[]"; +static const uint64_t ODD_MASK = 0xaaaaaaaaaaaaaaaa; +static const uint64_t EVEN_MASK = 0x5555555555555555; + static const double P10_TAB[632] = { /* <================= -Inf ================= */ 1e-323, 1e-322, 1e-321, 1e-320, 1e-319, 1e-318, 1e-317, 1e-316, 1e-315, 1e-314, 1e-313, 1e-312, 1e-311, 1e-310, @@ -96,22 +99,54 @@ static inline double pow10(double v, int p) { } } +static inline uint64_t add32(uint64_t v1, uint64_t v2, uint64_t *vo) { + uint32_t v; + uint32_t c = __builtin_uadd_overflow((uint32_t)v1, (uint32_t)v2, &v); + + /* set the carry */ + *vo = c; + return v; +} + +static inline uint64_t add64(uint64_t v1, uint64_t v2, uint64_t *vo) { + uint64_t v; + uint64_t c = __builtin_uaddll_overflow(v1, v2, &v); + + /* set the carry */ + *vo = c; + return v; +} + +static inline char isspace(char ch) { + return ch == ' ' || ch == '\r' || ch == '\n' | ch == '\t'; +} + static inline void vdigits(const GoString *src, long *p, JsonState *ret) { --*p; vnumber(src, p, ret); } -static inline char advance(const GoString *src, long *p) { - if (*p >= src->len) { - return 0; - } else { - return src->buf[(*p)++]; - } -} - static inline char advance_ns(const GoString *src, long *p) { - *p = lspace(src->buf, src->len, *p); - return advance(src, p); + size_t vi = *p; + size_t nb = src->len; + const char * sp = src->buf; + + /* it's likely to run into non-spaces within a few + * characters, so test up to 4 characters manually */ + for (int i = 0; i < 4 && vi < nb; i++, vi++) { + if (!isspace(sp[vi])) { + goto nospace; + } + } + + /* too many spaces, use SIMD to search for characters */ + if ((vi = lspace(sp, nb, vi)) >= nb) { + return 0; + } + +nospace: + *p = vi + 1; + return src->buf[vi]; } static inline int64_t advance_dword(const GoString *src, long *p, long dec, int64_t ret, uint32_t val) { @@ -128,192 +163,219 @@ static inline int64_t advance_dword(const GoString *src, long *p, long dec, int6 } } -static inline ssize_t advance_string(const GoString *src, long *p, int64_t *ep) { - ssize_t e; - ssize_t i; +static inline ssize_t advance_string(const GoString *src, long p, int64_t *ep) { + char ch; + uint64_t es; + uint64_t fe; + uint64_t os; + uint64_t m0; + uint64_t m1; + uint64_t mx; + uint64_t cr = 0; - /* check for end of string */ - if ((e = strchr2(src, *p, '"', '\\')) < 0) { - *p = src->len; - return -ERR_EOF; - } + /* buffer pointers */ + size_t nb = src->len; + const char * sp = src->buf; + const char * ss = src->buf; - /* encounters a '"' at the first scan, it's an unquoted string */ - if (src->buf[e] == '"') { - *ep = -1; - return e; - } +#define ep_init() *ep = -1; +#define ep_setc() ep_setx(sp - ss - 1) +#define ep_setx(x) if (*ep == -1) { *ep = (x); } - /* search for the next double quote */ - i = e; - e = strchr1(src, e + 1, '"'); + /* seek to `p` */ + nb -= p; + sp += p; + ep_init() - /* seek to the end of string */ - while (e >= 0) { - int n = 0; - const char * q = src->buf + e; +#if USE_AVX2 + /* initialize vectors */ + __m256i v0; + __m256i v1; + __m256i q0; + __m256i q1; + __m256i x0; + __m256i x1; + __m256i cq = _mm256_set1_epi8('"'); + __m256i cx = _mm256_set1_epi8('\\'); - /* counting backslashes */ - while (*--q == '\\') { - n++; + /* partial masks */ + uint32_t s0; + uint32_t s1; + uint32_t t0; + uint32_t t1; +#else + /* initialize vectors */ + __m128i v0; + __m128i v1; + __m128i v2; + __m128i v3; + __m128i q0; + __m128i q1; + __m128i q2; + __m128i q3; + __m128i x0; + __m128i x1; + __m128i x2; + __m128i x3; + __m128i cq = _mm_set1_epi8('"'); + __m128i cx = _mm_set1_epi8('\\'); + + /* partial masks */ + uint32_t s0; + uint32_t s1; + uint32_t s2; + uint32_t s3; + uint32_t t0; + uint32_t t1; + uint32_t t2; + uint32_t t3; +#endif + +#define m0_mask(add) \ + m1 &= ~cr; \ + fe = (m1 << 1) | cr; \ + os = (m1 & ~fe) & ODD_MASK; \ + es = add(os, m1, &cr) << 1; \ + m0 &= ~(fe & (es ^ EVEN_MASK)); + + /* 64-byte SIMD loop */ + while (likely(nb >= 64)) { +#if USE_AVX2 + v0 = _mm256_loadu_si256 ((const void *)(sp + 0)); + v1 = _mm256_loadu_si256 ((const void *)(sp + 32)); + q0 = _mm256_cmpeq_epi8 (v0, cq); + q1 = _mm256_cmpeq_epi8 (v1, cq); + x0 = _mm256_cmpeq_epi8 (v0, cx); + x1 = _mm256_cmpeq_epi8 (v1, cx); + s0 = _mm256_movemask_epi8 (q0); + s1 = _mm256_movemask_epi8 (q1); + t0 = _mm256_movemask_epi8 (x0); + t1 = _mm256_movemask_epi8 (x1); + m0 = ((uint64_t)s1 << 32) | (uint64_t)s0; + m1 = ((uint64_t)t1 << 32) | (uint64_t)t0; +#else + v0 = _mm_loadu_si128 ((const void *)(sp + 0)); + v1 = _mm_loadu_si128 ((const void *)(sp + 16)); + v2 = _mm_loadu_si128 ((const void *)(sp + 32)); + v3 = _mm_loadu_si128 ((const void *)(sp + 48)); + q0 = _mm_cmpeq_epi8 (v0, cq); + q1 = _mm_cmpeq_epi8 (v1, cq); + q2 = _mm_cmpeq_epi8 (v2, cq); + q3 = _mm_cmpeq_epi8 (v3, cq); + x0 = _mm_cmpeq_epi8 (v0, cx); + x1 = _mm_cmpeq_epi8 (v1, cx); + x2 = _mm_cmpeq_epi8 (v2, cx); + x3 = _mm_cmpeq_epi8 (v3, cx); + s0 = _mm_movemask_epi8 (q0); + s1 = _mm_movemask_epi8 (q1); + s2 = _mm_movemask_epi8 (q2); + s3 = _mm_movemask_epi8 (q3); + t0 = _mm_movemask_epi8 (x0); + t1 = _mm_movemask_epi8 (x1); + t2 = _mm_movemask_epi8 (x2); + t3 = _mm_movemask_epi8 (x3); + m0 = ((uint64_t)s3 << 48) | ((uint64_t)s2 << 32) | ((uint64_t)s1 << 16) | (uint64_t)s0; + m1 = ((uint64_t)t3 << 48) | ((uint64_t)t2 << 32) | ((uint64_t)t1 << 16) | (uint64_t)t0; +#endif + + /** update first quote position */ + if (unlikely(m1 != 0)) { + ep_setx(sp - ss + __builtin_ctzll(m1)) } - /* pairs of backslashes cancel each other out */ - if ((n & 1) == 0) { - break; + /** mask all the escaped quotes */ + if (unlikely(m1 != 0 || cr != 0)) { + m0_mask(add64) } - /* find the next double quote */ - e = e + 1; - e = strchr1(src, e, '"'); - } - - /* check for end of string */ - if (e < 0) { - *p = src->len; - return -ERR_EOF; - } - - /* update the result */ - *ep = i; - return e; -} - -static inline int64_t advance_number(const GoString *src, long *p, long i, JsonState *ret, size_t sp) { - size_t n = src->len; - const char * s = src->buf; - - /* check for EOF */ - if (i >= n) { - *p = n; - return -ERR_EOF; - } - - /* base factors */ - int esm = 1; - int exp = 0; - int ovf = 0; - int rem = 0; - double val = 0; - int64_t idx = 0; - int64_t i64 = 0; - int64_t rvt = V_INTEGER; - - /* initial state */ - ret->iv = 0; - ret->ep = sp; - - /* check for the special case of '0' */ - if (s[i] == '0') { - if (++i >= n) { - *p = i; - return V_INTEGER; + /* check for end quote */ + if (m0 != 0) { + return sp - ss + __builtin_ctzll(m0) + 1; } - } else { - if (s[i] < '0' || s[i] > '9') { - *p = i; - return -ERR_INVAL; + + /* move to the next block */ + sp += 64; + nb -= 64; + } + + /* 32-byte SIMD round */ + if (likely(nb >= 32)) { +#if USE_AVX2 + v0 = _mm256_loadu_si256 ((const void *)sp); + q0 = _mm256_cmpeq_epi8 (v0, cq); + x0 = _mm256_cmpeq_epi8 (v0, cx); + s0 = _mm256_movemask_epi8 (q0); + t0 = _mm256_movemask_epi8 (x0); + m0 = (uint64_t)s0; + m1 = (uint64_t)t0; +#else + v0 = _mm_loadu_si128 ((const void *)(sp + 0)); + v1 = _mm_loadu_si128 ((const void *)(sp + 16)); + q0 = _mm_cmpeq_epi8 (v0, cq); + q1 = _mm_cmpeq_epi8 (v1, cq); + x0 = _mm_cmpeq_epi8 (v0, cx); + x1 = _mm_cmpeq_epi8 (v1, cx); + s0 = _mm_movemask_epi8 (q0); + s1 = _mm_movemask_epi8 (q1); + t0 = _mm_movemask_epi8 (x0); + t1 = _mm_movemask_epi8 (x1); + m0 = ((uint64_t)s1 << 16) | (uint64_t)s0; + m1 = ((uint64_t)t1 << 16) | (uint64_t)t0; +#endif + + /** update first quote position */ + if (unlikely(m1 != 0)) { + ep_setx(sp - ss + __builtin_ctzll(m1)) + } + + /** mask all the escaped quotes */ + if (unlikely(m1 != 0 || cr != 0)) { + m0_mask(add32) + } + + /* check for end quote */ + if (m0 != 0) { + return sp - ss + __builtin_ctzll(m0) + 1; + } + + /* move to the next block */ + sp += 32; + nb -= 32; + } + + /* check for carry */ + if (unlikely(cr != 0)) { + if (nb == 0) { + return -ERR_EOF; } else { - while (!(ovf = __builtin_smulll_overflow((idx = i64), 10, &i64)) && - !(ovf = __builtin_saddll_overflow(i64, s[i] - '0', &i64)) && - !(++i >= n || !(s[i] >= '0' && s[i] <= '9'))); + ep_setc() + sp++, nb--; } } - /* set the integer part */ - ret->iv = i64; - ret->dv = i64; - - /* check for integer overflow, in such case - * the number must be represented by double */ - if (ovf) { - val = idx; - rvt = V_DOUBLE; - - /* convert the remaining digits */ - do { - val *= 10; - val += s[i++] - '0'; - } while (i < n && s[i] >= '0' && s[i] <= '9'); - - /* set the integer part to INT64_MAX to indicate an overflow */ - ret->dv = val; - ret->iv = INT64_MAX; - } - - /* check for decimal points */ - if (i < n && s[i] == '.') { - idx = ++i; - rvt = V_DOUBLE; - - /* check for EOF */ - if (i >= n) { - *p = n; - return -ERR_EOF; - } - - /* should be a digit */ - if (s[i] < '0' || s[i] > '9') { - *p = i; - return -ERR_INVAL; - } - - /* convert the fractional part */ - do { - rem *= 10; - rem += s[i++] - '0'; - } while (i < n && s[i] >= '0' && s[i] <= '9'); - - /* combine with the integer part */ - idx -= i; - ret->dv += pow10(rem, idx); - } - - /* check for exponent */ - if (i < n && (s[i] == 'e' || s[i] == 'E')) { - i++; - rvt = V_DOUBLE; - - /* check for EOF */ - if (i >= n) { - *p = n; - return -ERR_EOF; - } - - /* check for the '+' or '-' sign */ - if (s[i] == '+' || s[i] == '-') { - if (i >= n - 1) { - *p = i; + /* handle the remaining bytes with scalar code */ + while (nb-- > 0 && (ch = *sp++) != '"') { + if (unlikely(ch == '\\')) { + if (nb == 0) { return -ERR_EOF; } else { - if (s[i++] == '+') { - esm = 1; - } else { - esm = -1; - } + ep_setc() + sp++, nb--; } } - - /* should be a digit */ - if (s[i] < '0' || s[i] > '9') { - *p = i; - return -ERR_INVAL; - } - - /* convert the power */ - do { - exp *= 10; - exp += s[i++] - '0'; - } while (i < n && s[i] >= '0' && s[i] <= '9'); - - /* apply the power */ - exp *= esm; - ret->dv = pow10(ret->dv, exp); } - /* calculate the offset */ - *p = i; - return rvt; +#undef ep_init +#undef ep_setc +#undef ep_setx +#undef m0_mask + + /* check for quotes */ + if (ch == '"') { + return sp - ss; + } else { + return -ERR_EOF; + } } /** Value Scanning Routines **/ @@ -352,16 +414,17 @@ long value(const char *s, size_t n, long p, JsonState *ret, int allow_control) { void vstring(const GoString *src, long *p, JsonState *ret) { int64_t i = *p; - ssize_t e = advance_string(src, p, &ret->ep); + ssize_t e = advance_string(src, i, &ret->ep); /* check for errors */ if (e < 0) { + *p = src->len; ret->vt = e; return; } /* update the result */ - *p = e + 1; + *p = e; ret->iv = i; ret->vt = V_STRING; } @@ -743,6 +806,218 @@ static inline long fsm_exec(StateMachine *self, const GoString *src, long *p) { #undef FSM_CHAR #undef FSM_XERR +#define check_bits(mv) \ + if (unlikely((v = mv & (mv - 1)) != 0)) { \ + return -(sp - ss + __builtin_ctz(v) + 1); \ + } + +#define check_sidx(iv) \ + if (likely(iv == -1)) { \ + iv = sp - ss - 1; \ + } else { \ + return -(sp - ss); \ + } + +#define check_vidx(iv, mv) \ + if (mv != 0) { \ + if (likely(iv == -1)) { \ + iv = sp - ss + __builtin_ctz(mv); \ + } else { \ + return -(sp - ss + __builtin_ctz(mv) + 1); \ + } \ + } + +static inline long skip_number(const char *sp, size_t nb) { + long di = -1; + long ei = -1; + long si = -1; + const char * ss = sp; + + /* check for EOF */ + if (nb == 0) { + return -1; + } + + /* special case of '0' */ + if (*sp == '0' && (nb == 1 || sp[1] != '.')) { + return 1; + } + +#if USE_AVX2 + /* can do with AVX-2 */ + if (likely(nb >= 32)) { + __m256i d9 = _mm256_set1_epi8('9'); + __m256i ds = _mm256_set1_epi8('/'); + __m256i dp = _mm256_set1_epi8('.'); + __m256i el = _mm256_set1_epi8('e'); + __m256i eu = _mm256_set1_epi8('E'); + __m256i xp = _mm256_set1_epi8('+'); + __m256i xm = _mm256_set1_epi8('-'); + + /* 32-byte loop */ + do { + __m256i sb = _mm256_loadu_si256 ((const void *)sp); + __m256i i0 = _mm256_cmpgt_epi8 (sb, ds); + __m256i i9 = _mm256_cmpgt_epi8 (sb, d9); + __m256i id = _mm256_cmpeq_epi8 (sb, dp); + __m256i il = _mm256_cmpeq_epi8 (sb, el); + __m256i iu = _mm256_cmpeq_epi8 (sb, eu); + __m256i ip = _mm256_cmpeq_epi8 (sb, xp); + __m256i im = _mm256_cmpeq_epi8 (sb, xm); + __m256i iv = _mm256_andnot_si256 (i9, i0); + __m256i ie = _mm256_or_si256 (il, iu); + __m256i is = _mm256_or_si256 (ip, im); + __m256i rt = _mm256_or_si256 (iv, id); + __m256i ru = _mm256_or_si256 (ie, is); + __m256i rv = _mm256_or_si256 (rt, ru); + + /* exponent and sign position */ + uint32_t md = _mm256_movemask_epi8(id); + uint32_t me = _mm256_movemask_epi8(ie); + uint32_t ms = _mm256_movemask_epi8(is); + uint32_t mr = _mm256_movemask_epi8(rv); + + /* mismatch position */ + uint32_t v; + uint32_t i = __builtin_ctzll(~(uint64_t)mr | 0x0100000000); + + /* mask out excess characters */ + if (i != 32) { + md &= (1 << i) - 1; + me &= (1 << i) - 1; + ms &= (1 << i) - 1; + } + + /* check & update decimal point, exponent and sign index */ + check_bits(md) + check_bits(me) + check_bits(ms) + check_vidx(di, md) + check_vidx(ei, me) + check_vidx(si, ms) + + /* check for valid number */ + if (i != 32) { + sp += i; + _mm256_zeroupper(); + goto check_index; + } + + /* move to next block */ + sp += 32; + nb -= 32; + } while (nb >= 32); + + /* clear the upper half to prevent AVX-SSE transition penalty */ + _mm256_zeroupper(); + } +#endif + + /* can do with SSE */ + if (likely(nb >= 16)) { + __m128i dc = _mm_set1_epi8(':'); + __m128i ds = _mm_set1_epi8('/'); + __m128i dp = _mm_set1_epi8('.'); + __m128i el = _mm_set1_epi8('e'); + __m128i eu = _mm_set1_epi8('E'); + __m128i xp = _mm_set1_epi8('+'); + __m128i xm = _mm_set1_epi8('-'); + __m128i v1 = _mm_set1_epi8(0xff); + + /* 16-byte loop */ + do { + __m128i sb = _mm_loadu_si128 ((const void *)sp); + __m128i i0 = _mm_cmpgt_epi8 (sb, ds); + __m128i i9 = _mm_cmplt_epi8 (sb, dc); + __m128i id = _mm_cmpeq_epi8 (sb, dp); + __m128i il = _mm_cmpeq_epi8 (sb, el); + __m128i iu = _mm_cmpeq_epi8 (sb, eu); + __m128i ip = _mm_cmpeq_epi8 (sb, xp); + __m128i im = _mm_cmpeq_epi8 (sb, xm); + __m128i iv = _mm_and_si128 (i9, i0); + __m128i ie = _mm_or_si128 (il, iu); + __m128i is = _mm_or_si128 (ip, im); + __m128i rt = _mm_or_si128 (iv, id); + __m128i ru = _mm_or_si128 (ie, is); + __m128i rv = _mm_or_si128 (rt, ru); + + /* exponent and sign position */ + uint32_t md = _mm_movemask_epi8(id); + uint32_t me = _mm_movemask_epi8(ie); + uint32_t ms = _mm_movemask_epi8(is); + uint32_t mr = _mm_movemask_epi8(rv); + + /* mismatch position */ + uint32_t v; + uint32_t i = __builtin_ctzll(~mr | 0x00010000); + + /* mask out excess characters */ + if (i != 16) { + md &= (1 << i) - 1; + me &= (1 << i) - 1; + ms &= (1 << i) - 1; + } + + /* check & update exponent and sign index */ + check_bits(md) + check_bits(me) + check_bits(ms) + check_vidx(di, md) + check_vidx(ei, me) + check_vidx(si, ms) + + /* check for valid number */ + if (i != 16) { + sp += i; + goto check_index; + } + + /* move to next block */ + sp += 16; + nb -= 16; + } while (nb >= 16); + } + + /* remaining bytes, do with scalar code */ + while (likely(--nb >= 0)) { + switch (*sp++) { + case '0' : /* fallthrough */ + case '1' : /* fallthrough */ + case '2' : /* fallthrough */ + case '3' : /* fallthrough */ + case '4' : /* fallthrough */ + case '5' : /* fallthrough */ + case '6' : /* fallthrough */ + case '7' : /* fallthrough */ + case '8' : /* fallthrough */ + case '9' : break; + case '.' : check_sidx(di); break; + case 'e' : /* fallthrough */ + case 'E' : check_sidx(ei); break; + case '+' : /* fallthrough */ + case '-' : check_sidx(si); break; + default : sp--; goto check_index; + } + } + +check_index: + if (di == 0 || si == 0) { + return -1; + } else if (si > 0 && ei != si - 1) { + return -si - 1; + } else if (di >= 0 && ei >= 0 && di > ei - 1) { + return -di - 1; + } else if (di >= 0 && ei >= 0 && di == ei - 1) { + return -ei - 1; + } else { + return sp - ss; + } +} + +#undef check_bits +#undef check_sidx +#undef check_vidx + long skip_one(const GoString *src, long *p, StateMachine *m) { fsm_init(m, FSM_VAL); return fsm_exec(m, src, p); @@ -761,40 +1036,44 @@ long skip_object(const GoString *src, long *p, StateMachine *m) { long skip_string(const GoString *src, long *p) { int64_t v; ssize_t q = *p - 1; - ssize_t e = advance_string(src, p, &v); + ssize_t e = advance_string(src, *p, &v); - /* check for errors */ - if (e < 0) { + /* check for errors, and update the position */ + if (e >= 0) { + *p = e; + return q; + } else { + *p = src->len; return e; } - - /* update the position */ - *p = e + 1; - return q; } long skip_negative(const GoString *src, long *p) { - long q = *p - 1; - int64_t r; - JsonState v; + long i = *p; + long r = skip_number(src->buf + i, src->len - i); - /* skip the number */ - if ((r = advance_number(src, p, *p, &v, q)) < 0) { - return r; - } else { - return q; + /* check for errors */ + if (r < 0) { + *p -= r + 1; + return -ERR_INVAL; } + + /* update value pointer */ + *p += r; + return i - 1; } long skip_positive(const GoString *src, long *p) { - long q = *p - 1; - int64_t r; - JsonState v; + long i = *p - 1; + long r = skip_number(src->buf + i, src->len - i); - /* skip the number */ - if ((r = advance_number(src, p, q, &v, q)) < 0) { - return r; - } else { - return q; + /* check for errors */ + if (r < 0) { + *p -= r + 2; + return -ERR_INVAL; } + + /* update value pointer */ + *p += r - 1; + return i; } diff --git a/tools/asm2asm b/tools/asm2asm index 38a8136..daab652 160000 --- a/tools/asm2asm +++ b/tools/asm2asm @@ -1 +1 @@ -Subproject commit 38a813682862252de3d1a016c90755467bff0ee9 +Subproject commit daab6520b48bc30586f7468676c990b5c1f781bd