From de2dc2c35a292b5930983647f9bfb81884a8c134 Mon Sep 17 00:00:00 2001 From: liu Date: Thu, 11 Aug 2022 19:06:11 +0800 Subject: [PATCH] add ValidateString option into decode (#253) * fix: add escape validate * feat: add validatestring option * add print debug * add jit debug in decoder * fix go1.16 decoder debug * fix: not change others * fix generic parse bug * remove debug info * test twitter json * fix: option typos * test: add bug test * fix validate bugs * fix: validate * remove files * re-compile * update license * add flags on `skip_xxx()` * fix internal native tests * re-compile * add validstring for perftest * modify api * fix readme * fix comment * add license * rename to ValidateString * fix xprintf.h * add debug Co-authored-by: liuqiang Co-authored-by: duanyi.aster --- README.md | 10 +- api.go | 3 + ast/parser.go | 2 +- decode_test.go | 27 +- decoder/assembler_amd64_go116.go | 4 +- decoder/assembler_amd64_go117.go | 9 +- decoder/decoder.go | 11 +- internal/native/avx/native_amd64.go | 10 +- internal/native/avx/native_amd64.s | 9978 ++++++++-------- internal/native/avx/native_amd64_test.go | 52 +- internal/native/avx/native_subr_amd64.go | 48 +- internal/native/avx2/native_amd64.go | 10 +- internal/native/avx2/native_amd64.s | 12547 ++++++++++---------- internal/native/avx2/native_amd64_test.go | 52 +- internal/native/avx2/native_subr_amd64.go | 46 +- internal/native/dispatch_amd64.go | 4 +- internal/native/dispatch_amd64.s | 2 +- internal/native/native_amd64.tmpl | 10 +- internal/native/native_amd64_test.tmpl | 52 +- internal/native/types/types.go | 2 + licenses/LICENSE-yyjson | 21 + native/native.c | 4 +- native/native.h | 12 +- native/scanning.c | 293 +- native/test/xprintf.h | 204 + native/utf8.c | 183 - native/utf8.h | 121 + sonic.go | 12 +- 28 files changed, 11818 insertions(+), 11911 deletions(-) create mode 100644 licenses/LICENSE-yyjson create mode 100644 native/test/xprintf.h delete mode 100644 native/utf8.c create mode 100644 native/utf8.h diff --git a/README.md b/README.md index c4847bc..deb2491 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ A blazingly fast JSON serializing & deserializing library, accelerated by JIT (just-in-time compiling) and SIMD (single-instruction-multiple-data). ## Requirement -- Go 1.15/1.16/1.17/1.18 +- Go 1.15/1.16/1.17/1.18/1.19 - Linux/MacOS/Windows - Amd64 CPU with AVX instruction set @@ -261,10 +261,10 @@ println(string(buf) == string(exp)) // true - modification: `Set()`, `SetByIndex()`, `Add()` ## Compatibility -Sonic **DOSE NOT** ensure to support all environments, due to the difficulty of developing high-performance codes. For developers who use sonic to build their applications in different environments (ex: developing on M1 Mac but running on linux server), or those who want to handle JSON strictly consistent with `encoding/json`, we provide some compatible APIs as `sonic.API` -- `ConfigDefault`: the sonic's default config (`EscapeHTML=false`,`SortKeys=false`...) to run on sonic-supporting environment. It will fall back to `encoding/json` with corresponding config , and some options like `SortKeys=false` will be invalid. -- `ConfigStd`: the std-compatible config (`EscapeHTML=true`,`SortKeys=true`...) to run on sonic-supporting environment. It whill fall back to `encoding/json`. -- `ConfigFastest`: the fastest config (`NoQuoteTextMarshaler=true`) to run on sonic-supporting environment. It will fall back to `encoding/json` with corresponding config , and some options will be invalid. +Sonic **DOSE NOT** ensure to support all environments, due to the difficulty of developing high-performance codes. For developers who use sonic to build their applications in different environments (ex: developing on M1 Mac but running on Linux server), or those who want to handle JSON strictly consistent with `encoding/json`, we provide some compatible APIs as `sonic.API` +- `ConfigDefault`: the sonic's default config (`EscapeHTML=false`,`SortKeys=false`...) to run on sonic-supporting environment. It will fall back to `encoding/json` with the corresponding config, and some options like `SortKeys=false` will be invalid. +- `ConfigStd`: the std-compatible config (`EscapeHTML=true`,`SortKeys=true`...) to run on sonic-supporting environment. It will fall back to `encoding/json`. +- `ConfigFastest`: the fastest config (`NoQuoteTextMarshaler=true`) to run on sonic-supporting environment. It will fall back to `encoding/json` with corresponding config, and some options will be invalid. ## Tips diff --git a/api.go b/api.go index 9456d81..5f31fe4 100644 --- a/api.go +++ b/api.go @@ -64,6 +64,9 @@ import ( // CopyString indicates decoder to decode string values by copying instead of referring. CopyString bool + // ValidateString indicates decoder to valid string values: decoder will return errors when + // invalid UTF-8 chars or unescaped control chars(\u0000-\u001f) in the string value of JSON. + ValidateString bool } var ( diff --git a/ast/parser.go b/ast/parser.go index 6a768cc..9833796 100644 --- a/ast/parser.go +++ b/ast/parser.go @@ -319,7 +319,7 @@ func (self *Parser) Parse() (Node, types.ParsingError) { func (self *Parser) skip() (int, types.ParsingError) { fsm := types.NewStateMachine() - start := native.SkipOne(&self.s, &self.p, fsm) + start := native.SkipOne(&self.s, &self.p, fsm, uint64(0)) types.FreeStateMachine(fsm) if start < 0 { diff --git a/decode_test.go b/decode_test.go index 6bed091..7f6d6c9 100644 --- a/decode_test.go +++ b/decode_test.go @@ -35,8 +35,10 @@ import ( `testing` `time` `unsafe` + `unicode/utf8` `github.com/bytedance/sonic/decoder` + `github.com/davecgh/go-spew/spew` ) type T struct { @@ -410,6 +412,7 @@ type unmarshalTest struct { useNumber bool golden bool disallowUnknownFields bool + validateString bool } type B struct { @@ -696,11 +699,13 @@ var unmarshalTests = []unmarshalTest{ in: "\"hello\xffworld\"", ptr: new(string), out: "hello\xffworld", + validateString: false, }, { in: "\"hello\xc2\xc2world\"", ptr: new(string), out: "hello\xc2\xc2world", + validateString: false, }, { in: "\"hello\xc2\xffworld\"", @@ -999,6 +1004,17 @@ var unmarshalTests = []unmarshalTest{ ptr: new(map[string]json.Number), err: fmt.Errorf("json: invalid number literal, trying to unmarshal %q into Number", `"invalid"`), }, + {in: `\u`, ptr: new(interface{}), err: fmt.Errorf("json: invald char"), validateString: true}, + {in: `\u`, ptr: new(string), err: fmt.Errorf("json: invald char"), validateString: true}, + + {in: "\"\x00\"", ptr: new(interface{}), err: fmt.Errorf("json: invald char"), validateString: true}, + {in: "\"\x00\"", ptr: new(string), err: fmt.Errorf("json: invald char"), validateString: true}, + {in: "\"\xff\"", ptr: new(interface{}), err: fmt.Errorf("json: invald char"), validateString: true}, + {in: "\"\xff\"", ptr: new(string), err: fmt.Errorf("json: invald char"), validateString: true}, + {in: "\"\x00\"", ptr: new(interface{}), out: interface{}("\x00"), validateString: false}, + {in: "\"\x00\"", ptr: new(string), out: "\x00", validateString: false}, + {in: "\"\xff\"", ptr: new(interface{}), out: interface{}("\xff"), validateString: false}, + {in: "\"\xff\"", ptr: new(string), out: "\xff", validateString: false}, } func trim(b []byte) []byte { @@ -1128,14 +1144,20 @@ func TestUnmarshal(t *testing.T) { } dec := decoder.NewDecoder(tt.in) + validUtf8 := true if tt.useNumber { dec.UseNumber() } if tt.disallowUnknownFields { dec.DisallowUnknownFields() } - if err := dec.Decode(v.Interface()); (err == nil) != (tt.err == nil) { - t.Errorf("#%d: %v, want %v", i, err, tt.err) + if tt.validateString { + dec.ValidateString() + validUtf8 = utf8.Valid([]byte(tt.in)) + } + if err := dec.Decode(v.Interface()); (err == nil) != (tt.err == nil && validUtf8) { + spew.Dump(tt.in) + t.Fatalf("#%d: %v, want %v", i, err, tt.err) continue } else if err != nil { continue @@ -2203,7 +2225,6 @@ func TestInvalidStringOption(t *testing.T) { if err != nil { t.Fatalf("Marshal: %v", err) } - err = Unmarshal(data, &item) if err != nil { t.Fatalf("Unmarshal: %v", err) diff --git a/decoder/assembler_amd64_go116.go b/decoder/assembler_amd64_go116.go index 28524a6..37a48a0 100644 --- a/decoder/assembler_amd64_go116.go +++ b/decoder/assembler_amd64_go116.go @@ -387,6 +387,7 @@ func (self *_Assembler) call_sf(fn obj.Addr) { self.Emit("MOVQ", _IC, _ARG_ic) // MOVQ IC, ic<>+16(FP) self.Emit("LEAQ", _ARG_ic, _SI) // LEAQ ic<>+16(FP), SI self.Emit("LEAQ", jit.Ptr(_ST, _FsmOffset), _DX) // LEAQ _FsmOffset(ST), DX + self.Emit("MOVQ", _ARG_fv, _CX) self.call(fn) // CALL ${fn} self.Emit("MOVQ", _ARG_ic, _IC) // MOVQ ic<>+16(FP), IC } @@ -591,7 +592,8 @@ func (self *_Assembler) check_eof(d int64) { } } -func (self *_Assembler) parse_string() { +func (self *_Assembler) parse_string() { // parse_string has a validate flag params in the last + self.Emit("MOVQ", _ARG_fv, _CX) self.call_vf(_F_vstring) self.check_err() } diff --git a/decoder/assembler_amd64_go117.go b/decoder/assembler_amd64_go117.go index 9d4d5dd..a8f79f1 100644 --- a/decoder/assembler_amd64_go117.go +++ b/decoder/assembler_amd64_go117.go @@ -404,6 +404,7 @@ func (self *_Assembler) call_sf(fn obj.Addr) { self.Emit("MOVQ", _IC, _ARG_ic) // MOVQ IC, ic<>+16(FP) self.Emit("LEAQ", _ARG_ic, _SI) // LEAQ ic<>+16(FP), SI self.Emit("LEAQ", jit.Ptr(_ST, _FsmOffset), _DX) // LEAQ _FsmOffset(ST), DX + self.Emit("MOVQ", _ARG_fv, _CX) self.callc(fn) self.Emit("MOVQ", _ARG_ic, _IC) // MOVQ ic<>+16(FP), IC } @@ -602,6 +603,7 @@ func (self *_Assembler) check_eof(d int64) { } func (self *_Assembler) parse_string() { + self.Emit("MOVQ", _ARG_fv, _CX) self.call_vf(_F_vstring) self.check_err() } @@ -933,6 +935,8 @@ func (self *_Assembler) mapassign_utext(t reflect.Type, addressable bool) { var ( _F_skip_one = jit.Imm(int64(native.S_skip_one)) + _F_skip_array = jit.Imm(int64(native.S_skip_array)) + _F_skip_object = jit.Imm(int64(native.S_skip_object)) _F_skip_number = jit.Imm(int64(native.S_skip_number)) ) @@ -1031,11 +1035,6 @@ var ( _F_decodeValue = jit.Imm(int64(_subr_decode_value)) ) -var ( - _F_skip_array = jit.Imm(int64(native.S_skip_array)) - _F_skip_object = jit.Imm(int64(native.S_skip_object)) -) - var ( _F_FieldMap_GetCaseInsensitive obj.Addr ) diff --git a/decoder/decoder.go b/decoder/decoder.go index 3b7b5e0..aaf7f28 100644 --- a/decoder/decoder.go +++ b/decoder/decoder.go @@ -33,6 +33,7 @@ const ( _F_disable_urc _F_disable_unknown _F_copy_string + _F_validate_string _F_allow_control = 31 ) @@ -45,6 +46,7 @@ const ( OptionUseUnicodeErrors Options = 1 << _F_disable_urc OptionDisableUnknown Options = 1 << _F_disable_unknown OptionCopyString Options = 1 << _F_copy_string + OptionValidateString Options = 1 << _F_validate_string ) func (self *Decoder) SetOptions(opts Options) { @@ -139,6 +141,13 @@ func (self *Decoder) CopyString() { self.f |= 1 << _F_copy_string } +// ValidateString causes the Decoder to validate string values when decoding string value +// in JSON. Validation is that, returning error when unescaped control chars(0x00-0x1f) or +// invalid UTF-8 chars in the string value of JSON. +func (self *Decoder) ValidateString() { + self.f |= 1 << _F_validate_string +} + // Pretouch compiles vt ahead-of-time to avoid JIT compilation on-the-fly, in // order to reduce the first-hit latency. // @@ -199,7 +208,7 @@ func Skip(data []byte) (start int, end int) { s := rt.Mem2Str(data) p := 0 m := types.NewStateMachine() - ret := native.SkipOne(&s, &p, m) + ret := native.SkipOne(&s, &p, m, uint64(0)) types.FreeStateMachine(m) return ret, p } \ No newline at end of file diff --git a/internal/native/avx/native_amd64.go b/internal/native/avx/native_amd64.go index b04506a..3b82f0c 100644 --- a/internal/native/avx/native_amd64.go +++ b/internal/native/avx/native_amd64.go @@ -67,12 +67,12 @@ func __unquote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __value(s unsafe.Pointer, n int, p int, v *types.JsonState, allow_control int) (ret int) +func __value(s unsafe.Pointer, n int, p int, v *types.JsonState, flags uint64) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __vstring(s *string, p *int, v *types.JsonState) +func __vstring(s *string, p *int, v *types.JsonState, flags uint64) //go:nosplit //go:noescape @@ -92,17 +92,17 @@ func __vunsigned(s *string, p *int, v *types.JsonState) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __skip_one(s *string, p *int, m *types.StateMachine) (ret int) +func __skip_one(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __skip_array(s *string, p *int, m *types.StateMachine) (ret int) +func __skip_array(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __skip_object(s *string, p *int, m *types.StateMachine) (ret int) +func __skip_object(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) //go:nosplit //go:noescape diff --git a/internal/native/avx/native_amd64.s b/internal/native/avx/native_amd64.s index 2154ba0..4de34d9 100644 --- a/internal/native/avx/native_amd64.s +++ b/internal/native/avx/native_amd64.s @@ -15,89 +15,75 @@ _lzero: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp CMPQ SI, $32 - JB LBB0_5 - LEAQ -32(SI), AX - MOVQ AX, CX - ANDQ $-32, CX - LEAQ 32(CX)(DI*1), CX - ANDL $31, AX + JB LBB0_3 -LBB0_2: +LBB0_1: LONG $0x076ffec5 // vmovdqu (%rdi), %ymm0 LONG $0x177de2c4; BYTE $0xc0 // vptest %ymm0, %ymm0 - JNE LBB0_13 + JNE LBB0_9 ADDQ $32, DI ADDQ $-32, SI CMPQ SI, $31 - JA LBB0_2 - MOVQ AX, SI - MOVQ CX, DI + JA LBB0_1 -LBB0_5: +LBB0_3: WORD $0xf8c5; BYTE $0x77 // vzeroupper CMPQ SI, $16 - JB LBB0_10 - LEAQ -16(SI), AX - MOVQ AX, CX - ANDQ $-16, CX - LEAQ 16(CX)(DI*1), CX - ANDL $15, AX + JB LBB0_6 -LBB0_7: +LBB0_4: LONG $0x076ffac5 // vmovdqu (%rdi), %xmm0 LONG $0x1779e2c4; BYTE $0xc0 // vptest %xmm0, %xmm0 - JNE LBB0_14 + JNE LBB0_10 ADDQ $16, DI ADDQ $-16, SI CMPQ SI, $15 - JA LBB0_7 - MOVQ AX, SI - MOVQ CX, DI + JA LBB0_4 -LBB0_10: +LBB0_6: CMPQ SI, $8 - JB LBB0_16 + JB LBB0_12 MOVL $1, AX CMPQ 0(DI), $0 - JNE LBB0_12 + JNE LBB0_8 ADDQ $8, DI ADDQ $-8, SI -LBB0_16: +LBB0_12: CMPQ SI, $4 - JB LBB0_19 + JB LBB0_15 MOVL $1, AX CMPL 0(DI), $0 - JNE LBB0_12 + JNE LBB0_8 ADDQ $4, DI ADDQ $-4, SI -LBB0_19: +LBB0_15: CMPQ SI, $2 - JB LBB0_22 + JB LBB0_18 MOVL $1, AX CMPW 0(DI), $0 - JNE LBB0_12 + JNE LBB0_8 ADDQ $2, DI ADDQ $-2, SI -LBB0_22: +LBB0_18: XORL AX, AX TESTQ SI, SI - JE LBB0_12 + JE LBB0_8 CMPB 0(DI), $0 SETNE AX BYTE $0x5d // popq %rbp RET -LBB0_12: +LBB0_8: BYTE $0x5d // popq %rbp RET -LBB0_13: +LBB0_9: WORD $0xf8c5; BYTE $0x77 // vzeroupper -LBB0_14: +LBB0_10: MOVL $1, AX BYTE $0x5d // popq %rbp RET @@ -117,110 +103,107 @@ LCPI1_3: _lspace: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - LEAQ 0(DI)(DX*1), AX - SUBQ DX, SI + MOVQ DX, AX + LEAQ 0(DI)(DX*1), R10 + MOVQ SI, DX + SUBQ AX, DX JE LBB1_7 - MOVL AX, CX + MOVL R10, CX ANDL $15, CX TESTQ CX, CX JE LBB1_7 - LEAQ -1(SI), R9 - XORL DX, DX + LEAQ 1(DI), R9 + LEAQ -1(SI), CX MOVQ $4294977024, R8 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 + MOVBLSX 0(DI)(AX*1), DX + CMPL DX, $32 + JA LBB1_22 + BTQ DX, R8 + JAE LBB1_22 + LEAQ 1(AX), DX + CMPQ CX, AX JE LBB1_6 - LEAQ 1(AX)(DX*1), CX - ANDL $15, CX - MOVQ R10, DX - TESTQ CX, CX + ADDL R9, AX + ANDL $15, AX + TESTQ AX, AX + MOVQ DX, AX JNE LBB1_3 LBB1_6: - ADDQ R10, AX - SUBQ R10, SI + LEAQ 0(DI)(DX*1), R10 + SUBQ DX, SI + MOVQ SI, DX LBB1_7: - CMPQ SI, $16 + CMPQ DX, $16 JB LBB1_13 - LEAQ -16(SI), CX - MOVQ CX, DX - ANDQ $-16, DX - LEAQ 16(DX)(AX*1), R8 - ANDL $15, CX - QUAD $0xffffff42056ffac5 // vmovdqu $-190(%rip), %xmm0 /* LCPI1_0(%rip) */ - QUAD $0xffffff4a0d6ffac5 // vmovdqu $-182(%rip), %xmm1 /* LCPI1_1(%rip) */ - QUAD $0xffffff52156ffac5 // vmovdqu $-174(%rip), %xmm2 /* LCPI1_2(%rip) */ - QUAD $0xffffff5a1d6ffac5 // vmovdqu $-166(%rip), %xmm3 /* LCPI1_3(%rip) */ + MOVQ DI, SI + SUBQ R10, SI + QUAD $0xffffff44056ffac5 // vmovdqu $-188(%rip), %xmm0 /* LCPI1_0(%rip) */ + QUAD $0xffffff4c0d6ffac5 // vmovdqu $-180(%rip), %xmm1 /* LCPI1_1(%rip) */ + QUAD $0xffffff54156ffac5 // vmovdqu $-172(%rip), %xmm2 /* LCPI1_2(%rip) */ + QUAD $0xffffff5c1d6ffac5 // vmovdqu $-164(%rip), %xmm3 /* LCPI1_3(%rip) */ 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 $0xd4d7f9c5 // vpmovmskb %xmm4, %edx - CMPW DX, $-1 + LONG $0x6f79c1c4; BYTE $0x22 // vmovdqa (%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 $0xc4d7f9c5 // vpmovmskb %xmm4, %eax + CMPW AX, $-1 JNE LBB1_10 - ADDQ $16, AX + ADDQ $16, R10 + ADDQ $-16, DX ADDQ $-16, SI - CMPQ SI, $15 + CMPQ DX, $15 JA LBB1_9 - MOVQ CX, SI - MOVQ R8, AX LBB1_13: - TESTQ SI, SI - JE LBB1_22 - LEAQ 0(AX)(SI*1), R8 - INCQ AX - MOVQ $4294977024, DX + TESTQ DX, DX + JE LBB1_20 + LEAQ 0(R10)(DX*1), R8 + XORL AX, AX + MOVQ $4294977024, R9 LBB1_15: - MOVBLSX -1(AX), CX - CMPL CX, $32 + MOVBLSX 0(R10)(AX*1), SI + CMPL SI, $32 JA LBB1_17 - BTQ CX, DX + BTQ SI, R9 JAE LBB1_17 - DECQ SI - INCQ AX - TESTQ SI, SI + ADDQ $1, AX + CMPQ DX, AX JNE LBB1_15 - MOVQ R8, AX - JMP LBB1_22 + MOVQ R8, R10 + +LBB1_20: + SUBQ DI, R10 + +LBB1_21: + MOVQ R10, AX + +LBB1_22: + BYTE $0x5d // popq %rbp + RET LBB1_10: - MOVWLZX DX, CX - SUBQ DI, AX - NOTL CX - BSFL CX, CX - ADDQ CX, AX + MOVWLZX AX, AX + NOTL AX + BSFL AX, AX + SUBQ SI, AX BYTE $0x5d // popq %rbp RET -LBB1_5: - ADDQ DX, AX - -LBB1_22: - SUBQ DI, AX - BYTE $0x5d // popq %rbp - RET - LBB1_17: - NOTQ DI - ADDQ DI, AX - BYTE $0x5d // popq %rbp - RET + SUBQ DI, R10 + ADDQ AX, R10 + JMP LBB1_21 LCPI2_0: QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' @@ -234,585 +217,570 @@ _f64toa: WORD $0x5541 // pushq %r13 WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx - SUBQ $40, SP - MOVQ DI, R13 + SUBQ $56, SP + MOVQ DI, R12 LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax XORL R9, R9 TESTQ AX, AX - JS LBB2_108 + JS LBB2_1 TESTQ AX, AX - JE LBB2_109 + JE LBB2_3 -LBB2_2: +LBB2_4: MOVQ AX, DX SHRQ $52, DX XORL BX, BX CMPL DX, $2047 - JE LBB2_107 + JE LBB2_105 MOVQ $4503599627370495, DI ANDQ DI, AX - INCQ DI + ADDQ $1, DI ORQ AX, DI LEAL -1023(DX), CX CMPL CX, $52 MOVL R9, -44(BP) - MOVQ R13, -64(BP) - JA LBB2_5 + MOVQ R12, -56(BP) + JA LBB2_8 MOVL $1075, CX SUBQ DX, CX MOVQ $-1, SI SHLQ CX, SI NOTQ SI TESTQ SI, DI - JE LBB2_14 + JE LBB2_7 -LBB2_5: +LBB2_8: TESTL DX, DX LONG $0xf8440f48 // cmoveq %rax, %rdi LEAL -1077(DX), CX - MOVL $-1076, R11 - LONG $0xd9450f44 // cmovnel %ecx, %r11d - MOVQ DI, -72(BP) - LEAQ 0(DI*4), R8 + MOVL $-1076, BX + WORD $0x450f; BYTE $0xd9 // cmovnel %ecx, %ebx + MOVQ DI, -64(BP) + LEAQ 0(DI*4), R10 TESTQ AX, AX SETNE AX CMPL DX, $2 SETCS R13 ORB AX, R13 - MOVBLZX R13, R9 - TESTL R11, R11 - JS LBB2_12 - LONG $0x41e36945; WORD $0x0134; BYTE $0x00 // imull $78913, %r11d, %r12d - SHRL $18, R12 + MOVBLZX R13, R15 + TESTL BX, BX + JS LBB2_22 + LONG $0x41eb6944; WORD $0x0134; BYTE $0x00 // imull $78913, %ebx, %r13d + SHRL $18, R13 XORL AX, AX - CMPL R11, $3 - SETGT AX - SUBL AX, R12 - LONG $0x4fdc6941; WORD $0x1293; BYTE $0x00 // imull $1217359, %r12d, %ebx - MOVQ R12, AX + CMPL BX, $4 + SETGE AX + SUBL AX, R13 + LONG $0x4ff56941; WORD $0x1293; BYTE $0x00 // imull $1217359, %r13d, %esi + MOVQ R13, AX SHLQ $4, AX - LONG $0x5d0d8d48; WORD $0x007f; BYTE $0x00 // leaq $32605(%rip), %rcx /* _DOUBLE_POW5_INV_SPLIT(%rip) */ - MOVQ R8, DI - ORQ $2, DI - MOVQ 0(AX)(CX*1), R10 + LONG $0x490d8d48; WORD $0x0080; BYTE $0x00 // leaq $32841(%rip), %rcx /* _DOUBLE_POW5_INV_SPLIT(%rip) */ + MOVQ R10, R12 + ORQ $2, R12 + MOVQ 0(AX)(CX*1), R11 MOVQ 8(AX)(CX*1), R14 - MOVQ R10, AX - MULQ DI + MOVQ R11, AX + MULQ R12 MOVQ DX, CX MOVQ R14, AX - MOVQ R14, -56(BP) - MULQ DI - MOVQ AX, R13 - MOVQ DX, SI - SHRL $19, BX - ADDQ CX, R13 - ADCQ $0, SI - MOVL R12, CX - SUBL R11, CX - ADDL BX, CX + MULQ R12 + MOVQ AX, R8 + MOVQ DX, DI + SHRL $19, SI + ADDQ CX, R8 + ADCQ $0, DI + MOVL R13, CX + SUBL BX, CX + ADDL SI, CX ADDB $61, CX - LONG $0xf5ad0f49 // shrdq %cl, %rsi, %r13 - SHRQ CX, SI - NOTQ R9 - ADDQ R8, R9 - MOVQ R10, AX - MULQ R9 - MOVQ DX, R15 + LONG $0xf8ad0f49 // shrdq %cl, %rdi, %r8 + SHRQ CX, DI + NOTQ R15 + ADDQ R10, R15 + MOVQ R11, AX + MULQ R15 + MOVQ DX, BX MOVQ R14, AX - MULQ R9 - MOVQ DX, R14 - MOVQ AX, BX - ADDQ R15, BX - ADCQ $0, R14 - LONG $0xf3ad0f4c // shrdq %cl, %r14, %rbx - SHRQ CX, R14 - MOVQ R10, AX - MULQ R8 + MULQ R15 + MOVQ DX, R9 + MOVQ AX, SI + ADDQ BX, SI + ADCQ $0, R9 + LONG $0xcead0f4c // shrdq %cl, %r9, %rsi + SHRQ CX, R9 + MOVQ R11, AX + MULQ R10 MOVQ DX, R11 - MOVQ -56(BP), AX - MULQ R8 - MOVQ DX, R10 + MOVQ R14, AX + MULQ R10 + MOVQ DX, R14 ADDQ R11, AX - ADCQ $0, R10 - LONG $0xd0ad0f4c // shrdq %cl, %r10, %rax - SHRQ CX, R10 + ADCQ $0, R14 + LONG $0xf0ad0f4c // shrdq %cl, %r14, %rax + SHRQ CX, R14 TESTB $64, CX - LONG $0xf5440f49 // cmoveq %r13, %rsi - LONG $0xf3440f4c // cmoveq %rbx, %r14 - LONG $0xd0440f4c // cmoveq %rax, %r10 - CMPL R12, $21 - JA LBB2_23 + LONG $0xf8440f49 // cmoveq %r8, %rdi + LONG $0xce440f4c // cmoveq %rsi, %r9 + LONG $0xf0440f4c // cmoveq %rax, %r14 + CMPL R13, $21 + JA LBB2_10 MOVQ $-3689348814741910323, AX MOVQ $3689348814741910323, CX - MOVQ R8, DX + MOVQ R10, DX IMULQ AX, DX CMPQ DX, CX - JBE LBB2_17 - TESTB $1, -72(BP) - JNE LBB2_20 + JBE LBB2_12 + TESTB $1, -64(BP) + JNE LBB2_16 MOVL $-1, DX -LBB2_10: - IMULQ AX, R9 - INCL DX - CMPQ R9, CX - JBE LBB2_10 - CMPL DX, R12 - SETCC R13 +LBB2_20: + IMULQ AX, R15 + ADDL $1, DX + CMPQ R15, CX + JBE LBB2_20 + CMPL DX, R13 + SETCC R11 XORL R15, R15 - TESTB R15, R15 - JE LBB2_26 - JMP LBB2_29 + TESTB R11, R11 + JE LBB2_29 + JMP LBB2_30 -LBB2_12: - LONG $0x05e36945; WORD $0xf4d1; BYTE $0xff // imull $-732923, %r11d, %r12d - SHRL $20, R12 +LBB2_22: + LONG $0x05c36944; WORD $0xf4d1; BYTE $0xff // imull $-732923, %ebx, %r8d + SHRL $20, R8 XORL AX, AX - CMPL R11, $-1 + CMPL BX, $-1 SETNE AX - SUBL AX, R12 - ADDL R12, R11 - MOVL R11, AX + SUBL AX, R8 + ADDL R8, BX + MOVL BX, AX NEGL AX - LONG $0xb1db6941; WORD $0xed6c; BYTE $0xff // imull $-1217359, %r11d, %ebx - SHRL $19, BX - MOVLQSX AX, SI - SHLQ $4, SI - LONG $0x88158d4c; WORD $0x0093; BYTE $0x00 // leaq $37768(%rip), %r10 /* _DOUBLE_POW5_SPLIT(%rip) */ - MOVQ R8, DI - ORQ $2, DI - MOVQ 0(SI)(R10*1), R14 - MOVQ R14, AX - MOVQ R14, -56(BP) - MULQ DI - MOVQ DX, CX - MOVQ 8(SI)(R10*1), R10 - MOVQ R10, AX - MULQ DI - MOVQ DX, DI - MOVQ AX, SI - ADDQ CX, SI - ADCQ $0, DI - MOVL R12, CX - SUBL BX, CX - ADDB $60, CX - LONG $0xfead0f48 // shrdq %cl, %rdi, %rsi - SHRQ CX, DI - NOTQ R9 - ADDQ R8, R9 - MOVQ R14, AX - MULQ R9 - MOVQ DX, R15 - MOVQ R10, AX - MULQ R9 + LONG $0x6cb1f369; WORD $0xffed // imull $-1217359, %ebx, %esi + SHRL $19, SI + MOVLQSX AX, DI + SHLQ $4, DI + LONG $0x7c1d8d4c; WORD $0x0094; BYTE $0x00 // leaq $38012(%rip), %r11 /* _DOUBLE_POW5_SPLIT(%rip) */ + MOVQ R10, CX + ORQ $2, CX + MOVQ 0(DI)(R11*1), R9 + MOVQ R9, AX + MOVQ R9, -80(BP) + MULQ CX MOVQ DX, R14 - MOVQ AX, BX - ADDQ R15, BX - ADCQ $0, R14 - LONG $0xf3ad0f4c // shrdq %cl, %r14, %rbx - SHRQ CX, R14 - MOVQ -56(BP), AX - MULQ R8 + MOVQ 8(DI)(R11*1), AX + MOVQ AX, -88(BP) + MULQ CX + MOVQ DX, DI + MOVQ AX, R11 + ADDQ R14, R11 + ADCQ $0, DI + MOVL R8, CX + SUBL SI, CX + ADDB $60, CX + LONG $0xfbad0f49 // shrdq %cl, %rdi, %r11 + SHRQ CX, DI + NOTQ R15 + ADDQ R10, R15 + MOVQ R9, AX + MULQ R15 + MOVQ DX, -72(BP) + MOVQ -88(BP), R14 + MOVQ R14, AX + MULQ R15 + MOVQ DX, R9 + MOVQ AX, SI + ADDQ -72(BP), SI + ADCQ $0, R9 + LONG $0xcead0f4c // shrdq %cl, %r9, %rsi + SHRQ CX, R9 + MOVQ -80(BP), AX + MULQ R10 MOVQ DX, R15 - MOVQ R10, AX - MULQ R8 - MOVQ DX, R10 + MOVQ R14, AX + MULQ R10 + MOVQ DX, R14 ADDQ R15, AX - ADCQ $0, R10 - LONG $0xd0ad0f4c // shrdq %cl, %r10, %rax - SHRQ CX, R10 + ADCQ $0, R14 + LONG $0xf0ad0f4c // shrdq %cl, %r14, %rax + SHRQ CX, R14 TESTB $64, CX - LONG $0xfe440f48 // cmoveq %rsi, %rdi - MOVQ DI, SI - LONG $0xf3440f4c // cmoveq %rbx, %r14 - LONG $0xd0440f4c // cmoveq %rax, %r10 - CMPL R12, $1 - JA LBB2_15 - MOVQ -72(BP), AX + LONG $0xfb440f49 // cmoveq %r11, %rdi + LONG $0xce440f4c // cmoveq %rsi, %r9 + LONG $0xf0440f4c // cmoveq %rax, %r14 + CMPL R8, $1 + JA LBB2_24 + MOVQ -64(BP), AX ANDL $1, AX TESTQ AX, AX - SETEQ CX - ANDB CX, R13 - SUBQ AX, SI + SETEQ R11 + ANDB R13, R11 + SUBQ AX, DI MOVB $1, R15 - MOVL R11, AX - MOVQ AX, -56(BP) + MOVL BX, R13 JMP LBB2_30 -LBB2_14: +LBB2_7: MOVL CX, CX SHRQ CX, DI - XORL R12, R12 + XORL R13, R13 MOVL $1, R15 CMPQ DI, $10 - JAE LBB2_46 - JMP LBB2_61 - -LBB2_15: - CMPL R12, $62 - JA LBB2_24 - MOVQ $-1, AX - MOVL R12, CX - SHLQ CX, AX - NOTQ AX - TESTQ AX, R8 - SETEQ R15 - JMP LBB2_25 - -LBB2_17: - MOVL $-1, DX - -LBB2_18: - IMULQ AX, R8 - INCL DX - CMPQ R8, CX - JBE LBB2_18 - CMPL DX, R12 - SETCC R15 - XORL R13, R13 - TESTB R15, R15 - JE LBB2_26 - JMP LBB2_29 - -LBB2_20: - MOVL $-1, DX - -LBB2_21: - IMULQ AX, DI - INCL DX - CMPQ DI, CX - JBE LBB2_21 - XORL AX, AX - CMPL DX, R12 - SETCC AX - SUBQ AX, SI - -LBB2_23: - XORL R15, R15 - XORL R13, R13 - TESTB R15, R15 - JE LBB2_26 - JMP LBB2_29 + JAE LBB2_52 + JMP LBB2_67 LBB2_24: - XORL R15, R15 + CMPL R8, $62 + JA LBB2_25 + MOVQ $-1, AX + MOVL R8, CX + SHLQ CX, AX + NOTQ AX + TESTQ AX, R10 + SETEQ R15 + JMP LBB2_27 + +LBB2_12: + MOVL $-1, DX + +LBB2_13: + IMULQ AX, R10 + ADDL $1, DX + CMPQ R10, CX + JBE LBB2_13 + CMPL DX, R13 + SETCC R15 + XORL R11, R11 + TESTB R11, R11 + JE LBB2_29 + JMP LBB2_30 + +LBB2_16: + MOVL $-1, DX + +LBB2_17: + IMULQ AX, R12 + ADDL $1, DX + CMPQ R12, CX + JBE LBB2_17 + CMPL DX, R13 + ADCQ $-1, DI + +LBB2_10: + XORL R15, R15 + XORL R11, R11 + TESTB R11, R11 + JE LBB2_29 + JMP LBB2_30 LBB2_25: - XORL R13, R13 - MOVL R11, R12 - TESTB R15, R15 - JNE LBB2_29 + XORL R15, R15 -LBB2_26: - TESTB R13, R13 - JNE LBB2_29 - MOVQ SI, BX - SHRQ $2, SI - MOVQ $2951479051793528259, DI - MOVQ SI, AX - MULQ DI - MOVQ DX, CX - SHRQ $2, CX - MOVQ R14, AX +LBB2_27: + XORL R11, R11 + MOVL BX, R13 + TESTB R11, R11 + JNE LBB2_30 + +LBB2_29: + TESTB R15, R15 + JNE LBB2_30 + MOVQ DI, AX SHRQ $2, AX + MOVQ DI, BX + MOVQ $2951479051793528259, DI MULQ DI MOVQ DX, SI + MOVQ R9, AX + SHRQ $2, AX + MULQ DI + MOVQ DX, CX SHRQ $2, SI - CMPQ CX, SI - JBE LBB2_39 - MOVQ R10, AX + SHRQ $2, CX + XORL R8, R8 + CMPQ SI, CX + JBE LBB2_44 + MOVQ R14, AX SHRQ $2, AX MULQ DI SHRQ $2, DX WORD $0xc26b; BYTE $0x9c // imull $-100, %edx, %eax - ADDL R10, AX - XORL DI, DI - CMPL AX, $49 - SETHI DI - MOVL $2, R11 - MOVQ SI, R14 - MOVQ CX, AX - MOVQ DX, R10 - MOVQ -64(BP), R13 - JMP LBB2_40 - -LBB2_29: - MOVQ R12, -56(BP) + ADDL R14, AX + CMPL AX, $50 + SETCC DI + MOVL $2, R8 + MOVQ DX, R14 + JMP LBB2_46 LBB2_30: - MOVQ $-3689348814741910323, BX - MOVQ SI, AX - MULQ BX - MOVQ DX, R12 - MOVQ R14, AX - MULQ BX - SHRQ $3, R12 + MOVQ $-3689348814741910323, R12 + MOVQ DI, AX + MULQ R12 + MOVQ DX, DI + MOVQ R9, AX + MULQ R12 + SHRQ $3, DI SHRQ $3, DX - XORL SI, SI - XORL R11, R11 - CMPQ R12, DX - JBE LBB2_37 XORL CX, CX + XORL R8, R8 + CMPQ DI, DX + JBE LBB2_31 + XORL BX, BX -LBB2_32: - MOVQ DX, R8 - LEAL 0(DX)(DX*1), DI - MOVQ R10, AX - MULQ BX - MOVQ DX, R9 - LEAL 0(DI)(DI*4), AX - SHRQ $3, R9 - LEAL 0(R9)(R9*1), DX - LEAL 0(DX)(DX*4), SI - NEGL SI - ADDB R10, SI - CMPL R14, AX +LBB2_33: + MOVQ DX, R10 + LEAL 0(DX)(DX*1), CX + MOVQ R14, AX + MULQ R12 + MOVQ DX, SI + LEAL 0(CX)(CX*4), AX + SHRQ $3, SI + LEAL 0(SI)(SI*1), CX + LEAL 0(CX)(CX*4), CX + NEGL CX + ADDB R14, CX + CMPL AX, R9 SETEQ AX - ANDB AX, R13 + ANDB AX, R11 + TESTB BX, BX + SETEQ AX + ANDB AX, R15 + ADDL $1, R8 + MOVQ DI, AX + MULQ R12 + MOVQ DX, DI + SHRQ $3, DI + MOVQ R10, AX + MULQ R12 + SHRQ $3, DX + MOVQ SI, R14 + MOVQ R10, R9 + MOVL CX, BX + CMPQ DI, DX + JA LBB2_33 + TESTB R11, R11 + JNE LBB2_36 + JMP LBB2_35 + +LBB2_31: + MOVQ R9, R10 + MOVQ R14, SI + TESTB R11, R11 + JE LBB2_35 + +LBB2_36: + MOVQ R10, AX + MULQ R12 + MOVQ DX, DI + SHRQ $3, DI + LEAL 0(DI)(DI*1), AX + LEAL 0(AX)(AX*4), AX + CMPL AX, R10 + JNE LBB2_35 + +LBB2_37: + MOVQ SI, AX + MULQ R12 + MOVQ DX, R9 + MOVQ DI, R10 + SHRQ $3, R9 + LEAL 0(R9)(R9*1), AX + LEAL 0(AX)(AX*4), BX + NEGL BX + ADDB SI, BX TESTB CX, CX SETEQ AX ANDB AX, R15 - INCL R11 - MOVQ R12, AX - MULQ BX - MOVQ DX, R12 - SHRQ $3, R12 - MOVQ R8, AX - MULQ BX - SHRQ $3, DX - MOVQ R9, R10 - MOVQ R8, R14 - MOVL SI, CX - CMPQ R12, DX - JA LBB2_32 - TESTB R13, R13 - JE LBB2_38 - -LBB2_34: - MOVQ R8, AX - MULQ BX - MOVQ DX, CX - SHRQ $3, CX - LEAL 0(CX)(CX*1), AX - LEAL 0(AX)(AX*4), AX - CMPL R8, AX - MOVQ -72(BP), DI - MOVQ -56(BP), R12 - JNE LBB2_44 - MOVQ BX, R14 - -LBB2_36: - MOVQ R9, AX - MULQ R14 - MOVQ DX, R10 - MOVQ CX, R8 - SHRQ $3, R10 - LEAL 0(R10)(R10*1), AX - LEAL 0(AX)(AX*4), BX - NEGL BX - ADDB R9, BX - TESTB SI, SI - SETEQ AX - ANDB AX, R15 - INCL R11 - MOVQ CX, AX - MULQ R14 - MOVQ DX, CX - SHRQ $3, CX - LEAL 0(CX)(CX*1), AX + ADDL $1, R8 + MOVQ DI, AX + MULQ R12 + MOVQ DX, DI + SHRQ $3, DI + LEAL 0(DI)(DI*1), AX LEAL 0(AX)(AX*4), AX - MOVQ R10, R9 - MOVL BX, SI - CMPL R8, AX - JE LBB2_36 - JMP LBB2_45 + MOVQ R9, SI + MOVL BX, CX + CMPL AX, R10 + JE LBB2_37 + JMP LBB2_38 -LBB2_37: - MOVQ R14, R8 - MOVQ R10, R9 - TESTB R13, R13 - JNE LBB2_34 +LBB2_35: + MOVL CX, BX + MOVQ SI, R9 LBB2_38: - MOVL SI, BX - MOVQ R9, R10 - MOVQ -72(BP), DI - MOVQ -56(BP), R12 - JMP LBB2_45 - -LBB2_39: - XORL R11, R11 - XORL DI, DI - MOVQ -64(BP), R13 - MOVQ BX, AX - -LBB2_40: - MOVQ $-3689348814741910323, BX - MULQ BX - MOVQ DX, CX - SHRQ $3, CX - MOVQ R14, AX - MULQ BX - SHRQ $3, DX - CMPQ CX, DX - JBE LBB2_43 + TESTB R15, R15 + SETEQ CX + CMPB BX, $5 + SETNE AX + CMPQ R9, R10 + MOVQ -56(BP), R12 + JNE LBB2_41 + MOVL $1, DI + TESTB $1, -64(BP) + JNE LBB2_42 + TESTB R11, R11 + JE LBB2_42 LBB2_41: - MOVQ R10, SI - MOVQ DX, R14 - MOVQ R10, AX - MULQ BX - MOVQ DX, R10 - SHRQ $3, R10 - INCL R11 - MOVQ CX, AX - MULQ BX - MOVQ DX, CX - SHRQ $3, CX - MOVQ R14, AX - MULQ BX - SHRQ $3, DX - CMPQ CX, DX - JA LBB2_41 - LEAL 0(R10)(R10*1), AX - LEAL 0(AX)(AX*4), AX - SUBL AX, SI - XORL DI, DI - CMPL SI, $4 - SETHI DI + MOVL R9, DX + ANDB $1, DX + ORB DX, CX + ORB CX, AX + CMPB BX, $5 + SETCC CX + ANDB AX, CX + MOVBLZX CX, DI -LBB2_43: - XORL AX, AX - CMPQ R10, R14 - SETEQ AX - ORQ DI, AX - ADDQ R10, AX - MOVQ AX, DI - ADDL R11, R12 - MOVL $1, R15 - CMPQ DI, $10 - JAE LBB2_46 - JMP LBB2_61 +LBB2_42: + ADDQ R9, DI + JMP LBB2_50 LBB2_44: - MOVL SI, BX - MOVQ R9, R10 - -LBB2_45: - TESTB R13, R13 - SETEQ SI - TESTB R15, R15 - SETNE AX - CMPB BX, $5 - SETEQ DX - TESTB $1, R10 - SETEQ CX - ANDB AX, CX - ANDB DX, CX - CMPQ R10, R8 - SETEQ DX - ORB SI, DI - CMPB BX, $4 - SETHI AX - XORB CX, AX - ANDB DX, DI - ORB AX, DI - MOVBLZX DI, DI - ADDQ R10, DI - MOVQ -64(BP), R13 - ADDL R11, R12 - MOVL $1, R15 - CMPQ DI, $10 - JB LBB2_61 + XORL DI, DI + MOVQ R9, CX + MOVQ BX, SI LBB2_46: + MOVQ -56(BP), R12 + MOVQ $-3689348814741910323, R9 + MOVQ SI, AX + MULQ R9 + MOVQ DX, SI + SHRQ $3, SI + MOVQ CX, AX + MULQ R9 + SHRQ $3, DX + CMPQ SI, DX + JBE LBB2_49 + +LBB2_47: + MOVQ R14, DI + MOVQ DX, CX + MOVQ R14, AX + MULQ R9 + MOVQ DX, R14 + SHRQ $3, R14 + ADDL $1, R8 + MOVQ SI, AX + MULQ R9 + MOVQ DX, SI + SHRQ $3, SI + MOVQ CX, AX + MULQ R9 + SHRQ $3, DX + CMPQ SI, DX + JA LBB2_47 + LEAL 0(R14)(R14*1), AX + LEAL 0(AX)(AX*4), AX + SUBL AX, DI + CMPL DI, $5 + SETCC DI + +LBB2_49: + CMPQ R14, CX + SETEQ AX + TESTB DI, DI + SETNE CX + ORB AX, CX + MOVBLZX CX, DI + ADDQ R14, DI + +LBB2_50: + ADDL R8, R13 + MOVL $1, R15 + CMPQ DI, $10 + JB LBB2_67 + +LBB2_52: MOVL $2, R15 CMPQ DI, $100 - JB LBB2_61 + JB LBB2_67 MOVL $3, R15 CMPQ DI, $1000 - JB LBB2_61 + JB LBB2_67 MOVL $4, R15 CMPQ DI, $10000 - JB LBB2_61 + JB LBB2_67 MOVL $5, R15 CMPQ DI, $100000 - JB LBB2_61 + JB LBB2_67 MOVL $6, R15 CMPQ DI, $1000000 - JB LBB2_61 + JB LBB2_67 MOVL $7, R15 CMPQ DI, $10000000 - JB LBB2_61 + JB LBB2_67 MOVL $8, R15 CMPQ DI, $100000000 - JB LBB2_61 + JB LBB2_67 MOVL $9, R15 CMPQ DI, $1000000000 - JB LBB2_61 + JB LBB2_67 MOVQ $8589934464, AX ADDQ $1410065536, AX MOVL $10, R15 CMPQ DI, AX - JB LBB2_61 + JB LBB2_67 MOVQ DI, AX SHRQ $11, AX MOVL $11, R15 CMPQ AX, $48828125 - JB LBB2_61 + JB LBB2_67 MOVQ DI, AX SHRQ $12, AX MOVL $12, R15 CMPQ AX, $244140625 - JB LBB2_61 + JB LBB2_67 MOVQ DI, AX SHRQ $13, AX MOVL $13, R15 CMPQ AX, $1220703125 - JB LBB2_61 + JB LBB2_67 MOVL $14, R15 MOVQ $100000000000000, AX CMPQ DI, AX - JB LBB2_61 + JB LBB2_67 MOVL $15, R15 MOVQ $1000000000000000, AX CMPQ DI, AX - JB LBB2_61 + JB LBB2_67 MOVQ $10000000000000000, AX CMPQ DI, AX MOVL $17, R15 SBBL $0, R15 -LBB2_61: - LEAL 0(R15)(R12*1), R14 - LEAL 5(R15)(R12*1), AX +LBB2_67: + LEAL 0(R15)(R13*1), R14 + LEAL 0(R15)(R13*1), AX + ADDL $5, AX CMPL AX, $27 - JB LBB2_67 - LEAQ 1(R13), BX + JB LBB2_78 + LEAQ 1(R12), BX MOVQ BX, SI MOVL R15, DX - LONG $0x0048efe8; BYTE $0x00 // callq _print_mantissa - MOVB 1(R13), AX - MOVB AX, 0(R13) + LONG $0x0049d7e8; BYTE $0x00 // callq _print_mantissa + MOVB 1(R12), AX + MOVB AX, 0(R12) MOVL $1, AX CMPL R15, $2 - JB LBB2_64 + JB LBB2_70 MOVB $46, 0(BX) - INCL R15 + ADDL $1, R15 MOVL R15, AX -LBB2_64: +LBB2_70: MOVL AX, BX - MOVB $101, 0(R13)(BX*1) - INCQ BX + MOVB $101, 0(R12)(BX*1) + ADDQ $1, BX TESTL R14, R14 - JLE LBB2_69 - DECL R14 + JLE LBB2_72 + ADDL $-1, R14 MOVL -44(BP), R9 CMPL R14, $100 - JL LBB2_70 + JL LBB2_75 -LBB2_66: +LBB2_74: MOVL R14, AX MOVL $3435973837, CX IMULQ AX, CX @@ -820,293 +788,230 @@ LBB2_66: LEAL 0(CX)(CX*1), AX LEAL 0(AX)(AX*4), AX SUBL AX, R14 - LONG $0x5a058d48; WORD $0x00a2; BYTE $0x00 // leaq $41562(%rip), %rax /* _Digits(%rip) */ + LONG $0x8c058d48; WORD $0x00a3; BYTE $0x00 // leaq $41868(%rip), %rax /* _Digits(%rip) */ MOVWLZX 0(AX)(CX*2), AX MOVL BX, CX - MOVW AX, 0(R13)(CX*1) + MOVW AX, 0(R12)(CX*1) ORB $48, R14 - MOVLQSX BX, AX - MOVB R14, 2(AX)(R13*1) + MOVB R14, 2(R12)(CX*1) ADDL $3, BX - JMP LBB2_107 + JMP LBB2_105 -LBB2_67: +LBB2_78: TESTL R14, R14 - JLE LBB2_72 - MOVL R12, R13 - SARL $31, R13 - ANDL R14, R13 + JLE LBB2_82 + MOVL R13, R12 + SARL $31, R12 + ANDL R14, R12 XORL BX, BX - TESTL R12, R12 - LONG $0xe3480f44 // cmovsl %ebx, %r12d - JMP LBB2_74 + TESTL R13, R13 + LONG $0xeb480f44 // cmovsl %ebx, %r13d + JMP LBB2_80 -LBB2_69: +LBB2_72: ADDL $2, AX - MOVB $45, 0(R13)(BX*1) + MOVB $45, 0(R12)(BX*1) MOVL $1, CX SUBL R14, CX MOVL CX, R14 MOVL AX, BX MOVL -44(BP), R9 CMPL R14, $100 - JGE LBB2_66 + JGE LBB2_74 -LBB2_70: +LBB2_75: CMPL R14, $10 - JL LBB2_85 + JL LBB2_77 MOVLQSX R14, AX - LONG $0xec0d8d48; WORD $0x00a1; BYTE $0x00 // leaq $41452(%rip), %rcx /* _Digits(%rip) */ + LONG $0x230d8d48; WORD $0x00a3; BYTE $0x00 // leaq $41763(%rip), %rcx /* _Digits(%rip) */ MOVWLZX 0(CX)(AX*2), AX MOVL BX, CX - MOVW AX, 0(R13)(CX*1) + MOVW AX, 0(R12)(CX*1) ADDL $2, BX - JMP LBB2_107 + JMP LBB2_105 -LBB2_72: - MOVW $11824, 0(R13) +LBB2_82: + MOVW $11824, 0(R12) TESTL R14, R14 - JS LBB2_86 - XORL R13, R13 - MOVL $2, BX + JS LBB2_84 XORL R12, R12 - -LBB2_74: - MOVL BX, SI - ADDQ -64(BP), SI - MOVL R15, DX - LONG $0x0047ebe8; BYTE $0x00 // callq _print_mantissa - TESTL R13, R13 - JE LBB2_78 - LEAL 0(R13)(BX*1), AX - CMPL R13, R15 - JGE LBB2_80 - LEAL 0(BX)(R15*1), CX - MOVL AX, AX - MOVQ -64(BP), R10 - -LBB2_77: - MOVBLZX -1(R10)(CX*1), DX - MOVB DX, 0(R10)(CX*1) - DECQ CX - CMPQ CX, AX - JG LBB2_77 - JMP LBB2_81 - -LBB2_78: - MOVQ -64(BP), R10 - ADDL R15, BX - TESTL R12, R12 - JNE LBB2_82 - JMP LBB2_106 + MOVL $2, BX + XORL R13, R13 LBB2_80: - MOVL AX, AX - MOVQ -64(BP), R10 + MOVL BX, SI + ADDQ -56(BP), SI + MOVL R15, DX + LONG $0x0048d6e8; BYTE $0x00 // callq _print_mantissa + TESTL R12, R12 + JE LBB2_81 + LEAL 0(R12)(BX*1), AX + CMPL R12, R15 + JGE LBB2_88 + LEAL 0(BX)(R15*1), CX + MOVL AX, AX + MOVQ -56(BP), R10 + +LBB2_90: + MOVBLZX -1(R10)(CX*1), DX + MOVB DX, 0(R10)(CX*1) + LEAQ -1(CX), DX + MOVQ DX, CX + CMPQ DX, AX + JG LBB2_90 + JMP LBB2_91 LBB2_81: + MOVQ -56(BP), R10 + ADDL R15, BX + TESTL R13, R13 + JNE LBB2_94 + +LBB2_93: + MOVL -44(BP), R9 + JMP LBB2_105 + +LBB2_88: + MOVL AX, AX + MOVQ -56(BP), R10 + +LBB2_91: MOVB $46, 0(R10)(AX*1) ORL $1, BX ADDL R15, BX - TESTL R12, R12 - JE LBB2_106 + TESTL R13, R13 + JE LBB2_93 -LBB2_82: +LBB2_94: MOVLQSX BX, BX - LEAL -1(R12), R8 + LEAL -1(R13), R8 XORL AX, AX CMPL R8, $127 MOVL -44(BP), R9 - JB LBB2_95 - INCQ R8 + JB LBB2_103 + ADDQ $1, R8 MOVQ R8, AX ANDQ $-128, AX - LEAQ -128(AX), DX - MOVQ DX, SI + LEAQ -128(AX), CX + MOVQ CX, SI SHRQ $7, SI - INCQ SI - MOVL SI, CX - ANDL $3, CX - CMPQ DX, $384 - JAE LBB2_89 - XORL SI, SI - JMP LBB2_91 + ADDQ $1, SI + MOVL SI, DX + ANDL $3, DX + CMPQ CX, $384 + JAE LBB2_97 + XORL DI, DI + JMP LBB2_99 -LBB2_85: +LBB2_77: ADDB $48, R14 MOVL BX, AX - INCL BX - MOVB R14, 0(R13)(AX*1) - JMP LBB2_107 + ADDL $1, BX + MOVB R14, 0(R12)(AX*1) + JMP LBB2_105 -LBB2_86: +LBB2_84: MOVL $2, BX SUBL R14, BX - LEAQ -2(BX), R8 MOVL $2, AX - CMPQ R8, $128 - JB LBB2_104 - MOVQ R8, AX - ANDQ $-128, AX - LEAQ -128(AX), DX - MOVQ DX, SI - SHRQ $7, SI - INCQ SI - MOVL SI, CX - ANDL $3, CX - CMPQ DX, $384 - JAE LBB2_97 - XORL SI, SI - JMP LBB2_99 -LBB2_89: - LEAQ 480(BX)(R10*1), DI - MOVQ CX, DX - SUBQ SI, DX - XORL SI, SI - QUAD $0xfffff66d056ffec5 // vmovdqu $-2451(%rip), %ymm0 /* LCPI2_0(%rip) */ - -LBB2_90: - QUAD $0xfffe2037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-480(%rdi,%rsi) - QUAD $0xfffe4037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-448(%rdi,%rsi) - QUAD $0xfffe6037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-416(%rdi,%rsi) - QUAD $0xfffe8037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-384(%rdi,%rsi) - QUAD $0xfffea037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-352(%rdi,%rsi) - QUAD $0xfffec037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-320(%rdi,%rsi) - QUAD $0xfffee037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-288(%rdi,%rsi) - QUAD $0xffff0037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-256(%rdi,%rsi) - QUAD $0xffff2037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-224(%rdi,%rsi) - QUAD $0xffff4037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-192(%rdi,%rsi) - QUAD $0xffff6037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-160(%rdi,%rsi) - LONG $0x447ffec5; WORD $0x8037 // vmovdqu %ymm0, $-128(%rdi,%rsi) - LONG $0x447ffec5; WORD $0xa037 // vmovdqu %ymm0, $-96(%rdi,%rsi) - LONG $0x447ffec5; WORD $0xc037 // vmovdqu %ymm0, $-64(%rdi,%rsi) - LONG $0x447ffec5; WORD $0xe037 // vmovdqu %ymm0, $-32(%rdi,%rsi) - LONG $0x047ffec5; BYTE $0x37 // vmovdqu %ymm0, (%rdi,%rsi) - ADDQ $512, SI - ADDQ $4, DX - JNE LBB2_90 - -LBB2_91: - TESTQ CX, CX - JE LBB2_94 - ADDQ BX, SI - LEAQ 96(R10)(SI*1), DX - NEGQ CX - QUAD $0xfffff5c4056ffec5 // vmovdqu $-2620(%rip), %ymm0 /* LCPI2_0(%rip) */ - -LBB2_93: - LONG $0x427ffec5; BYTE $0xa0 // vmovdqu %ymm0, $-96(%rdx) - LONG $0x427ffec5; BYTE $0xc0 // vmovdqu %ymm0, $-64(%rdx) - LONG $0x427ffec5; BYTE $0xe0 // vmovdqu %ymm0, $-32(%rdx) - LONG $0x027ffec5 // vmovdqu %ymm0, (%rdx) - SUBQ $-128, DX - INCQ CX - JNE LBB2_93 - -LBB2_94: - ADDQ AX, BX - CMPQ R8, AX - JE LBB2_107 - -LBB2_95: - SUBL AX, R12 - -LBB2_96: - MOVB $48, 0(R10)(BX*1) - INCQ BX - DECL R12 - JNE LBB2_96 - JMP LBB2_107 +LBB2_85: + MOVB $48, 0(R12)(AX*1) + ADDQ $1, AX + CMPQ BX, AX + JNE LBB2_85 + ADDQ BX, R12 + MOVQ R12, SI + MOVL R15, DX + LONG $0x0047fae8; BYTE $0x00 // callq _print_mantissa + ADDL BX, R15 + MOVL R15, BX + MOVL -44(BP), R9 + JMP LBB2_105 LBB2_97: - MOVQ CX, DX - SUBQ SI, DX - XORL SI, SI - QUAD $0xfffff577056ffec5 // vmovdqu $-2697(%rip), %ymm0 /* LCPI2_0(%rip) */ + LEAQ 0(BX)(R10*1), CX + ADDQ $480, CX + ANDQ $-4, SI + NEGQ SI + XORL DI, DI + QUAD $0xfffff6c8056ffec5 // vmovdqu $-2360(%rip), %ymm0 /* LCPI2_0(%rip) */ LBB2_98: - LONG $0x7f7ec1c4; WORD $0x3544; BYTE $0x02 // vmovdqu %ymm0, $2(%r13,%rsi) - LONG $0x7f7ec1c4; WORD $0x3544; BYTE $0x22 // vmovdqu %ymm0, $34(%r13,%rsi) - LONG $0x7f7ec1c4; WORD $0x3544; BYTE $0x42 // vmovdqu %ymm0, $66(%r13,%rsi) - LONG $0x7f7ec1c4; WORD $0x3544; BYTE $0x62 // vmovdqu %ymm0, $98(%r13,%rsi) - QUAD $0x008235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $130(%r13,%rsi) - QUAD $0x00a235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $162(%r13,%rsi) - QUAD $0x00c235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $194(%r13,%rsi) - QUAD $0x00e235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $226(%r13,%rsi) - QUAD $0x010235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $258(%r13,%rsi) - QUAD $0x012235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $290(%r13,%rsi) - QUAD $0x014235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $322(%r13,%rsi) - QUAD $0x016235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $354(%r13,%rsi) - QUAD $0x018235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $386(%r13,%rsi) - QUAD $0x01a235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $418(%r13,%rsi) - QUAD $0x01c235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $450(%r13,%rsi) - QUAD $0x01e235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $482(%r13,%rsi) - ADDQ $512, SI - ADDQ $4, DX + QUAD $0xfffe2039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-480(%rcx,%rdi) + QUAD $0xfffe4039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-448(%rcx,%rdi) + QUAD $0xfffe6039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-416(%rcx,%rdi) + QUAD $0xfffe8039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-384(%rcx,%rdi) + QUAD $0xfffea039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-352(%rcx,%rdi) + QUAD $0xfffec039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-320(%rcx,%rdi) + QUAD $0xfffee039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-288(%rcx,%rdi) + QUAD $0xffff0039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-256(%rcx,%rdi) + QUAD $0xffff2039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-224(%rcx,%rdi) + QUAD $0xffff4039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-192(%rcx,%rdi) + QUAD $0xffff6039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-160(%rcx,%rdi) + LONG $0x447ffec5; WORD $0x8039 // vmovdqu %ymm0, $-128(%rcx,%rdi) + LONG $0x447ffec5; WORD $0xa039 // vmovdqu %ymm0, $-96(%rcx,%rdi) + LONG $0x447ffec5; WORD $0xc039 // vmovdqu %ymm0, $-64(%rcx,%rdi) + LONG $0x447ffec5; WORD $0xe039 // vmovdqu %ymm0, $-32(%rcx,%rdi) + LONG $0x047ffec5; BYTE $0x39 // vmovdqu %ymm0, (%rcx,%rdi) + ADDQ $512, DI + ADDQ $4, SI JNE LBB2_98 LBB2_99: - TESTQ CX, CX + TESTQ DX, DX JE LBB2_102 - NEGQ CX - QUAD $0xfffff4c2056ffec5 // vmovdqu $-2878(%rip), %ymm0 /* LCPI2_0(%rip) */ + ADDQ BX, DI + LEAQ 0(R10)(DI*1), CX + ADDQ $96, CX + SHLQ $7, DX + XORL SI, SI + QUAD $0xfffff619056ffec5 // vmovdqu $-2535(%rip), %ymm0 /* LCPI2_0(%rip) */ LBB2_101: - MOVQ SI, DX - ORQ $2, DX - LONG $0x7f7ec1c4; WORD $0x1544; BYTE $0x00 // vmovdqu %ymm0, (%r13,%rdx) - LONG $0x7f7ec1c4; WORD $0x1544; BYTE $0x20 // vmovdqu %ymm0, $32(%r13,%rdx) - LONG $0x7f7ec1c4; WORD $0x1544; BYTE $0x40 // vmovdqu %ymm0, $64(%r13,%rdx) - LONG $0x7f7ec1c4; WORD $0x1544; BYTE $0x60 // vmovdqu %ymm0, $96(%r13,%rdx) + LONG $0x447ffec5; WORD $0xa031 // vmovdqu %ymm0, $-96(%rcx,%rsi) + LONG $0x447ffec5; WORD $0xc031 // vmovdqu %ymm0, $-64(%rcx,%rsi) + LONG $0x447ffec5; WORD $0xe031 // vmovdqu %ymm0, $-32(%rcx,%rsi) + LONG $0x047ffec5; BYTE $0x31 // vmovdqu %ymm0, (%rcx,%rsi) SUBQ $-128, SI - INCQ CX + CMPQ DX, SI JNE LBB2_101 LBB2_102: + ADDQ AX, BX CMPQ R8, AX JE LBB2_105 - ORQ $2, AX + +LBB2_103: + SUBL AX, R13 LBB2_104: - MOVB $48, 0(R13)(AX*1) - INCQ AX - CMPQ BX, AX + MOVB $48, 0(R10)(BX*1) + ADDQ $1, BX + ADDL $-1, R13 JNE LBB2_104 LBB2_105: - ADDQ BX, R13 - MOVQ R13, SI - MOVL R15, DX - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x0044d9e8; BYTE $0x00 // callq _print_mantissa - ADDL BX, R15 - MOVL R15, BX - -LBB2_106: - MOVL -44(BP), R9 - -LBB2_107: ADDL R9, BX - JMP LBB2_110 + JMP LBB2_106 -LBB2_108: +LBB2_1: MOVQ $9223372036854775807, CX ANDQ CX, AX - MOVB $45, 0(R13) - INCQ R13 + MOVB $45, 0(R12) + ADDQ $1, R12 MOVL $1, R9 TESTQ AX, AX - JNE LBB2_2 + JNE LBB2_4 -LBB2_109: - MOVB $48, 0(R13) - INCL R9 +LBB2_3: + MOVB $48, 0(R12) + ADDL $1, R9 MOVL R9, BX -LBB2_110: +LBB2_106: MOVL BX, AX - ADDQ $40, SP + ADDQ $56, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 WORD $0x5d41 // popq %r13 @@ -1125,10 +1030,10 @@ LBB3_1: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp MOVB $45, 0(DI) - INCQ DI + ADDQ $1, DI NEGQ SI - LONG $0x000044e8; BYTE $0x00 // callq _u64toa - INCL AX + LONG $0x000045e8; BYTE $0x00 // callq _u64toa + ADDL $1, AX BYTE $0x5d // popq %rbp RET @@ -1172,7 +1077,7 @@ _u64toa: ADDQ AX, AX CMPL SI, $1000 JB LBB4_3 - LONG $0xae0d8d48; WORD $0x009d; BYTE $0x00 // leaq $40366(%rip), %rcx /* _Digits(%rip) */ + LONG $0x0e0d8d48; WORD $0x00a0; BYTE $0x00 // leaq $40974(%rip), %rcx /* _Digits(%rip) */ MOVB 0(DX)(CX*1), CX MOVB CX, 0(DI) MOVL $1, CX @@ -1186,26 +1091,26 @@ LBB4_3: LBB4_4: MOVWLZX DX, DX ORQ $1, DX - LONG $0x8d358d48; WORD $0x009d; BYTE $0x00 // leaq $40333(%rip), %rsi /* _Digits(%rip) */ + LONG $0xed358d48; WORD $0x009f; BYTE $0x00 // leaq $40941(%rip), %rsi /* _Digits(%rip) */ MOVB 0(DX)(SI*1), DX MOVL CX, SI - INCL CX + ADDL $1, CX MOVB DX, 0(DI)(SI*1) LBB4_6: - LONG $0x7c158d48; WORD $0x009d; BYTE $0x00 // leaq $40316(%rip), %rdx /* _Digits(%rip) */ + LONG $0xdb158d48; WORD $0x009f; BYTE $0x00 // leaq $40923(%rip), %rdx /* _Digits(%rip) */ MOVB 0(AX)(DX*1), DX MOVL CX, SI - INCL CX + ADDL $1, CX MOVB DX, 0(DI)(SI*1) LBB4_7: MOVWLZX AX, AX ORQ $1, AX - LONG $0x64158d48; WORD $0x009d; BYTE $0x00 // leaq $40292(%rip), %rdx /* _Digits(%rip) */ + LONG $0xc2158d48; WORD $0x009f; BYTE $0x00 // leaq $40898(%rip), %rdx /* _Digits(%rip) */ MOVB 0(AX)(DX*1), AX MOVL CX, DX - INCL CX + ADDL $1, CX MOVB AX, 0(DI)(DX*1) MOVL CX, AX BYTE $0x5d // popq %rbp @@ -1249,7 +1154,7 @@ LBB4_8: ADDQ R11, R11 CMPL SI, $10000000 JB LBB4_11 - LONG $0xcd058d48; WORD $0x009c; BYTE $0x00 // leaq $40141(%rip), %rax /* _Digits(%rip) */ + LONG $0x2a058d48; WORD $0x009f; BYTE $0x00 // leaq $40746(%rip), %rax /* _Digits(%rip) */ MOVB 0(R10)(AX*1), AX MOVB AX, 0(DI) MOVL $1, CX @@ -1263,39 +1168,39 @@ LBB4_11: LBB4_12: MOVL R10, AX ORQ $1, AX - LONG $0xa8358d48; WORD $0x009c; BYTE $0x00 // leaq $40104(%rip), %rsi /* _Digits(%rip) */ + LONG $0x05358d48; WORD $0x009f; BYTE $0x00 // leaq $40709(%rip), %rsi /* _Digits(%rip) */ MOVB 0(AX)(SI*1), AX MOVL CX, SI - INCL CX + ADDL $1, CX MOVB AX, 0(DI)(SI*1) LBB4_14: - LONG $0x97058d48; WORD $0x009c; BYTE $0x00 // leaq $40087(%rip), %rax /* _Digits(%rip) */ + LONG $0xf3058d48; WORD $0x009e; BYTE $0x00 // leaq $40691(%rip), %rax /* _Digits(%rip) */ MOVB 0(R9)(AX*1), AX MOVL CX, SI - INCL CX + ADDL $1, CX MOVB AX, 0(DI)(SI*1) LBB4_15: MOVWLZX R9, AX ORQ $1, AX - LONG $0x7d358d48; WORD $0x009c; BYTE $0x00 // leaq $40061(%rip), %rsi /* _Digits(%rip) */ + LONG $0xd8358d48; WORD $0x009e; BYTE $0x00 // leaq $40664(%rip), %rsi /* _Digits(%rip) */ MOVB 0(AX)(SI*1), AX MOVL CX, DX - MOVB AX, 0(DX)(DI*1) + MOVB AX, 0(DI)(DX*1) MOVB 0(R8)(SI*1), AX - MOVB AX, 1(DX)(DI*1) + MOVB AX, 1(DI)(DX*1) MOVWLZX R8, AX ORQ $1, AX MOVB 0(AX)(SI*1), AX - MOVB AX, 2(DX)(DI*1) + MOVB AX, 2(DI)(DX*1) MOVB 0(R11)(SI*1), AX - MOVB AX, 3(DX)(DI*1) + MOVB AX, 3(DI)(DX*1) MOVWLZX R11, AX ORQ $1, AX MOVB 0(AX)(SI*1), AX ADDL $5, CX - MOVB AX, 4(DX)(DI*1) + MOVB AX, 4(DI)(DX*1) MOVL CX, AX BYTE $0x5d // popq %rbp RET @@ -1317,7 +1222,7 @@ LBB4_16: LONG $0xe100c269; WORD $0x05f5 // imull $100000000, %edx, %eax SUBL AX, SI LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - QUAD $0xfffffdcb0d6ffac5 // vmovdqu $-565(%rip), %xmm1 /* LCPI4_0(%rip) */ + QUAD $0xfffffdc60d6ffac5 // vmovdqu $-570(%rip), %xmm1 /* LCPI4_0(%rip) */ LONG $0xd1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm2 LONG $0xd273e9c5; BYTE $0x2d // vpsrlq $45, %xmm2, %xmm2 MOVL $10000, AX @@ -1328,11 +1233,11 @@ LBB4_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 /* LCPI4_1(%rip) */ + QUAD $0xfffffdc01512fbc5 // vmovddup $-576(%rip), %xmm2 /* LCPI4_1(%rip) */ LONG $0xc2e4f9c5 // vpmulhuw %xmm2, %xmm0, %xmm0 - QUAD $0xfffffdc12512fbc5 // vmovddup $-575(%rip), %xmm4 /* LCPI4_2(%rip) */ + QUAD $0xfffffdbc2512fbc5 // vmovddup $-580(%rip), %xmm4 /* LCPI4_2(%rip) */ LONG $0xc4e4f9c5 // vpmulhuw %xmm4, %xmm0, %xmm0 - QUAD $0xfffffd8d2d6ffac5 // vmovdqu $-627(%rip), %xmm5 /* LCPI4_3(%rip) */ + QUAD $0xfffffd882d6ffac5 // vmovdqu $-632(%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 @@ -1351,17 +1256,17 @@ LBB4_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 /* LCPI4_4(%rip) */ + QUAD $0xfffffd420dfcf9c5 // vpaddb $-702(%rip), %xmm0, %xmm1 /* LCPI4_4(%rip) */ LONG $0xd2efe9c5 // vpxor %xmm2, %xmm2, %xmm2 LONG $0xc274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm0 LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax + NOTL AX ORL $32768, AX - XORL $-32769, AX BSFL AX, AX MOVL $16, CX SUBL AX, CX SHLQ $4, AX - LONG $0xf2158d48; WORD $0x009b; BYTE $0x00 // leaq $39922(%rip), %rdx /* _VecShiftShuffles(%rip) */ + LONG $0x50158d48; WORD $0x009e; BYTE $0x00 // leaq $40528(%rip), %rdx /* _VecShiftShuffles(%rip) */ LONG $0x0071e2c4; WORD $0x1004 // vpshufb (%rax,%rdx), %xmm1, %xmm0 LONG $0x077ffac5 // vmovdqu %xmm0, (%rdi) MOVL CX, AX @@ -1384,16 +1289,14 @@ LBB4_18: JMP LBB4_25 LBB4_20: - CMPL DX, $99 - JA LBB4_22 - MOVL DX, AX - LONG $0xd50d8d48; WORD $0x009a; BYTE $0x00 // leaq $39637(%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 LBB4_25 + CMPL DX, $99 + JA LBB4_22 + MOVL DX, AX + LONG $0x330d8d48; WORD $0x009d; BYTE $0x00 // leaq $40243(%rip), %rcx /* _Digits(%rip) */ + MOVWLZX 0(CX)(AX*2), AX + MOVW AX, 0(DI) + MOVL $2, CX + JMP LBB4_25 LBB4_22: MOVL DX, AX @@ -1412,11 +1315,9 @@ LBB4_22: WORD $0xc96b; BYTE $0x64 // imull $100, %ecx, %ecx SUBL CX, AX MOVWLZX AX, AX - LONG $0x840d8d48; WORD $0x009a; BYTE $0x00 // leaq $39556(%rip), %rcx /* _Digits(%rip) */ - MOVB 0(CX)(AX*2), DX - MOVB 1(CX)(AX*2), AX - MOVB DX, 1(DI) - MOVB AX, 2(DI) + LONG $0xea0d8d48; WORD $0x009c; BYTE $0x00 // leaq $40170(%rip), %rcx /* _Digits(%rip) */ + MOVWLZX 0(CX)(AX*2), AX + MOVW AX, 1(DI) MOVL $3, CX JMP LBB4_25 @@ -1424,18 +1325,15 @@ LBB4_24: WORD $0xc86b; BYTE $0x64 // imull $100, %eax, %ecx SUBL CX, DX MOVWLZX AX, AX - LONG $0x61058d4c; WORD $0x009a; BYTE $0x00 // leaq $39521(%rip), %r8 /* _Digits(%rip) */ - MOVB 0(R8)(AX*2), CX - MOVB 1(R8)(AX*2), AX - MOVB CX, 0(DI) - MOVB AX, 1(DI) + LONG $0xcc0d8d48; WORD $0x009c; BYTE $0x00 // leaq $40140(%rip), %rcx /* _Digits(%rip) */ + MOVWLZX 0(CX)(AX*2), AX + MOVW AX, 0(DI) MOVWLZX DX, AX - MOVB 0(R8)(AX*2), CX + MOVB 0(CX)(AX*2), DX ADDQ AX, AX - MOVB CX, 2(DI) - ORL $1, AX + MOVB DX, 2(DI) MOVWLZX AX, AX - MOVB 0(AX)(R8*1), AX + MOVB 1(AX)(CX*1), AX MOVB AX, 3(DI) MOVL $4, CX @@ -1445,7 +1343,7 @@ LBB4_25: MULQ DX SHRQ $26, DX LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - QUAD $0xfffffbe60d6ffac5 // vmovdqu $-1050(%rip), %xmm1 /* LCPI4_0(%rip) */ + QUAD $0xfffffbfc0d6ffac5 // vmovdqu $-1028(%rip), %xmm1 /* LCPI4_0(%rip) */ LONG $0xd1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm2 LONG $0xd273e9c5; BYTE $0x2d // vpsrlq $45, %xmm2, %xmm2 MOVL $10000, AX @@ -1456,11 +1354,11 @@ LBB4_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 /* LCPI4_1(%rip) */ + QUAD $0xfffffbf61512fbc5 // vmovddup $-1034(%rip), %xmm2 /* LCPI4_1(%rip) */ LONG $0xc2e4f9c5 // vpmulhuw %xmm2, %xmm0, %xmm0 - QUAD $0xfffffbdc2512fbc5 // vmovddup $-1060(%rip), %xmm4 /* LCPI4_2(%rip) */ + QUAD $0xfffffbf22512fbc5 // vmovddup $-1038(%rip), %xmm4 /* LCPI4_2(%rip) */ LONG $0xc4e4f9c5 // vpmulhuw %xmm4, %xmm0, %xmm0 - QUAD $0xfffffba82d6ffac5 // vmovdqu $-1112(%rip), %xmm5 /* LCPI4_3(%rip) */ + QUAD $0xfffffbbe2d6ffac5 // vmovdqu $-1090(%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 @@ -1481,7 +1379,7 @@ LBB4_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 /* LCPI4_4(%rip) */ + QUAD $0xfffffb7005fcf9c5 // vpaddb $-1168(%rip), %xmm0, %xmm0 /* LCPI4_4(%rip) */ MOVL CX, AX LONG $0x047ffac5; BYTE $0x07 // vmovdqu %xmm0, (%rdi,%rax) ORL $16, CX @@ -1506,486 +1404,505 @@ _quote: WORD $0x5541 // pushq %r13 WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax + SUBQ $32, SP MOVQ CX, R11 - MOVQ DX, R12 - MOVQ SI, AX - MOVQ 0(CX), R14 + MOVQ DX, R15 + MOVQ 0(CX), R10 TESTB $1, R8 - LONG $0x5d0d8d48; WORD $0x009a; BYTE $0x00 // leaq $39517(%rip), %rcx /* __SingleQuoteTab(%rip) */ - LONG $0x56058d4c; WORD $0x00aa; BYTE $0x00 // leaq $43606(%rip), %r8 /* __DoubleQuoteTab(%rip) */ - LONG $0xc1440f4c // cmoveq %rcx, %r8 + MOVQ SI, AX + LONG $0xd00d8d48; WORD $0x009c; BYTE $0x00 // leaq $40144(%rip), %rcx /* __SingleQuoteTab(%rip) */ + LONG $0xc9258d4c; WORD $0x00ac; BYTE $0x00 // leaq $44233(%rip), %r12 /* __DoubleQuoteTab(%rip) */ + LONG $0xe1440f4c // cmoveq %rcx, %r12 LEAQ 0(SI*8), CX - CMPQ R14, CX - JGE LBB5_51 - MOVQ R12, R15 - MOVQ DI, R10 + CMPQ R10, CX + JGE LBB5_56 + MOVQ R15, R14 + MOVQ DI, R9 TESTQ AX, AX - JE LBB5_74 - QUAD $0xffffff78056ffac5 // vmovdqu $-136(%rip), %xmm0 /* LCPI5_0(%rip) */ - QUAD $0xffffff800d6ffac5 // vmovdqu $-128(%rip), %xmm1 /* LCPI5_1(%rip) */ - QUAD $0xffffff88156ffac5 // vmovdqu $-120(%rip), %xmm2 /* LCPI5_2(%rip) */ + JE LBB5_80 + MOVQ R11, -56(BP) + QUAD $0xffffff71056ffac5 // vmovdqu $-143(%rip), %xmm0 /* LCPI5_0(%rip) */ + QUAD $0xffffff790d6ffac5 // vmovdqu $-135(%rip), %xmm1 /* LCPI5_1(%rip) */ + QUAD $0xffffff81156ffac5 // vmovdqu $-127(%rip), %xmm2 /* LCPI5_2(%rip) */ LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 - MOVQ DI, R10 - MOVQ R12, R15 - MOVQ R12, -48(BP) + MOVQ DI, CX + MOVQ R15, -48(BP) + MOVQ R15, R14 + MOVQ R12, -64(BP) LBB5_3: - MOVQ R11, DX - CMPQ AX, $15 - SETGT R11 - MOVQ R14, R9 - MOVQ R15, R13 - MOVQ AX, SI - MOVQ R10, R12 - CMPQ R14, $16 - JL LBB5_9 + MOVQ CX, R9 CMPQ AX, $16 - JL LBB5_9 + SETGE BX MOVQ R10, R12 - MOVQ AX, SI - MOVQ R15, R13 - MOVQ R14, BX + MOVQ R14, R15 + MOVQ AX, R11 + MOVQ CX, R13 + JL LBB5_10 + CMPQ R10, $16 + JL LBB5_10 + XORL R15, R15 + MOVQ AX, CX + MOVQ R10, DX LBB5_6: - LONG $0x6f7ac1c4; WORD $0x2424 // vmovdqu (%r12), %xmm4 + LONG $0x6f7a81c4; WORD $0x3924 // vmovdqu (%r9,%r15), %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; WORD $0x0065 // vmovdqu %xmm4, (%r13) + LONG $0x7f7a81c4; WORD $0x3e24 // vmovdqu %xmm4, (%r14,%r15) LONG $0xe364d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm4 - LONG $0xe5dbd9c5 // vpand %xmm5, %xmm4, %xmm4 + LONG $0xe4dbd1c5 // vpand %xmm4, %xmm5, %xmm4 LONG $0xe4ebc9c5 // vpor %xmm4, %xmm6, %xmm4 - LONG $0xccd7f9c5 // vpmovmskb %xmm4, %ecx - TESTW CX, CX - JNE LBB5_19 - ADDQ $16, R12 - ADDQ $16, R13 - LEAQ -16(BX), R9 - CMPQ SI, $31 - SETGT R11 - CMPQ SI, $32 - LEAQ -16(SI), SI + LONG $0xf4d7f9c5 // vpmovmskb %xmm4, %esi + TESTL SI, SI + JNE LBB5_23 + LEAQ -16(CX), R11 + LEAQ -16(DX), R12 + ADDQ $16, R15 + CMPQ CX, $32 + SETGE BX JL LBB5_9 - CMPQ BX, $31 - MOVQ R9, BX + MOVQ R11, CX + CMPQ DX, $31 + MOVQ R12, DX JG LBB5_6 LBB5_9: - TESTB R11, R11 - JE LBB5_13 - LONG $0x6f7ac1c4; WORD $0x2424 // vmovdqu (%r12), %xmm4 + LEAQ 0(R9)(R15*1), R13 + ADDQ R14, R15 + +LBB5_10: + TESTB BX, BX + JE LBB5_14 + LONG $0x6f7ac1c4; WORD $0x0065 // vmovdqu (%r13), %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 $0xeddbc1c5 // vpand %xmm5, %xmm7, %xmm5 + LONG $0xefdbd1c5 // vpand %xmm7, %xmm5, %xmm5 LONG $0xedebc9c5 // vpor %xmm5, %xmm6, %xmm5 LONG $0xcdd7f9c5 // vpmovmskb %xmm5, %ecx ORL $65536, CX BSFL CX, R11 LONG $0x7ef9e1c4; BYTE $0xe1 // vmovq %xmm4, %rcx - CMPQ R9, R11 - JGE LBB5_20 - CMPQ R9, $8 - JB LBB5_23 - MOVQ CX, 0(R13) - LEAQ 8(R12), R11 - ADDQ $8, R13 - LEAQ -8(R9), SI - CMPQ SI, $4 - JAE LBB5_24 - JMP LBB5_25 + CMPQ R12, R11 + JGE LBB5_24 + CMPQ R12, $8 + JB LBB5_28 + MOVQ CX, 0(R15) + LEAQ 8(R13), R11 + ADDQ $8, R15 + LEAQ -8(R12), BX + CMPQ BX, $4 + JAE LBB5_29 + JMP LBB5_30 -LBB5_13: - TESTQ R9, R9 - MOVQ DX, R11 - JLE LBB5_18 - TESTQ SI, SI - JLE LBB5_18 +LBB5_14: + TESTQ R11, R11 + JLE LBB5_21 + TESTQ R12, R12 + JLE LBB5_21 + MOVQ R9, -72(BP) + XORL R9, R9 + XORL CX, CX -LBB5_15: - MOVBLZX 0(R12), BX +LBB5_17: + MOVBLZX 0(R13)(R9*1), SI + MOVQ SI, BX + SHLQ $4, BX + LONG $0x62158d48; WORD $0x009b; BYTE $0x00 // leaq $39778(%rip), %rdx /* __SingleQuoteTab(%rip) */ + CMPQ 0(BX)(DX*1), $0 + JNE LBB5_27 + LEAQ 0(R11)(CX*1), R8 + MOVB SI, 0(R15)(R9*1) + LEAQ -1(CX), BX + CMPQ R8, $2 + JL LBB5_20 + ADDQ R12, CX + ADDQ $1, R9 + CMPQ CX, $1 MOVQ BX, CX - SHLQ $4, CX - LONG $0xf4158d48; WORD $0x0098; BYTE $0x00 // leaq $39156(%rip), %rdx /* __SingleQuoteTab(%rip) */ - CMPQ 0(CX)(DX*1), $0 - JNE LBB5_22 - INCQ R12 - MOVB BX, 0(R13) - CMPQ SI, $2 - LEAQ -1(SI), SI - JL LBB5_18 - INCQ R13 - CMPQ R9, $1 - LEAQ -1(R9), R9 - JG LBB5_15 - -LBB5_18: - SUBQ R10, R12 - NEGQ SI - SBBQ R9, R9 - XORQ R12, R9 - JMP LBB5_36 - -LBB5_19: - MOVWLZX CX, CX - SUBQ R10, R12 - BSFL CX, R9 - ADDQ R12, R9 - JMP LBB5_35 + JG LBB5_17 LBB5_20: - CMPL R11, $8 - JB LBB5_29 - MOVQ CX, 0(R13) - LEAQ 8(R12), BX - ADDQ $8, R13 - LEAQ -8(R11), SI - CMPQ SI, $4 - JAE LBB5_30 - JMP LBB5_31 + SUBQ BX, R13 + ADDQ BX, R11 + MOVQ -72(BP), R9 -LBB5_22: - SUBQ R10, R12 - MOVQ R12, R9 - JMP LBB5_36 +LBB5_21: + TESTQ R11, R11 + MOVQ -64(BP), R12 + JE LBB5_26 + NOTQ R13 + ADDQ R9, R13 + JMP LBB5_41 LBB5_23: - MOVQ R12, R11 - MOVQ R9, SI - CMPQ SI, $4 - JB LBB5_25 + BSFW SI, CX + MOVWLZX CX, R13 + ADDQ R15, R13 + JMP LBB5_40 LBB5_24: - MOVL 0(R11), CX - MOVL CX, 0(R13) - ADDQ $4, R11 - ADDQ $4, R13 - ADDQ $-4, SI - -LBB5_25: - CMPQ SI, $2 - JB LBB5_26 - MOVWLZX 0(R11), CX - MOVW CX, 0(R13) - ADDQ $2, R11 - ADDQ $2, R13 - ADDQ $-2, SI - TESTQ SI, SI - JNE LBB5_27 - JMP LBB5_28 + CMPL R11, $8 + JB LBB5_34 + MOVQ CX, 0(R15) + LEAQ 8(R13), R12 + ADDQ $8, R15 + LEAQ -8(R11), BX + CMPQ BX, $4 + JAE LBB5_35 + JMP LBB5_36 LBB5_26: - TESTQ SI, SI - JE LBB5_28 + SUBQ R9, R13 + JMP LBB5_41 LBB5_27: - MOVB 0(R11), CX - MOVB CX, 0(R13) + MOVQ -72(BP), R9 + SUBQ R9, R13 + SUBQ CX, R13 + JMP LBB5_40 LBB5_28: - SUBQ R10, R9 - ADDQ R12, R9 - NOTQ R9 - JMP LBB5_35 + MOVQ R13, R11 + MOVQ R12, BX + CMPQ BX, $4 + JB LBB5_30 LBB5_29: - MOVQ R12, BX - MOVQ R11, SI - CMPQ SI, $4 - JB LBB5_31 + MOVL 0(R11), CX + MOVL CX, 0(R15) + ADDQ $4, R11 + ADDQ $4, R15 + ADDQ $-4, BX LBB5_30: - MOVL 0(BX), CX - MOVL CX, 0(R13) - ADDQ $4, BX - ADDQ $4, R13 - ADDQ $-4, SI + CMPQ BX, $2 + JB LBB5_31 + MOVWLZX 0(R11), CX + MOVW CX, 0(R15) + ADDQ $2, R11 + ADDQ $2, R15 + ADDQ $-2, BX + TESTQ BX, BX + JNE LBB5_32 + JMP LBB5_33 LBB5_31: - CMPQ SI, $2 - JB LBB5_32 - MOVWLZX 0(BX), CX - MOVW CX, 0(R13) - ADDQ $2, BX - ADDQ $2, R13 - ADDQ $-2, SI - TESTQ SI, SI - JNE LBB5_33 - JMP LBB5_34 + TESTQ BX, BX + JE LBB5_33 LBB5_32: - TESTQ SI, SI - JE LBB5_34 + MOVB 0(R11), CX + MOVB CX, 0(R15) LBB5_33: - MOVB 0(BX), CX - MOVB CX, 0(R13) + ADDQ R13, R12 + NOTQ R12 + ADDQ R9, R12 + MOVQ R12, R13 + JMP LBB5_40 LBB5_34: - SUBQ R10, R12 - ADDQ R11, R12 - MOVQ R12, R9 + MOVQ R13, R12 + MOVQ R11, BX + CMPQ BX, $4 + JB LBB5_36 LBB5_35: - MOVQ DX, R11 + MOVL 0(R12), CX + MOVL CX, 0(R15) + ADDQ $4, R12 + ADDQ $4, R15 + ADDQ $-4, BX LBB5_36: - TESTQ R9, R9 - MOVQ -48(BP), R12 - MOVQ $12884901889, R13 - JS LBB5_78 - ADDQ R9, R10 - ADDQ R9, R15 - CMPQ AX, R9 - JE LBB5_74 - SUBQ R9, R14 - SUBQ AX, R9 - JMP LBB5_40 - -LBB5_39: - INCQ R10 - ADDQ AX, R15 - INCQ R9 - JE LBB5_74 - -LBB5_40: - MOVBLZX 0(R10), CX - SHLQ $4, CX - MOVQ 0(R8)(CX*1), BX - TESTL BX, BX - JE LBB5_48 - MOVLQSX BX, AX - SUBQ AX, R14 - JL LBB5_75 - SHLQ $32, BX - LEAQ 8(R8)(CX*1), SI - CMPQ BX, R13 - JL LBB5_44 - MOVL 0(SI), SI - MOVL SI, 0(R15) - LEAQ 12(R8)(CX*1), SI - LEAQ 4(R15), BX - LEAQ -4(AX), CX - CMPQ CX, $2 - JGE LBB5_45 - JMP LBB5_46 - -LBB5_44: - MOVQ R15, BX - MOVQ AX, CX - CMPQ CX, $2 - JL LBB5_46 - -LBB5_45: - MOVWLZX 0(SI), DX - MOVW DX, 0(BX) - ADDQ $2, SI - ADDQ $2, BX - ADDQ $-2, CX - -LBB5_46: - TESTQ CX, CX - JLE LBB5_39 - MOVBLZX 0(SI), CX - MOVB CX, 0(BX) + CMPQ BX, $2 + JB LBB5_37 + MOVWLZX 0(R12), CX + MOVW CX, 0(R15) + ADDQ $2, R12 + ADDQ $2, R15 + ADDQ $-2, BX + TESTQ BX, BX + JNE LBB5_38 JMP LBB5_39 -LBB5_48: - MOVQ R9, AX - NEGQ AX - TESTQ R9, R9 - JNE LBB5_3 +LBB5_37: + TESTQ BX, BX + JE LBB5_39 -LBB5_74: - SUBQ R12, R15 - MOVQ R15, 0(R11) - SUBQ DI, R10 - JMP LBB5_76 +LBB5_38: + MOVB 0(R12), CX + MOVB CX, 0(R15) + +LBB5_39: + SUBQ R9, R13 + ADDQ R11, R13 + +LBB5_40: + MOVQ -64(BP), R12 + +LBB5_41: + MOVQ $12884901889, R11 + TESTQ R13, R13 + JS LBB5_83 + ADDQ R13, R14 + CMPQ AX, R13 + JE LBB5_79 + SUBQ R13, R10 + JMP LBB5_45 + +LBB5_44: + ADDQ SI, R14 + ADDQ $1, R13 + CMPQ AX, R13 + JE LBB5_79 + +LBB5_45: + MOVBLZX 0(R9)(R13*1), CX + SHLQ $4, CX + MOVQ 0(R12)(CX*1), DX + TESTL DX, DX + JE LBB5_53 + MOVLQSX DX, SI + SUBQ SI, R10 + JL LBB5_81 + SHLQ $32, DX + LEAQ 0(R12)(CX*1), BX + ADDQ $8, BX + CMPQ DX, R11 + JL LBB5_49 + MOVL 0(BX), DX + MOVL DX, 0(R14) + LEAQ 0(R12)(CX*1), BX + ADDQ $12, BX + LEAQ 4(R14), R8 + LEAQ -4(SI), CX + CMPQ CX, $2 + JGE LBB5_50 + JMP LBB5_51 + +LBB5_49: + MOVQ R14, R8 + MOVQ SI, CX + CMPQ CX, $2 + JL LBB5_51 + +LBB5_50: + MOVWLZX 0(BX), DX + MOVW DX, 0(R8) + ADDQ $2, BX + ADDQ $2, R8 + ADDQ $-2, CX LBB5_51: - LONG $0x060d8d4c; WORD $0x00b7; BYTE $0x00 // leaq $46854(%rip), %r9 /* __EscTab(%rip) */ - QUAD $0xfffffc4c056ffac5 // vmovdqu $-948(%rip), %xmm0 /* LCPI5_0(%rip) */ - QUAD $0xfffffc540d6ffac5 // vmovdqu $-940(%rip), %xmm1 /* LCPI5_1(%rip) */ - QUAD $0xfffffc5c156ffac5 // vmovdqu $-932(%rip), %xmm2 /* LCPI5_2(%rip) */ + TESTQ CX, CX + JLE LBB5_44 + MOVBLZX 0(BX), CX + MOVB CX, 0(R8) + JMP LBB5_44 + +LBB5_53: + LEAQ 0(R9)(R13*1), CX + SUBQ R13, AX + JNE LBB5_3 + +LBB5_79: + ADDQ R13, R9 + MOVQ -56(BP), R11 + MOVQ -48(BP), R15 + +LBB5_80: + SUBQ R15, R14 + MOVQ R14, 0(R11) + SUBQ DI, R9 + MOVQ R9, AX + JMP LBB5_82 + +LBB5_56: + LONG $0x3b0d8d4c; WORD $0x00b9; BYTE $0x00 // leaq $47419(%rip), %r9 /* __EscTab(%rip) */ + QUAD $0xfffffc0b056ffac5 // vmovdqu $-1013(%rip), %xmm0 /* LCPI5_0(%rip) */ + QUAD $0xfffffc130d6ffac5 // vmovdqu $-1005(%rip), %xmm1 /* LCPI5_1(%rip) */ + QUAD $0xfffffc1b156ffac5 // vmovdqu $-997(%rip), %xmm2 /* LCPI5_2(%rip) */ LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 - MOVQ R12, BX - MOVQ AX, R10 - -LBB5_52: - CMPQ R10, $16 - JL LBB5_57 - MOVL $16, CX - XORL SI, SI - -LBB5_54: - LONG $0x246ffac5; BYTE $0x37 // vmovdqu (%rdi,%rsi), %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 $0x247ffac5; BYTE $0x33 // vmovdqu %xmm4, (%rbx,%rsi) - LONG $0xe364d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm4 - LONG $0xe5dbd9c5 // vpand %xmm5, %xmm4, %xmm4 - LONG $0xe4ebc9c5 // vpor %xmm4, %xmm6, %xmm4 - LONG $0xd4d7f9c5 // vpmovmskb %xmm4, %edx - TESTW DX, DX - JNE LBB5_67 - ADDQ $16, SI - LEAQ -16(R10)(CX*1), DX - ADDQ $-16, CX - CMPQ DX, $31 - JG LBB5_54 - ADDQ SI, DI - SUBQ SI, R10 - ADDQ SI, BX + MOVQ R15, BX + MOVQ AX, SI LBB5_57: - CMPQ R10, $8 - JL LBB5_61 + CMPQ SI, $16 + JL LBB5_62 + MOVQ SI, R10 + NEGQ R10 + ADDQ $16, SI + +LBB5_59: + LONG $0x276ffac5 // vmovdqu (%rdi), %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 $0x237ffac5 // vmovdqu %xmm4, (%rbx) + LONG $0xe364d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm4 + LONG $0xe4dbd1c5 // vpand %xmm4, %xmm5, %xmm4 + LONG $0xe4ebc9c5 // vpor %xmm4, %xmm6, %xmm4 + LONG $0xccd7f9c5 // vpmovmskb %xmm4, %ecx + TESTL CX, CX + JNE LBB5_72 + ADDQ $16, DI + ADDQ $16, BX + ADDQ $16, R10 + ADDQ $-16, SI + CMPQ SI, $31 + JG LBB5_59 + NEGQ R10 + MOVQ R10, SI + +LBB5_62: + CMPQ SI, $8 + JL LBB5_66 MOVBLZX 0(DI), CX - MOVBLZX 0(CX)(R9*1), CX MOVBLZX 1(DI), DX - MOVBLZX 0(DX)(R9*1), DX - ADDL DX, DX - ORL CX, DX + MOVB 0(DX)(R9*1), DX + ADDB DX, DX + ORB 0(CX)(R9*1), DX MOVBLZX 2(DI), CX - MOVBLZX 0(CX)(R9*1), SI - SHLL $2, SI - MOVBLZX 3(DI), CX - MOVBLZX 0(CX)(R9*1), CX - SHLL $3, CX - ORL SI, CX - ORL DX, CX - MOVQ 0(DI), DX - MOVQ DX, 0(BX) - TESTB CX, CX - JNE LBB5_71 + MOVB 0(CX)(R9*1), CX + SHLB $2, CX + ORB DX, CX + MOVBLZX 3(DI), DX + MOVB 0(DX)(R9*1), DX + SHLB $3, DX + ORB CX, DX + MOVQ 0(DI), CX + MOVQ CX, 0(BX) + JNE LBB5_76 MOVBLZX 4(DI), CX - MOVBLZX 0(CX)(R9*1), CX MOVBLZX 5(DI), DX - MOVBLZX 0(DX)(R9*1), DX - ADDL DX, DX - ORL CX, DX + MOVB 0(DX)(R9*1), DX + ADDB DX, DX + ORB 0(CX)(R9*1), DX MOVBLZX 6(DI), CX - MOVBLZX 0(CX)(R9*1), SI - SHLL $2, SI - MOVBLZX 7(DI), CX - MOVBLZX 0(CX)(R9*1), CX - SHLL $3, CX - ORL SI, CX - ORL DX, CX - TESTB CX, CX - JNE LBB5_72 + MOVB 0(CX)(R9*1), CX + SHLB $2, CX + ORB DX, CX + MOVBLZX 7(DI), DX + MOVB 0(DX)(R9*1), DX + SHLB $3, DX + ORB CX, DX + JNE LBB5_77 ADDQ $8, BX ADDQ $8, DI - ADDQ $-8, R10 + ADDQ $-8, SI -LBB5_61: - CMPQ R10, $4 - JL LBB5_64 +LBB5_66: + CMPQ SI, $4 + JL LBB5_69 MOVBLZX 0(DI), CX - MOVBLZX 0(CX)(R9*1), CX MOVBLZX 1(DI), DX - MOVBLZX 0(DX)(R9*1), DX - ADDL DX, DX - ORL CX, DX + MOVB 0(DX)(R9*1), DX + ADDB DX, DX + ORB 0(CX)(R9*1), DX MOVBLZX 2(DI), CX - MOVBLZX 0(CX)(R9*1), SI - SHLL $2, SI - MOVBLZX 3(DI), CX - MOVBLZX 0(CX)(R9*1), CX - SHLL $3, CX - ORL SI, CX - ORL DX, CX - MOVL 0(DI), DX - MOVL DX, 0(BX) - TESTB CX, CX - JNE LBB5_71 + MOVB 0(CX)(R9*1), CX + SHLB $2, CX + ORB DX, CX + MOVBLZX 3(DI), DX + MOVB 0(DX)(R9*1), DX + SHLB $3, DX + ORB CX, DX + MOVL 0(DI), CX + MOVL CX, 0(BX) + JNE LBB5_76 ADDQ $4, BX ADDQ $4, DI - ADDQ $-4, R10 - -LBB5_64: - TESTQ R10, R10 - JLE LBB5_73 - -LBB5_65: - MOVBLZX 0(DI), CX - CMPB 0(CX)(R9*1), $0 - JNE LBB5_68 - INCQ DI - MOVB CX, 0(BX) - INCQ BX - CMPQ R10, $1 - LEAQ -1(R10), R10 - JG LBB5_65 - JMP LBB5_73 - -LBB5_67: - MOVWLZX DX, CX - BSFL CX, CX - ADDQ CX, DI - ADDQ SI, DI - SUBQ CX, R10 - SUBQ SI, R10 - ADDQ CX, BX - ADDQ SI, BX - -LBB5_68: - MOVB 0(DI), CX + ADDQ $-4, SI LBB5_69: + TESTQ SI, SI + JLE LBB5_78 + +LBB5_70: + MOVBLZX 0(DI), CX + CMPB 0(CX)(R9*1), $0 + JNE LBB5_73 + ADDQ $1, DI + MOVB CX, 0(BX) + ADDQ $1, BX + LEAQ -1(SI), CX + CMPQ SI, $1 + MOVQ CX, SI + JG LBB5_70 + JMP LBB5_78 + +LBB5_72: + BSFW CX, CX + MOVWLZX CX, CX + ADDQ CX, DI + ADDQ CX, R10 + NEGQ R10 + ADDQ CX, BX + MOVQ R10, SI + +LBB5_73: + MOVB 0(DI), CX + +LBB5_74: MOVQ BX, DX MOVBLZX CX, CX SHLQ $4, CX - MOVLQSX 0(R8)(CX*1), BX - MOVQ 8(R8)(CX*1), CX + MOVLQSX 0(R12)(CX*1), BX + MOVQ 8(R12)(CX*1), CX MOVQ CX, 0(DX) ADDQ DX, BX - CMPQ R10, $2 - JL LBB5_73 - DECQ R10 + CMPQ SI, $2 + JL LBB5_78 MOVBLZX 1(DI), CX - INCQ DI + ADDQ $1, DI + ADDQ $-1, SI CMPB 0(CX)(R9*1), $0 - JNE LBB5_69 - JMP LBB5_52 - -LBB5_71: - BSFL CX, CX - ADDQ CX, DI - SUBQ CX, R10 - ADDQ CX, BX - JMP LBB5_68 - -LBB5_72: - BSFL CX, CX - LEAQ 4(CX), DX - LEAQ 4(DI)(CX*1), DI - SUBQ DX, R10 - LEAQ 4(BX)(CX*1), BX - JMP LBB5_68 - -LBB5_73: - SUBQ R12, BX - MOVQ BX, 0(R11) - JMP LBB5_77 - -LBB5_75: - SUBQ R12, R15 - MOVQ R15, 0(R11) - NOTQ R10 - ADDQ DI, R10 + JNE LBB5_74 + JMP LBB5_57 LBB5_76: - MOVQ R10, AX + MOVBLZX DX, CX + BSFL CX, CX + ADDQ CX, DI + SUBQ CX, SI + ADDQ CX, BX + JMP LBB5_73 LBB5_77: - ADDQ $8, SP + MOVBLZX DX, CX + BSFL CX, CX + LEAQ 4(CX), DX + ADDQ CX, DI + ADDQ $4, DI + SUBQ DX, SI + ADDQ CX, BX + ADDQ $4, BX + JMP LBB5_73 + +LBB5_78: + SUBQ R15, BX + MOVQ BX, 0(R11) + JMP LBB5_82 + +LBB5_81: + SUBQ -48(BP), R14 + MOVQ -56(BP), AX + MOVQ R14, 0(AX) + SUBQ R9, DI + NOTQ R13 + ADDQ DI, R13 + MOVQ R13, AX + +LBB5_82: + ADDQ $32, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 WORD $0x5d41 // popq %r13 @@ -1994,483 +1911,661 @@ LBB5_77: BYTE $0x5d // popq %rbp RET -LBB5_78: - SUBQ R12, R15 - NOTQ R9 - ADDQ R9, R15 - MOVQ R15, 0(R11) - SUBQ DI, R10 - ADDQ R9, R10 - NOTQ R10 - JMP LBB5_76 +LBB5_83: + MOVQ -48(BP), CX + ADDQ R13, CX + NOTQ CX + ADDQ R14, CX + MOVQ -56(BP), AX + MOVQ CX, 0(AX) + SUBQ R9, DI + ADDQ R13, DI + MOVQ DI, AX + JMP LBB5_82 LCPI6_0: QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' _unquote: - 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 $40, SP + 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 $24, SP TESTQ SI, SI - JE LBB6_82 - MOVQ SI, R11 - MOVQ CX, -56(BP) - MOVQ R8, AX - MOVQ R8, -72(BP) - MOVL R8, R10 - ANDL $1, R10 - LONG $0x8d058d4c; WORD $0x00b5; BYTE $0x00 // leaq $46477(%rip), %r8 /* __UnquoteTab(%rip) */ - QUAD $0xffffffb2056ffac5 // vmovdqu $-78(%rip), %xmm0 /* LCPI6_0(%rip) */ - MOVQ DI, R9 - MOVQ SI, R13 + JE LBB6_118 + MOVL R8, R9 + ANDL $1, R9 + QUAD $0xffffffc7056ffac5 // vmovdqu $-57(%rip), %xmm0 /* LCPI6_0(%rip) */ + MOVQ DI, R11 + MOVQ SI, R15 MOVQ DX, AX LBB6_2: - CMPB 0(R9), $92 + CMPB 0(R11), $92 JNE LBB6_4 - XORL SI, SI - JMP LBB6_13 + XORL R14, R14 + JMP LBB6_15 LBB6_4: - MOVQ R13, R15 - MOVQ AX, SI - MOVQ R9, R14 - CMPQ R13, $16 - JL LBB6_7 + MOVQ R15, R12 + MOVQ AX, R13 + MOVQ R11, R14 + CMPQ R15, $16 + JL LBB6_9 + XORL R13, R13 + MOVQ R15, R14 -LBB6_5: - LONG $0x6f7ac1c4; BYTE $0x0e // vmovdqu (%r14), %xmm1 - LONG $0x0e7ffac5 // vmovdqu %xmm1, (%rsi) - LONG $0xc874f1c5 // vpcmpeqb %xmm0, %xmm1, %xmm1 - LONG $0xd9d7f9c5 // vpmovmskb %xmm1, %ebx - TESTW BX, BX - JNE LBB6_12 - ADDQ $16, R14 - ADDQ $16, SI - CMPQ R15, $31 - LEAQ -16(R15), R15 - JG LBB6_5 - -LBB6_7: - TESTQ R15, R15 - JE LBB6_83 - XORL BX, BX +LBB6_6: + LONG $0x6f7a81c4; WORD $0x2b0c // vmovdqu (%r11,%r13), %xmm1 + LONG $0x7f7aa1c4; WORD $0x280c // vmovdqu %xmm1, (%rax,%r13) + LONG $0xc874f1c5 // vpcmpeqb %xmm0, %xmm1, %xmm1 + LONG $0xd9d7f9c5 // vpmovmskb %xmm1, %ebx + TESTL BX, BX + JNE LBB6_14 + LEAQ -16(R14), R12 + ADDQ $16, R13 + CMPQ R14, $31 + MOVQ R12, R14 + JG LBB6_6 + LEAQ 0(R11)(R13*1), R14 + ADDQ AX, R13 LBB6_9: - MOVBLZX 0(R14)(BX*1), CX - CMPB CX, $92 - JE LBB6_11 - MOVB CX, 0(SI)(BX*1) - INCQ BX - CMPQ R15, BX - JNE LBB6_9 - JMP LBB6_83 + TESTQ R12, R12 + JE LBB6_119 + XORL BX, BX LBB6_11: - ADDQ BX, R14 - SUBQ R9, R14 - MOVQ R14, SI - CMPQ SI, $-1 - JNE LBB6_13 - JMP LBB6_83 - -LBB6_12: - MOVWLZX BX, CX - SUBQ R9, R14 - BSFQ CX, SI - ADDQ R14, SI - CMPQ SI, $-1 - JE LBB6_83 + MOVBLZX 0(R14)(BX*1), R10 + CMPB R10, $92 + JE LBB6_13 + MOVB R10, 0(R13)(BX*1) + ADDQ $1, BX + CMPQ R12, BX + JNE LBB6_11 + JMP LBB6_119 LBB6_13: - LEAQ 2(SI), CX - SUBQ CX, R13 - JS LBB6_94 - LEAQ 2(R9)(SI*1), R9 - TESTQ R10, R10 - JNE LBB6_58 + SUBQ R11, R14 + ADDQ BX, R14 + CMPQ R14, $-1 + JNE LBB6_15 + JMP LBB6_119 + +LBB6_14: + BSFW BX, BX + MOVWLZX BX, R14 + ADDQ R13, R14 + CMPQ R14, $-1 + JE LBB6_119 LBB6_15: - ADDQ SI, AX - MOVBLZX -1(R9), CX - MOVB 0(CX)(R8*1), CX - CMPB CX, $-1 - JE LBB6_18 - TESTB CX, CX - JE LBB6_95 - MOVB CX, 0(AX) - INCQ AX - JMP LBB6_57 + LEAQ 2(R14), BX + SUBQ BX, R15 + JS LBB6_155 + ADDQ R14, R11 + ADDQ $2, R11 + TESTQ R9, R9 + JNE LBB6_42 -LBB6_18: - CMPQ R13, $3 - JLE LBB6_94 - MOVL 0(R9), SI - MOVL SI, CX - NOTL CX - LEAL -808464432(SI), BX - ANDL $-2139062144, CX - TESTL BX, CX - JNE LBB6_85 - LEAL 421075225(SI), BX - ORL SI, BX +LBB6_17: + ADDQ R14, AX + MOVBLZX -1(R11), BX + LONG $0xf5158d4c; WORD $0x00b6; BYTE $0x00 // leaq $46837(%rip), %r10 /* __UnquoteTab(%rip) */ + MOVB 0(BX)(R10*1), BX + CMPB BX, $-1 + JE LBB6_20 + TESTB BX, BX + JE LBB6_134 + MOVB BX, 0(AX) + ADDQ $1, AX + JMP LBB6_72 + +LBB6_20: + CMPQ R15, $3 + JLE LBB6_155 + MOVL 0(R11), R14 + MOVL R14, R12 + NOTL R12 + LEAL -808464432(R14), BX + ANDL $-2139062144, R12 + TESTL BX, R12 + JNE LBB6_121 + LEAL 421075225(R14), BX + ORL R14, BX TESTL $-2139062144, BX - JNE LBB6_85 - MOVL SI, BX + JNE LBB6_121 + MOVL R14, BX ANDL $2139062143, BX - MOVL $-1061109568, R14 - SUBL BX, R14 - LEAL 1179010630(BX), R15 - ANDL CX, R14 - TESTL R15, R14 - JNE LBB6_85 - MOVL $-522133280, R14 - SUBL BX, R14 + MOVL $-1061109568, R10 + SUBL BX, R10 + LEAL 1179010630(BX), R13 + ANDL R12, R10 + TESTL R13, R10 + JNE LBB6_121 + MOVL $-522133280, R10 + SUBL BX, R10 ADDL $960051513, BX - ANDL R14, CX - TESTL BX, CX - JNE LBB6_85 - BSWAPL SI - MOVL SI, CX - SHRL $4, CX - NOTL CX - ANDL $16843009, CX - LEAL 0(CX)(CX*8), CX - ANDL $252645135, SI - ADDL CX, SI - MOVL SI, CX - SHRL $4, CX - ORL SI, CX - MOVBLZX CX, R15 - SHRL $8, CX - ANDL $65280, CX - ORL CX, R15 - LEAQ -4(R13), R14 - CMPL R15, $128 - JB LBB6_66 + ANDL R10, R12 + TESTL BX, R12 + JNE LBB6_121 + BSWAPL R14 + MOVL R14, BX + SHRL $4, BX + NOTL BX + ANDL $16843009, BX + LEAL 0(BX)(BX*8), BX + ANDL $252645135, R14 + ADDL BX, R14 + MOVL R14, R13 + SHRL $4, R13 + ORL R14, R13 + MOVL R13, BX + SHRL $8, BX + ANDL $65280, BX + MOVBLZX R13, R14 + ORL BX, R14 + LEAQ 4(R11), R12 + LEAQ -4(R15), R10 + CMPL R14, $128 + JB LBB6_50 + TESTQ R9, R9 + JNE LBB6_52 + TESTB $2, R8 + JE LBB6_75 XORL R12, R12 - TESTQ R10, R10 - JE LBB6_40 -LBB6_25: - CMPL R15, $2048 - JB LBB6_68 - MOVL R15, CX - ANDL $-2048, CX - CMPL CX, $55296 - JNE LBB6_54 - TESTQ R14, R14 - JLE LBB6_72 - CMPB 4(R9)(R12*1), $92 - JNE LBB6_73 - CMPL R15, $56319 - JA LBB6_70 - CMPQ R14, $7 - JL LBB6_70 - CMPB 5(R9)(R12*1), $92 - JNE LBB6_70 - CMPB 6(R9)(R12*1), $117 - JNE LBB6_70 - MOVL 7(R9)(R12*1), SI - MOVL SI, CX - NOTL CX - LEAL -808464432(SI), BX - ANDL $-2139062144, CX - TESTL BX, CX - JNE LBB6_99 - LEAL 421075225(SI), BX - ORL SI, BX - TESTL $-2139062144, BX - JNE LBB6_99 - MOVL SI, BX - ANDL $2139062143, BX - MOVL $-1061109568, -44(BP) - SUBL BX, -44(BP) - MOVQ SI, -80(BP) - LEAL 1179010630(BX), SI - MOVL SI, -60(BP) - ANDL CX, -44(BP) - MOVL -60(BP), SI - TESTL SI, -44(BP) - MOVQ -80(BP), SI - JNE LBB6_99 - MOVL $-522133280, -44(BP) - SUBL BX, -44(BP) - ADDL $960051513, BX - ANDL -44(BP), CX - TESTL BX, CX - JNE LBB6_99 - BSWAPL SI - MOVL SI, CX - SHRL $4, CX - NOTL CX - ANDL $16843009, CX - LEAL 0(CX)(CX*8), CX - ANDL $252645135, SI - ADDL CX, SI - MOVL SI, CX - SHRL $4, CX - ORL SI, CX - MOVL CX, SI - SHRL $8, SI - ANDL $65280, SI - MOVBLZX CX, BX - ORL SI, BX - ANDL $16515072, CX - CMPL CX, $14417920 - JE LBB6_77 - TESTB $2, -72(BP) - JE LBB6_114 - ADDQ $-7, R14 - MOVW $-16401, 0(AX) - MOVB $-67, 2(AX) - ADDQ $3, AX - ADDQ $7, R12 - MOVL BX, R15 - CMPL BX, $127 - JA LBB6_25 - JMP LBB6_53 - -LBB6_40: - CMPL R15, $2048 - JB LBB6_68 - MOVL R15, CX - ANDL $-2048, CX - CMPL CX, $55296 - JNE LBB6_54 - CMPL R15, $56319 - JA LBB6_69 - CMPQ R14, $6 - JL LBB6_69 - CMPB 4(R9)(R12*1), $92 +LBB6_29: + CMPL R14, $2048 + JB LBB6_73 + MOVL R14, BX + ANDL $-2048, BX + CMPL BX, $55296 JNE LBB6_69 - CMPB 5(R9)(R12*1), $117 - JNE LBB6_69 - MOVL 6(R9)(R12*1), SI - MOVL SI, CX - NOTL CX - LEAL -808464432(SI), BX - ANDL $-2139062144, CX - TESTL BX, CX - JNE LBB6_98 - LEAL 421075225(SI), BX - ORL SI, BX + CMPQ R10, $6 + JL LBB6_87 + CMPL R14, $56319 + JA LBB6_87 + CMPB 4(R11)(R12*1), $92 + JNE LBB6_87 + CMPB 5(R11)(R12*1), $117 + JNE LBB6_87 + MOVL 6(R11)(R12*1), R13 + MOVL R13, BX + NOTL BX + MOVQ R13, -56(BP) + ADDL $-808464432, R13 + ANDL $-2139062144, BX + MOVL BX, -60(BP) + TESTL R13, BX + JNE LBB6_135 + MOVQ -56(BP), R13 + LEAL 421075225(R13), BX + ORL R13, BX TESTL $-2139062144, BX - JNE LBB6_98 - MOVL SI, BX - ANDL $2139062143, BX - MOVL $-1061109568, -44(BP) - SUBL BX, -44(BP) - MOVQ SI, -80(BP) - LEAL 1179010630(BX), SI - MOVL SI, -60(BP) - ANDL CX, -44(BP) - MOVL -60(BP), SI - TESTL SI, -44(BP) - MOVQ -80(BP), SI - JNE LBB6_98 - MOVL $-522133280, -44(BP) - SUBL BX, -44(BP) - ADDL $960051513, BX - ANDL -44(BP), CX - TESTL BX, CX - JNE LBB6_98 - BSWAPL SI - MOVL SI, CX - SHRL $4, CX - NOTL CX - ANDL $16843009, CX - LEAL 0(CX)(CX*8), CX - ANDL $252645135, SI - ADDL CX, SI - MOVL SI, CX - SHRL $4, CX - ORL SI, CX - MOVL CX, SI - SHRL $8, SI - ANDL $65280, SI - MOVBLZX CX, BX - ORL SI, BX - ANDL $16515072, CX - CMPL CX, $14417920 - JE LBB6_76 - TESTB $2, -72(BP) - JE LBB6_113 - ADDQ $-6, R14 + JNE LBB6_135 + MOVQ -56(BP), R13 + ANDL $2139062143, R13 + MOVL $-1061109568, BX + SUBL R13, BX + MOVL BX, -64(BP) + LEAL 1179010630(R13), BX + MOVL BX, -44(BP) + MOVL -64(BP), BX + ANDL -60(BP), BX + TESTL BX, -44(BP) + JNE LBB6_135 + MOVL $-522133280, BX + SUBL R13, BX + MOVL BX, -44(BP) + ADDL $960051513, R13 + MOVL -60(BP), BX + ANDL -44(BP), BX + TESTL R13, BX + JNE LBB6_135 + MOVQ -56(BP), R13 + BSWAPL R13 + MOVL R13, BX + SHRL $4, BX + NOTL BX + ANDL $16843009, BX + LEAL 0(BX)(BX*8), BX + ANDL $252645135, R13 + ADDL BX, R13 + MOVL R13, BX + SHRL $4, BX + ORL R13, BX + MOVL BX, R13 + SHRL $8, BX + ANDL $65280, BX + MOVL BX, -56(BP) + MOVL R13, BX + MOVBLZX BX, R13 + ADDL -56(BP), R13 + ANDL $16515072, BX + CMPL BX, $14417920 + JE LBB6_90 MOVW $-16401, 0(AX) MOVB $-67, 2(AX) ADDQ $3, AX ADDQ $6, R12 - MOVL BX, R15 - CMPL BX, $128 - JAE LBB6_40 + ADDQ $-6, R10 + MOVL R13, R14 + CMPL R13, $127 + JA LBB6_29 + ADDQ R11, R12 + ADDQ $4, R12 + JMP LBB6_51 -LBB6_53: - LEAQ 4(R9)(R12*1), R9 - MOVL BX, R15 - JMP LBB6_67 +LBB6_42: + TESTL R15, R15 + JE LBB6_155 + CMPB -1(R11), $92 + JNE LBB6_146 + CMPB 0(R11), $92 + JNE LBB6_49 + CMPL R15, $1 + JLE LBB6_155 + MOVB 1(R11), BX + CMPB BX, $34 + JE LBB6_48 + CMPB BX, $92 + JNE LBB6_148 -LBB6_54: - LEAQ 4(R9)(R12*1), R9 - MOVL R15, CX - SHRL $12, CX - ORB $-32, CX - MOVB CX, 0(AX) - MOVL R15, CX - SHRL $6, CX - ANDB $63, CX - ORB $-128, CX - MOVB CX, 1(AX) - ANDB $63, R15 - ORB $-128, R15 - MOVB R15, 2(AX) +LBB6_48: + ADDQ $1, R11 + ADDQ $-1, R15 -LBB6_55: - ADDQ $3, AX +LBB6_49: + ADDQ $1, R11 + ADDQ $-1, R15 + JMP LBB6_17 -LBB6_56: - MOVQ R14, R13 +LBB6_50: + MOVL R14, R13 -LBB6_57: - TESTQ R13, R13 - JNE LBB6_2 - JMP LBB6_96 - -LBB6_58: - TESTL R13, R13 - JE LBB6_94 - CMPB -1(R9), $92 - JNE LBB6_97 - CMPB 0(R9), $92 - JNE LBB6_65 - CMPL R13, $1 - JLE LBB6_94 - MOVB 1(R9), CX - CMPB CX, $34 - JE LBB6_64 - CMPB CX, $92 - JNE LBB6_109 - -LBB6_64: - INCQ R9 - DECQ R13 - -LBB6_65: - INCQ R9 - DECQ R13 - JMP LBB6_15 - -LBB6_66: - ADDQ $4, R9 - -LBB6_67: - MOVB R15, 0(AX) - INCQ AX - JMP LBB6_56 - -LBB6_68: - LEAQ 4(R9)(R12*1), R9 - MOVL R15, CX - SHRL $6, CX - ORB $-64, CX - MOVB CX, 0(AX) - ANDB $63, R15 - ORB $-128, R15 - MOVB R15, 1(AX) - ADDQ $2, AX - JMP LBB6_56 - -LBB6_69: - LEAQ 4(R9)(R12*1), R9 +LBB6_51: + MOVB R13, 0(AX) + ADDQ $1, AX JMP LBB6_71 +LBB6_52: + TESTB $2, R8 + JE LBB6_93 + XORL R12, R12 + +LBB6_54: + CMPL R14, $2048 + JB LBB6_73 + MOVL R14, BX + ANDL $-2048, BX + CMPL BX, $55296 + JNE LBB6_69 + TESTQ R10, R10 + JLE LBB6_152 + CMPB 4(R11)(R12*1), $92 + JNE LBB6_113 + CMPQ R10, $7 + JL LBB6_111 + CMPL R14, $56319 + JA LBB6_111 + CMPB 5(R11)(R12*1), $92 + JNE LBB6_111 + CMPB 6(R11)(R12*1), $117 + JNE LBB6_111 + MOVL 7(R11)(R12*1), R13 + MOVL R13, BX + NOTL BX + MOVQ R13, -56(BP) + ADDL $-808464432, R13 + ANDL $-2139062144, BX + MOVL BX, -60(BP) + TESTL R13, BX + JNE LBB6_149 + MOVQ -56(BP), R13 + LEAL 421075225(R13), BX + ORL R13, BX + TESTL $-2139062144, BX + JNE LBB6_149 + MOVQ -56(BP), R13 + ANDL $2139062143, R13 + MOVL $-1061109568, BX + SUBL R13, BX + MOVL BX, -64(BP) + LEAL 1179010630(R13), BX + MOVL BX, -44(BP) + MOVL -64(BP), BX + ANDL -60(BP), BX + TESTL BX, -44(BP) + JNE LBB6_149 + MOVL $-522133280, BX + SUBL R13, BX + MOVL BX, -44(BP) + ADDL $960051513, R13 + MOVL -60(BP), BX + ANDL -44(BP), BX + TESTL R13, BX + JNE LBB6_149 + MOVQ -56(BP), R13 + BSWAPL R13 + MOVL R13, BX + SHRL $4, BX + NOTL BX + ANDL $16843009, BX + LEAL 0(BX)(BX*8), BX + ANDL $252645135, R13 + ADDL BX, R13 + MOVQ R13, BX + SHRL $4, R13 + ORL BX, R13 + MOVL R13, BX + SHRL $8, BX + ANDL $65280, BX + MOVL BX, -56(BP) + MOVBLZX R13, BX + ADDL -56(BP), BX + ANDL $16515072, R13 + CMPL R13, $14417920 + JE LBB6_114 + MOVW $-16401, 0(AX) + MOVB $-67, 2(AX) + ADDQ $3, AX + ADDQ $7, R12 + ADDQ $-7, R10 + MOVQ BX, R13 + MOVL R13, R14 + CMPL R13, $128 + JAE LBB6_54 + ADDQ R11, R12 + ADDQ $4, R12 + MOVQ BX, R13 + JMP LBB6_51 + +LBB6_69: + ADDQ R11, R12 + ADDQ $4, R12 + LBB6_70: - LEAQ 5(R9)(R12*1), R9 - SUBQ R12, R13 - ADDQ $-5, R13 - MOVQ R13, R14 + MOVL R14, BX + SHRL $12, BX + ORB $-32, BX + MOVB BX, 0(AX) + MOVL R14, BX + SHRL $6, BX + ANDB $63, BX + ORB $-128, BX + MOVB BX, 1(AX) + ANDB $63, R14 + ORB $-128, R14 + MOVB R14, 2(AX) + ADDQ $3, AX LBB6_71: - TESTB $2, -72(BP) - JNE LBB6_75 - JMP LBB6_116 + MOVQ R10, R15 + MOVQ R12, R11 LBB6_72: - TESTB $2, -72(BP) - JNE LBB6_74 - JMP LBB6_94 + TESTQ R15, R15 + JNE LBB6_2 + JMP LBB6_154 LBB6_73: - TESTB $2, -72(BP) - JE LBB6_117 + ADDQ R11, R12 + ADDQ $4, R12 LBB6_74: - LEAQ 4(R9)(R12*1), R9 + MOVL R14, BX + SHRL $6, BX + ORB $-64, BX + MOVB BX, 0(AX) + ANDB $63, R14 + ORB $-128, R14 + MOVB R14, 1(AX) + ADDQ $2, AX + JMP LBB6_71 LBB6_75: + CMPL R14, $2048 + JB LBB6_74 + ANDL $16252928, R13 + CMPL R13, $14155776 + JNE LBB6_70 + CMPQ R15, $10 + JL LBB6_107 + CMPL R14, $56319 + JA LBB6_107 + CMPB 0(R12), $92 + JNE LBB6_107 + CMPB 5(R11), $117 + JNE LBB6_107 + MOVL 6(R11), BX + MOVL BX, R10 + NOTL R10 + MOVQ BX, -56(BP) + ADDL $-808464432, BX + ANDL $-2139062144, R10 + TESTL BX, R10 + JNE LBB6_136 + MOVQ -56(BP), R13 + LEAL 421075225(R13), BX + ORL R13, BX + TESTL $-2139062144, BX + JNE LBB6_136 + MOVQ -56(BP), R13 + ANDL $2139062143, R13 + MOVL $-1061109568, BX + SUBL R13, BX + MOVL BX, -44(BP) + LEAL 1179010630(R13), BX + MOVL BX, -60(BP) + MOVL -44(BP), BX + ANDL R10, BX + TESTL BX, -60(BP) + JNE LBB6_136 + MOVL $-522133280, BX + SUBL R13, BX + ADDL $960051513, R13 + ANDL BX, R10 + TESTL R13, R10 + JNE LBB6_136 + MOVQ -56(BP), R12 + BSWAPL R12 + MOVL R12, BX + SHRL $4, BX + NOTL BX + ANDL $16843009, BX + LEAL 0(BX)(BX*8), BX + ANDL $252645135, R12 + ADDL BX, R12 + MOVL R12, R10 + SHRL $4, R10 + ORL R12, R10 + ADDQ $10, R11 + MOVL R10, BX + ANDL $16515072, BX + CMPL BX, $14417920 + JNE LBB6_117 + MOVL R10, R12 + SHRL $8, R12 + ANDL $65280, R12 + MOVBLZX R10, BX + ORL R12, BX + JMP LBB6_91 + +LBB6_87: + ADDQ R12, R11 + ADDQ $4, R11 + +LBB6_88: + TESTB $2, R8 + JE LBB6_150 + +LBB6_89: MOVW $-16401, 0(AX) MOVB $-67, 2(AX) - JMP LBB6_55 + ADDQ $3, AX + MOVQ R10, R15 + JMP LBB6_72 -LBB6_76: - LEAQ 10(R9)(R12*1), R9 - SUBQ R12, R13 - ADDQ $-10, R13 - JMP LBB6_78 +LBB6_90: + MOVQ R13, BX + ADDQ R12, R11 + ADDQ $10, R11 + SUBQ R12, R15 -LBB6_77: - LEAQ 11(R9)(R12*1), R9 - SUBQ R12, R13 - ADDQ $-11, R13 +LBB6_91: + ADDQ $-10, R15 -LBB6_78: - SHLL $10, R15 - LEAL -56613888(R15)(BX*1), CX - CMPL CX, $1114112 - JB LBB6_81 - TESTB $2, -72(BP) - JE LBB6_111 - MOVW $-16401, 0(AX) - MOVB $-67, 2(AX) - ADDQ $3, AX - JMP LBB6_57 - -LBB6_81: - MOVL CX, SI - SHRL $18, SI - ORB $-16, SI - MOVB SI, 0(AX) - MOVL CX, SI - SHRL $12, SI - ANDB $63, SI - ORB $-128, SI - MOVB SI, 1(AX) - MOVL CX, SI - SHRL $6, SI - ANDB $63, SI - ORB $-128, SI - MOVB SI, 2(AX) - ANDB $63, CX - ORB $-128, CX - MOVB CX, 3(AX) +LBB6_92: + SHLL $10, R14 + MOVL BX, R10 + ADDL R14, R10 + ADDL BX, R14 + ADDL $-56613888, R14 + MOVL R14, BX + SHRL $18, BX + ORB $-16, BX + MOVB BX, 0(AX) + MOVL R14, BX + SHRL $12, BX + ANDB $63, BX + ORB $-128, BX + MOVB BX, 1(AX) + SHRL $6, R14 + ANDB $63, R14 + ORB $-128, R14 + MOVB R14, 2(AX) + ANDB $63, R10 + ORB $-128, R10 + MOVB R10, 3(AX) ADDQ $4, AX - JMP LBB6_57 + JMP LBB6_72 -LBB6_82: - XORL R13, R13 +LBB6_93: + CMPL R14, $2048 + JB LBB6_74 + ANDL $16252928, R13 + CMPL R13, $14155776 + JNE LBB6_70 + CMPQ R15, $5 + JL LBB6_152 + CMPB 0(R12), $92 + JNE LBB6_116 + LEAQ 5(R11), R12 + CMPQ R15, $11 + JL LBB6_112 + CMPL R14, $56319 + JA LBB6_112 + CMPB 0(R12), $92 + JNE LBB6_112 + CMPB 6(R11), $117 + JNE LBB6_112 + MOVL 7(R11), BX + MOVL BX, R10 + NOTL R10 + MOVQ BX, -56(BP) + ADDL $-808464432, BX + ANDL $-2139062144, R10 + TESTL BX, R10 + JNE LBB6_136 + MOVQ -56(BP), R13 + LEAL 421075225(R13), BX + ORL R13, BX + TESTL $-2139062144, BX + JNE LBB6_136 + MOVQ -56(BP), R13 + ANDL $2139062143, R13 + MOVL $-1061109568, BX + SUBL R13, BX + MOVL BX, -44(BP) + LEAL 1179010630(R13), BX + MOVL BX, -60(BP) + MOVL -44(BP), BX + ANDL R10, BX + TESTL BX, -60(BP) + JNE LBB6_136 + MOVL $-522133280, BX + SUBL R13, BX + ADDL $960051513, R13 + ANDL BX, R10 + TESTL R13, R10 + JNE LBB6_136 + MOVQ -56(BP), R12 + BSWAPL R12 + MOVL R12, BX + SHRL $4, BX + NOTL BX + ANDL $16843009, BX + LEAL 0(BX)(BX*8), BX + ANDL $252645135, R12 + ADDL BX, R12 + MOVL R12, R10 + SHRL $4, R10 + ORL R12, R10 + ADDQ $11, R11 + MOVL R10, BX + ANDL $16515072, BX + CMPL BX, $14417920 + JNE LBB6_117 + MOVL R10, R12 + SHRL $8, R12 + ANDL $65280, R12 + MOVBLZX R10, BX + ORL R12, BX + JMP LBB6_115 + +LBB6_107: + MOVQ R12, R11 + JMP LBB6_88 + +LBB6_111: + ADDQ R11, R12 + ADDQ $5, R12 + +LBB6_112: + ADDQ $-1, R10 + MOVQ R12, R11 + JMP LBB6_88 + +LBB6_113: + ADDQ R12, R11 + ADDQ $4, R11 + TESTB $2, R8 + JNE LBB6_89 + JMP LBB6_117 + +LBB6_114: + ADDQ R12, R11 + ADDQ $11, R11 + SUBQ R12, R15 + +LBB6_115: + ADDQ $-11, R15 + JMP LBB6_92 + +LBB6_116: + MOVQ R12, R11 + TESTB $2, R8 + JNE LBB6_89 + +LBB6_117: + SUBQ DI, R11 + JMP LBB6_151 + +LBB6_118: + XORL R15, R15 MOVQ DX, AX -LBB6_83: - ADDQ R13, AX +LBB6_119: + ADDQ R15, AX SUBQ DX, AX -LBB6_84: - ADDQ $40, SP +LBB6_120: + ADDQ $24, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 WORD $0x5d41 // popq %r13 @@ -2479,197 +2574,193 @@ LBB6_84: BYTE $0x5d // popq %rbp RET -LBB6_85: - MOVQ R9, DX - SUBQ DI, DX - MOVQ -56(BP), DI - MOVQ DX, 0(DI) - MOVB 0(R9), CX - LEAL -48(CX), SI - MOVQ $-2, AX - CMPB SI, $10 - JB LBB6_87 - ANDB $-33, CX - ADDB $-65, CX - CMPB CX, $5 - JA LBB6_84 +LBB6_121: + MOVQ R11, DX + SUBQ DI, DX + MOVQ DX, 0(CX) + MOVB 0(R11), SI + LEAL -48(SI), AX + CMPB AX, $10 + JB LBB6_124 + MOVQ $-2, AX + ADDB $-65, SI + CMPB SI, $37 + JA LBB6_120 + MOVBLZX SI, SI + MOVQ $270582939711, DI + BTQ SI, DI + JAE LBB6_120 -LBB6_87: - LEAQ 1(DX), CX - MOVQ CX, 0(DI) - MOVB 1(R9), CX - LEAL -48(CX), SI - CMPB SI, $10 - JB LBB6_89 - ANDB $-33, CX - ADDB $-65, CX - CMPB CX, $5 - JA LBB6_84 +LBB6_124: + LEAQ 1(DX), AX + MOVQ AX, 0(CX) + MOVB 1(R11), SI + LEAL -48(SI), AX + CMPB AX, $9 + JBE LBB6_127 + MOVQ $-2, AX + ADDB $-65, SI + CMPB SI, $37 + JA LBB6_120 + MOVBLZX SI, SI + MOVQ $270582939711, DI + BTQ SI, DI + JAE LBB6_120 -LBB6_89: - LEAQ 2(DX), CX - MOVQ CX, 0(DI) - MOVB 2(R9), CX - LEAL -48(CX), SI - CMPB SI, $10 - JB LBB6_91 - ANDB $-33, CX - ADDB $-65, CX - CMPB CX, $5 - JA LBB6_84 +LBB6_127: + LEAQ 2(DX), AX + MOVQ AX, 0(CX) + MOVB 2(R11), SI + LEAL -48(SI), AX + CMPB AX, $10 + JB LBB6_130 + MOVQ $-2, AX + ADDB $-65, SI + CMPB SI, $37 + JA LBB6_120 + MOVBLZX SI, SI + MOVQ $270582939711, DI + BTQ SI, DI + JAE LBB6_120 -LBB6_91: - LEAQ 3(DX), CX - MOVQ CX, 0(DI) - MOVB 3(R9), CX - LEAL -48(CX), SI - CMPB SI, $10 - JB LBB6_93 - ANDB $-33, CX - ADDB $-65, CX - CMPB CX, $5 - JA LBB6_84 - -LBB6_93: - ADDQ $4, DX - MOVQ DX, 0(DI) - JMP LBB6_84 - -LBB6_94: - MOVQ -56(BP), AX - MOVQ R11, 0(AX) - MOVQ $-1, AX - JMP LBB6_84 - -LBB6_95: - NOTQ DI - ADDQ DI, R9 - MOVQ -56(BP), AX - MOVQ R9, 0(AX) - MOVQ $-3, AX - JMP LBB6_84 - -LBB6_96: - XORL R13, R13 - JMP LBB6_83 - -LBB6_97: - NOTQ DI - ADDQ DI, R9 - JMP LBB6_110 - -LBB6_98: - LEAQ 4(R9)(R12*1), SI - JMP LBB6_100 - -LBB6_99: - LEAQ 5(R9)(R12*1), SI - -LBB6_100: - MOVQ SI, DX - SUBQ DI, DX - ADDQ $2, DX - MOVQ -56(BP), AX - MOVQ DX, 0(AX) - MOVB 2(SI), CX - LEAL -48(CX), DI - MOVQ $-2, AX - CMPB DI, $10 - JB LBB6_102 - ANDB $-33, CX - ADDB $-65, CX - CMPB CX, $5 - JA LBB6_84 - -LBB6_102: - LEAQ 1(DX), CX - MOVQ -56(BP), DI - MOVQ CX, 0(DI) - MOVB 3(SI), CX - LEAL -48(CX), DI - CMPB DI, $10 - JB LBB6_104 - ANDB $-33, CX - ADDB $-65, CX - CMPB CX, $5 - JA LBB6_84 - -LBB6_104: - LEAQ 2(DX), CX - MOVQ -56(BP), DI - MOVQ CX, 0(DI) - MOVB 4(SI), CX - LEAL -48(CX), DI - CMPB DI, $10 - JB LBB6_106 - ANDB $-33, CX - ADDB $-65, CX - CMPB CX, $5 - JA LBB6_84 - -LBB6_106: - LEAQ 3(DX), CX - MOVQ -56(BP), DI - MOVQ CX, 0(DI) - MOVB 5(SI), CX - LEAL -48(CX), SI - CMPB SI, $10 - JB LBB6_108 - ANDB $-33, CX - ADDB $-65, CX - CMPB CX, $5 - JA LBB6_84 - -LBB6_108: - ADDQ $4, DX - MOVQ -56(BP), CX - MOVQ DX, 0(CX) - JMP LBB6_84 - -LBB6_109: - SUBQ DI, R9 - INCQ R9 - -LBB6_110: - MOVQ -56(BP), AX - MOVQ R9, 0(AX) - MOVQ $-2, AX - JMP LBB6_84 - -LBB6_111: - SUBQ DI, R9 - ADDQ $-4, R9 - -LBB6_112: - MOVQ -56(BP), AX - MOVQ R9, 0(AX) - MOVQ $-4, AX - JMP LBB6_84 - -LBB6_113: - LEAQ 10(R9)(R12*1), AX - JMP LBB6_115 - -LBB6_114: - LEAQ 11(R9)(R12*1), AX - -LBB6_115: - SUBQ DI, AX - ADDQ $-4, AX - MOVQ -56(BP), CX +LBB6_130: + LEAQ 3(DX), AX MOVQ AX, 0(CX) + MOVB 3(R11), SI + LEAL -48(SI), AX + CMPB AX, $10 + JB LBB6_133 + +LBB6_131: + MOVQ $-2, AX + ADDB $-65, SI + CMPB SI, $37 + JA LBB6_120 + MOVBLZX SI, SI + MOVQ $270582939711, DI + BTQ SI, DI + JAE LBB6_120 + +LBB6_133: + ADDQ $4, DX + MOVQ DX, 0(CX) + MOVQ $-2, AX + JMP LBB6_120 + +LBB6_134: + NOTQ DI + ADDQ DI, R11 + MOVQ R11, 0(CX) + MOVQ $-3, AX + JMP LBB6_120 + +LBB6_135: + ADDQ R11, R12 + ADDQ $4, R12 + +LBB6_136: + MOVQ R12, DX + SUBQ DI, DX + ADDQ $2, DX + MOVQ DX, 0(CX) + MOVB 2(R12), SI + LEAL -48(SI), AX + CMPB AX, $10 + JB LBB6_139 + MOVQ $-2, AX + ADDB $-65, SI + CMPB SI, $37 + JA LBB6_120 + MOVBLZX SI, SI + MOVQ $270582939711, DI + BTQ SI, DI + JAE LBB6_120 + +LBB6_139: + LEAQ 1(DX), AX + MOVQ AX, 0(CX) + MOVB 3(R12), SI + LEAL -48(SI), AX + CMPB AX, $9 + JBE LBB6_142 + MOVQ $-2, AX + ADDB $-65, SI + CMPB SI, $37 + JA LBB6_120 + MOVBLZX SI, SI + MOVQ $270582939711, DI + BTQ SI, DI + JAE LBB6_120 + +LBB6_142: + LEAQ 2(DX), AX + MOVQ AX, 0(CX) + MOVB 4(R12), SI + LEAL -48(SI), AX + CMPB AX, $10 + JB LBB6_145 + MOVQ $-2, AX + ADDB $-65, SI + CMPB SI, $37 + JA LBB6_120 + MOVBLZX SI, SI + MOVQ $270582939711, DI + BTQ SI, DI + JAE LBB6_120 + +LBB6_145: + LEAQ 3(DX), AX + MOVQ AX, 0(CX) + MOVB 5(R12), SI + LEAL -48(SI), AX + CMPB AX, $10 + JAE LBB6_131 + JMP LBB6_133 + +LBB6_146: + NOTQ DI + ADDQ DI, R11 + +LBB6_147: + MOVQ R11, 0(CX) + MOVQ $-2, AX + JMP LBB6_120 + +LBB6_148: + SUBQ DI, R11 + ADDQ $1, R11 + JMP LBB6_147 + +LBB6_149: + ADDQ R11, R12 + ADDQ $5, R12 + JMP LBB6_136 + +LBB6_150: + ADDQ DI, R9 + SUBQ R9, R11 + +LBB6_151: + ADDQ $-4, R11 + MOVQ R11, 0(CX) MOVQ $-4, AX - JMP LBB6_84 + JMP LBB6_120 -LBB6_116: - LEAQ 4(R10)(DI*1), AX - SUBQ AX, R9 - JMP LBB6_112 +LBB6_152: + TESTB $2, R8 + JE LBB6_155 + MOVW $-16401, 0(AX) + MOVB $-67, 2(AX) + ADDQ $3, AX -LBB6_117: - ADDQ R12, R9 - SUBQ DI, R9 - JMP LBB6_112 +LBB6_154: + XORL R15, R15 + JMP LBB6_119 + +LBB6_155: + MOVQ SI, 0(CX) + MOVQ $-1, AX + JMP LBB6_120 LCPI7_0: QUAD $0x2626262626262626; QUAD $0x2626262626262626 // .space 16, '&&&&&&&&&&&&&&&&' @@ -2678,10 +2769,10 @@ LCPI7_1: QUAD $0xe2e2e2e2e2e2e2e2; QUAD $0xe2e2e2e2e2e2e2e2 // .space 16, '\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2' LCPI7_2: - QUAD $0x0202020202020202; QUAD $0x0202020202020202 // .space 16, '\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' + QUAD $0xfdfdfdfdfdfdfdfd; QUAD $0xfdfdfdfdfdfdfdfd // .space 16, '\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd' LCPI7_3: - QUAD $0x3e3e3e3e3e3e3e3e; QUAD $0x3e3e3e3e3e3e3e3e // .space 16, '>>>>>>>>>>>>>>>>' + QUAD $0x3c3c3c3c3c3c3c3c; QUAD $0x3c3c3c3c3c3c3c3c // .space 16, '<<<<<<<<<<<<<<<<' _html_escape: BYTE $0x55 // pushq %rbp @@ -2691,359 +2782,372 @@ _html_escape: WORD $0x5541 // pushq %r13 WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx - SUBQ $24, SP - MOVQ CX, -64(BP) - MOVQ DX, R10 - MOVQ DX, -56(BP) - MOVQ DI, -48(BP) + SUBQ $16, SP + MOVQ CX, -56(BP) + MOVQ DX, R14 + MOVQ DX, -48(BP) MOVQ DI, AX TESTQ SI, SI - JLE LBB7_59 - MOVQ -64(BP), AX + JLE LBB7_70 + MOVQ -56(BP), AX MOVQ 0(AX), R9 - QUAD $0xffffff85056ffac5 // vmovdqu $-123(%rip), %xmm0 /* LCPI7_0(%rip) */ - QUAD $0xffffff8d0d6ffac5 // vmovdqu $-115(%rip), %xmm1 /* LCPI7_1(%rip) */ - QUAD $0xffffff95156ffac5 // vmovdqu $-107(%rip), %xmm2 /* LCPI7_2(%rip) */ - QUAD $0xffffff9d1d6ffac5 // vmovdqu $-99(%rip), %xmm3 /* LCPI7_3(%rip) */ - MOVQ $5764607797912141824, R14 - LONG $0xf41d8d4c; WORD $0x00ad; BYTE $0x00 // leaq $44532(%rip), %r11 /* __HtmlQuoteTab(%rip) */ - MOVQ -48(BP), R15 - MOVQ -56(BP), R10 + QUAD $0xffffff89056ffac5 // vmovdqu $-119(%rip), %xmm0 /* LCPI7_0(%rip) */ + QUAD $0xffffff910d6ffac5 // vmovdqu $-111(%rip), %xmm1 /* LCPI7_1(%rip) */ + QUAD $0xffffff99156ffac5 // vmovdqu $-103(%rip), %xmm2 /* LCPI7_2(%rip) */ + QUAD $0xffffffa11d6ffac5 // vmovdqu $-95(%rip), %xmm3 /* LCPI7_3(%rip) */ + LONG $0xce1d8d4c; WORD $0x00ac; BYTE $0x00 // leaq $44238(%rip), %r11 /* __HtmlQuoteTab(%rip) */ + MOVQ DI, R12 + MOVQ -48(BP), R14 LBB7_2: TESTQ R9, R9 - JLE LBB7_61 - CMPQ SI, $15 - SETGT BX - MOVQ R9, R12 - MOVQ R10, R8 - MOVQ SI, AX - MOVQ R15, R13 - CMPQ R9, $16 - JL LBB7_9 + JLE LBB7_3 CMPQ SI, $16 - JL LBB7_9 - MOVQ R15, R13 - MOVQ SI, AX - MOVQ R10, R8 + SETGE AX + MOVQ R9, R13 + MOVQ R14, R8 + MOVQ SI, BX + MOVQ R12, R15 + JL LBB7_12 + CMPQ R9, $16 + JL LBB7_12 + XORL R8, R8 + MOVQ SI, DX MOVQ R9, CX -LBB7_6: - LONG $0x6f7ac1c4; WORD $0x0065 // vmovdqu (%r13), %xmm4 +LBB7_7: + LONG $0x6f7a81c4; WORD $0x0424 // vmovdqu (%r12,%r8), %xmm4 LONG $0xe874d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm5 LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 LONG $0xedebc9c5 // vpor %xmm5, %xmm6, %xmm5 - LONG $0xf2ebd9c5 // vpor %xmm2, %xmm4, %xmm6 - LONG $0xf374c9c5 // vpcmpeqb %xmm3, %xmm6, %xmm6 - LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 - LONG $0x7f7ac1c4; BYTE $0x20 // vmovdqu %xmm4, (%r8) - LONG $0xd5d7f9c5 // vpmovmskb %xmm5, %edx - TESTW DX, DX - JNE LBB7_21 - ADDQ $16, R13 - ADDQ $16, R8 - LEAQ -16(CX), R12 - CMPQ AX, $31 - SETGT BX - CMPQ AX, $32 - LEAQ -16(AX), AX - JL LBB7_9 - CMPQ CX, $31 - MOVQ R12, CX - JG LBB7_6 - -LBB7_9: - TESTB BX, BX - JE LBB7_13 - MOVQ R14, DX - LONG $0x6f7ac1c4; WORD $0x0065 // vmovdqu (%r13), %xmm4 - LONG $0xe874d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm5 - LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 - LONG $0xedebc9c5 // vpor %xmm5, %xmm6, %xmm5 - LONG $0xf2ebd9c5 // vpor %xmm2, %xmm4, %xmm6 + LONG $0xf2dbd9c5 // vpand %xmm2, %xmm4, %xmm6 LONG $0xf374c9c5 // vpcmpeqb %xmm3, %xmm6, %xmm6 LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 + LONG $0x7f7a81c4; WORD $0x0624 // vmovdqu %xmm4, (%r14,%r8) LONG $0xc5d7f9c5 // vpmovmskb %xmm5, %eax + TESTL AX, AX + JNE LBB7_8 + LEAQ -16(DX), BX + LEAQ -16(CX), R13 + ADDQ $16, R8 + CMPQ DX, $32 + SETGE AX + JL LBB7_11 + MOVQ BX, DX + CMPQ CX, $31 + MOVQ R13, CX + JG LBB7_7 + +LBB7_11: + LEAQ 0(R12)(R8*1), R15 + ADDQ R14, R8 + +LBB7_12: + TESTB AX, AX + JE LBB7_13 + LONG $0x6f7ac1c4; BYTE $0x27 // vmovdqu (%r15), %xmm4 + LONG $0xe874d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm5 + LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 + LONG $0xedebc9c5 // vpor %xmm5, %xmm6, %xmm5 + LONG $0xf2dbd9c5 // vpand %xmm2, %xmm4, %xmm6 + LONG $0xf374c9c5 // vpcmpeqb %xmm3, %xmm6, %xmm6 + LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 + LONG $0xc5d7f9c5 // vpmovmskb %xmm5, %eax ORL $65536, AX - BSFL AX, R14 - LONG $0x7ef9e1c4; BYTE $0xe0 // vmovq %xmm4, %rax - CMPQ R12, R14 - JGE LBB7_22 - CMPQ R12, $8 - JB LBB7_25 + BSFL AX, R10 + LONG $0x7ef9e1c4; BYTE $0xe0 // vmovq %xmm4, %rax + CMPQ R13, R10 + JGE LBB7_24 + CMPQ R13, $8 + JB LBB7_35 MOVQ AX, 0(R8) - LEAQ 8(R13), R14 + LEAQ 8(R15), R10 ADDQ $8, R8 - LEAQ -8(R12), AX - CMPQ AX, $4 - JAE LBB7_26 - JMP LBB7_27 + LEAQ -8(R13), BX + CMPQ BX, $4 + JAE LBB7_38 + JMP LBB7_39 LBB7_13: - TESTQ R12, R12 - JLE LBB7_20 - TESTQ AX, AX - JLE LBB7_20 + TESTQ BX, BX + JLE LBB7_21 + TESTQ R13, R13 + JLE LBB7_21 + XORL DX, DX + XORL AX, AX -LBB7_15: - MOVBLZX 0(R13), CX - CMPQ CX, $62 +LBB7_16: + MOVBLZX 0(R15)(DX*1), R11 + CMPQ R11, $62 JA LBB7_17 - BTQ CX, R14 - JB LBB7_24 + MOVQ $5764607797912141824, CX + BTQ R11, CX + JB LBB7_45 LBB7_17: - CMPB CX, $-30 - JE LBB7_24 - INCQ R13 - MOVB CX, 0(R8) - CMPQ AX, $2 - LEAQ -1(AX), AX + CMPB R11, $-30 + JE LBB7_45 + LEAQ 0(BX)(AX*1), R10 + MOVB R11, 0(R8)(DX*1) + LEAQ -1(AX), CX + CMPQ R10, $2 JL LBB7_20 - INCQ R8 - CMPQ R12, $1 - LEAQ -1(R12), R12 - JG LBB7_15 + ADDQ R13, AX + ADDQ $1, DX + CMPQ AX, $1 + MOVQ CX, AX + JG LBB7_16 LBB7_20: - SUBQ R15, R13 - NEGQ AX - SBBQ R12, R12 - XORQ R13, R12 - TESTQ R12, R12 - JNS LBB7_37 - JMP LBB7_57 + SUBQ CX, R15 + ADDQ CX, BX + LONG $0x781d8d4c; WORD $0x00ab; BYTE $0x00 // leaq $43896(%rip), %r11 /* __HtmlQuoteTab(%rip) */ LBB7_21: - MOVWLZX DX, AX - SUBQ R15, R13 - BSFL AX, R12 - ADDQ R13, R12 - TESTQ R12, R12 - JNS LBB7_37 - JMP LBB7_57 + TESTQ BX, BX + JE LBB7_22 + NOTQ R15 + ADDQ R12, R15 + TESTQ R15, R15 + JNS LBB7_49 + JMP LBB7_48 -LBB7_22: - CMPL R14, $8 - JB LBB7_31 - MOVQ AX, 0(R8) - LEAQ 8(R13), R12 - ADDQ $8, R8 - LEAQ -8(R14), AX - CMPQ AX, $4 - JAE LBB7_32 - JMP LBB7_33 +LBB7_8: + BSFW AX, AX + MOVWLZX AX, R15 + ADDQ R8, R15 + TESTQ R15, R15 + JNS LBB7_49 + JMP LBB7_48 LBB7_24: - SUBQ R15, R13 - MOVQ R13, R12 - TESTQ R12, R12 - JNS LBB7_37 - JMP LBB7_57 - -LBB7_25: - MOVQ R13, R14 - MOVQ R12, AX - CMPQ AX, $4 - JB LBB7_27 - -LBB7_26: - MOVL 0(R14), CX - MOVL CX, 0(R8) - ADDQ $4, R14 - ADDQ $4, R8 - ADDQ $-4, AX - -LBB7_27: - CMPQ AX, $2 - JB LBB7_28 - MOVWLZX 0(R14), CX - MOVW CX, 0(R8) - ADDQ $2, R14 - ADDQ $2, R8 - ADDQ $-2, AX - TESTQ AX, AX - JNE LBB7_29 - JMP LBB7_30 - -LBB7_28: - TESTQ AX, AX - JE LBB7_30 - -LBB7_29: - MOVB 0(R14), AX - MOVB AX, 0(R8) - -LBB7_30: - SUBQ R15, R12 - ADDQ R13, R12 - NOTQ R12 - MOVQ DX, R14 - TESTQ R12, R12 - JNS LBB7_37 - JMP LBB7_57 - -LBB7_31: - MOVQ R13, R12 - MOVQ R14, AX - CMPQ AX, $4 - JB LBB7_33 - -LBB7_32: - MOVL 0(R12), CX - MOVL CX, 0(R8) - ADDQ $4, R12 - ADDQ $4, R8 - ADDQ $-4, AX - -LBB7_33: - CMPQ AX, $2 - JB LBB7_34 - MOVWLZX 0(R12), CX - MOVW CX, 0(R8) - ADDQ $2, R12 - ADDQ $2, R8 - ADDQ $-2, AX - TESTQ AX, AX - JNE LBB7_35 - JMP LBB7_36 - -LBB7_34: - TESTQ AX, AX - JE LBB7_36 - -LBB7_35: - MOVB 0(R12), AX - MOVB AX, 0(R8) - -LBB7_36: - SUBQ R15, R13 - ADDQ R14, R13 - MOVQ R13, R12 - MOVQ DX, R14 - TESTQ R12, R12 - JS LBB7_57 - -LBB7_37: - ADDQ R12, R15 - ADDQ R12, R10 - SUBQ R12, SI - JLE LBB7_58 - SUBQ R12, R9 - MOVB 0(R15), CX - CMPB CX, $-30 - JE LBB7_51 - MOVQ R15, AX - -LBB7_40: - MOVBLZX CX, DX - SHLQ $4, DX - MOVQ 0(DX)(R11*1), DI - MOVLQSX DI, BX - SUBQ BX, R9 - JL LBB7_60 - SHLQ $32, DI - LEAQ 8(DX)(R11*1), R15 - MOVQ $12884901889, CX - CMPQ DI, CX - JL LBB7_43 - MOVL 0(R15), CX - MOVL CX, 0(R10) - LEAQ 12(DX)(R11*1), R15 - LEAQ 4(R10), R8 - LEAQ -4(BX), DI - CMPQ DI, $2 - JGE LBB7_44 - JMP LBB7_45 - -LBB7_43: - MOVQ R10, R8 - MOVQ BX, DI - CMPQ DI, $2 - JL LBB7_45 - -LBB7_44: - MOVWLZX 0(R15), DX - MOVW DX, 0(R8) - ADDQ $2, R15 - ADDQ $2, R8 - ADDQ $-2, DI + CMPL R10, $8 + JB LBB7_25 + MOVQ AX, 0(R8) + LEAQ 8(R15), R13 + ADDQ $8, R8 + LEAQ -8(R10), BX + CMPQ BX, $4 + JAE LBB7_28 + JMP LBB7_29 LBB7_45: - TESTQ DI, DI - JLE LBB7_47 - MOVB 0(R15), CX + SUBQ R12, R15 + SUBQ AX, R15 + LONG $0x151d8d4c; WORD $0x00ab; BYTE $0x00 // leaq $43797(%rip), %r11 /* __HtmlQuoteTab(%rip) */ + TESTQ R15, R15 + JNS LBB7_49 + JMP LBB7_48 + +LBB7_35: + MOVQ R15, R10 + MOVQ R13, BX + CMPQ BX, $4 + JB LBB7_39 + +LBB7_38: + MOVL 0(R10), AX + MOVL AX, 0(R8) + ADDQ $4, R10 + ADDQ $4, R8 + ADDQ $-4, BX + +LBB7_39: + CMPQ BX, $2 + JAE LBB7_40 + TESTQ BX, BX + JE LBB7_43 + +LBB7_42: + MOVB 0(R10), AX + MOVB AX, 0(R8) + +LBB7_43: + ADDQ R15, R13 + NOTQ R13 + ADDQ R12, R13 + MOVQ R13, R15 + TESTQ R15, R15 + JNS LBB7_49 + JMP LBB7_48 + +LBB7_25: + MOVQ R15, R13 + MOVQ R10, BX + CMPQ BX, $4 + JB LBB7_29 + +LBB7_28: + MOVL 0(R13), AX + MOVL AX, 0(R8) + ADDQ $4, R13 + ADDQ $4, R8 + ADDQ $-4, BX + +LBB7_29: + CMPQ BX, $2 + JAE LBB7_30 + TESTQ BX, BX + JE LBB7_33 + +LBB7_32: + MOVB 0(R13), AX + MOVB AX, 0(R8) + +LBB7_33: + SUBQ R12, R15 + ADDQ R10, R15 + TESTQ R15, R15 + JNS LBB7_49 + JMP LBB7_48 + +LBB7_40: + MOVWLZX 0(R10), AX + MOVW AX, 0(R8) + ADDQ $2, R10 + ADDQ $2, R8 + ADDQ $-2, BX + TESTQ BX, BX + JNE LBB7_42 + JMP LBB7_43 + +LBB7_30: + MOVWLZX 0(R13), AX + MOVW AX, 0(R8) + ADDQ $2, R13 + ADDQ $2, R8 + ADDQ $-2, BX + TESTQ BX, BX + JNE LBB7_32 + JMP LBB7_33 + +LBB7_22: + SUBQ R12, R15 + TESTQ R15, R15 + JS LBB7_48 + +LBB7_49: + ADDQ R15, R12 + ADDQ R15, R14 + SUBQ R15, SI + JLE LBB7_50 + SUBQ R15, R9 + MOVB 0(R12), CX + CMPB CX, $-30 + JE LBB7_53 + MOVQ R12, AX + +LBB7_57: + MOVBLZX CX, CX + SHLQ $4, CX + MOVQ 0(CX)(R11*1), DX + MOVLQSX DX, R15 + SUBQ R15, R9 + JL LBB7_58 + SHLQ $32, DX + LEAQ 0(CX)(R11*1), R10 + ADDQ $8, R10 + MOVQ $12884901889, BX + CMPQ DX, BX + JL LBB7_62 + MOVL 0(R10), DX + MOVL DX, 0(R14) + LEAQ 0(CX)(R11*1), R10 + ADDQ $12, R10 + LEAQ 4(R14), R8 + LEAQ -4(R15), CX + CMPQ CX, $2 + JGE LBB7_65 + JMP LBB7_66 + +LBB7_62: + MOVQ R14, R8 + MOVQ R15, CX + CMPQ CX, $2 + JL LBB7_66 + +LBB7_65: + MOVWLZX 0(R10), DX + MOVW DX, 0(R8) + ADDQ $2, R10 + ADDQ $2, R8 + ADDQ $-2, CX + +LBB7_66: + TESTQ CX, CX + JLE LBB7_68 + MOVB 0(R10), CX MOVB CX, 0(R8) -LBB7_47: - ADDQ BX, R10 +LBB7_68: + ADDQ R15, R14 -LBB7_48: - INCQ AX - MOVQ AX, R15 +LBB7_69: + ADDQ $1, AX + LEAQ -1(SI), CX + MOVQ AX, R12 CMPQ SI, $1 - LEAQ -1(SI), SI + MOVQ CX, SI JG LBB7_2 - JMP LBB7_59 + JMP LBB7_70 -LBB7_51: +LBB7_53: CMPQ SI, $3 - JL LBB7_55 - CMPB 1(R15), $-128 - JNE LBB7_55 - MOVB 2(R15), CX + JL LBB7_59 + CMPB 1(R12), $-128 + JNE LBB7_59 + MOVB 2(R12), CX MOVL CX, AX ANDB $-2, AX CMPB AX, $-88 - JNE LBB7_55 - LEAQ 2(R15), AX + JNE LBB7_59 + LEAQ 2(R12), AX ADDQ $-2, SI - JMP LBB7_40 - -LBB7_55: - TESTQ R9, R9 - JLE LBB7_61 - MOVB $-30, 0(R10) - INCQ R10 - DECQ R9 - MOVQ R15, AX - JMP LBB7_48 - -LBB7_57: - SUBQ -56(BP), R10 - NOTQ R12 - ADDQ R12, R10 - MOVQ -64(BP), AX - MOVQ R10, 0(AX) - SUBQ -48(BP), R15 - ADDQ R12, R15 - NOTQ R15 - JMP LBB7_62 - -LBB7_58: - MOVQ R15, AX + JMP LBB7_57 LBB7_59: - SUBQ -56(BP), R10 - MOVQ -64(BP), CX - MOVQ R10, 0(CX) - SUBQ -48(BP), AX - JMP LBB7_63 + TESTQ R9, R9 + JLE LBB7_3 + MOVB $-30, 0(R14) + ADDQ $1, R14 + ADDQ $-1, R9 + MOVQ R12, AX + JMP LBB7_69 -LBB7_60: - SUBQ -56(BP), R10 - MOVQ -64(BP), AX - MOVQ R10, 0(AX) +LBB7_48: + MOVQ -48(BP), CX + ADDQ R15, CX + NOTQ CX + ADDQ R14, CX + MOVQ -56(BP), AX + MOVQ CX, 0(AX) + SUBQ R12, DI + ADDQ R15, DI + MOVQ DI, AX + JMP LBB7_71 -LBB7_61: - NOTQ R15 - ADDQ -48(BP), R15 +LBB7_50: + MOVQ R12, AX -LBB7_62: - MOVQ R15, AX +LBB7_70: + SUBQ -48(BP), R14 + MOVQ -56(BP), CX + MOVQ R14, 0(CX) + SUBQ DI, AX + JMP LBB7_71 -LBB7_63: - ADDQ $24, SP +LBB7_58: + SUBQ -48(BP), R14 + MOVQ -56(BP), AX + MOVQ R14, 0(AX) + +LBB7_3: + NOTQ R12 + ADDQ DI, R12 + MOVQ R12, AX + +LBB7_71: + ADDQ $16, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 WORD $0x5d41 // popq %r13 @@ -3077,73 +3181,74 @@ LBB8_5: SHLQ CX, DI MOVL AX, CX SHLQ $4, CX - LONG $0x263d8d4c; WORD $0x0031; BYTE $0x00 // leaq $12582(%rip), %r15 /* _POW10_M128_TAB(%rip) */ + LONG $0xd43d8d4c; WORD $0x002f; BYTE $0x00 // leaq $12244(%rip), %r15 /* _POW10_M128_TAB(%rip) */ MOVQ DI, AX MULQ 8(CX)(R15*1) MOVQ AX, R11 MOVQ DX, R14 ANDL $511, DX + CMPQ DX, $511 + JNE LBB8_11 MOVQ DI, BX NOTQ BX - CMPQ AX, BX + CMPQ R11, BX JBE LBB8_11 - CMPL DX, $511 - JNE LBB8_11 MOVQ DI, AX MULQ 0(CX)(R15*1) ADDQ DX, R11 ADCQ $0, R14 MOVL R14, DX ANDL $511, DX - CMPQ AX, BX - JBE LBB8_11 + CMPQ DX, $511 + JNE LBB8_11 CMPQ R11, $-1 JNE LBB8_11 - CMPL DX, $511 - JE LBB8_1 + CMPQ AX, BX + JA LBB8_1 LBB8_11: - MOVQ R14, DI - SHRQ $63, DI - LEAL 9(DI), CX - SHRQ CX, R14 - ORQ R11, DX - JNE LBB8_14 - MOVL R14, AX - ANDL $3, AX - CMPL AX, $1 - JE LBB8_1 + MOVQ R14, AX + SHRQ $63, AX + LEAL 9(AX), CX + SHRQ CX, R14 + TESTQ R11, R11 + JNE LBB8_15 + TESTQ DX, DX + JNE LBB8_15 + MOVL R14, CX + ANDL $3, CX + CMPL CX, $1 + JE LBB8_1 -LBB8_14: - LONG $0x526ac669; WORD $0x0003 // imull $217706, %esi, %eax - SARL $16, AX - ADDL $1087, AX - WORD $0x9848 // cltq - SUBQ R10, AX - XORQ $1, DI - SUBQ DI, AX - MOVL R14, DX - ANDL $1, DX - ADDQ R14, DX - MOVQ $126100789566373888, CX - ANDQ DX, CX - CMPQ CX, $1 - SBBQ $-1, AX - LEAQ -1(AX), SI - CMPQ SI, $2045 - JBE LBB8_16 +LBB8_15: + LONG $0x526ace69; WORD $0x0003 // imull $217706, %esi, %ecx + SARL $16, CX + ADDL $1087, CX + MOVLQSX CX, SI + SUBQ R10, SI + MOVL R14, DX + ANDL $1, DX + ADDQ R14, DX + MOVQ DX, CX + SHRQ $54, CX + ADDQ SI, AX + CMPQ CX, $1 + SBBQ $0, AX + LEAQ -1(AX), SI + CMPQ SI, $2045 + JBE LBB8_17 LBB8_1: XORL AX, AX -LBB8_17: +LBB8_18: BYTE $0x5b // popq %rbx WORD $0x5e41 // popq %r14 WORD $0x5f41 // popq %r15 BYTE $0x5d // popq %rbp RET -LBB8_16: +LBB8_17: CMPQ CX, $1 MOVB $2, CX SBBB $0, CX @@ -3158,7 +3263,7 @@ LBB8_16: LONG $0xc1450f48 // cmovneq %rcx, %rax MOVQ AX, 0(R8) MOVB $1, AX - JMP LBB8_17 + JMP LBB8_18 _decimal_to_f64: BYTE $0x55 // pushq %rbp @@ -3170,321 +3275,259 @@ _decimal_to_f64: BYTE $0x53 // pushq %rbx BYTE $0x50 // pushq %rax MOVQ SI, BX - MOVQ DI, R12 + MOVQ DI, R15 MOVQ $4503599627370496, R13 CMPL 16(DI), $0 JE LBB9_4 MOVQ $9218868437227405312, R14 - MOVL 20(R12), AX - XORL R15, R15 + MOVL 20(R15), AX + XORL R12, R12 CMPL AX, $310 - JG LBB9_78 + JG LBB9_64 CMPL AX, $-330 JGE LBB9_5 XORL R14, R14 - JMP LBB9_78 + JMP LBB9_64 LBB9_4: XORL R14, R14 - XORL R15, R15 - JMP LBB9_78 + XORL R12, R12 + JMP LBB9_64 LBB9_5: TESTL AX, AX MOVQ BX, -48(BP) - JLE LBB9_22 - XORL R15, R15 - JMP LBB9_9 + JLE LBB9_12 + XORL R12, R12 + LONG $0x01358d4c; WORD $0x005a; BYTE $0x00 // leaq $23041(%rip), %r14 /* _POW_TAB(%rip) */ + JMP LBB9_8 -LBB9_7: - NEGL BX - MOVQ R12, DI - MOVL BX, SI - LONG $0x002e71e8; BYTE $0x00 // callq _right_shift - -LBB9_8: - ADDL R14, R15 - MOVL 20(R12), AX - TESTL AX, AX - JLE LBB9_22 - -LBB9_9: - MOVL $27, R14 - CMPL AX, $8 - JG LBB9_11 +LBB9_10: MOVL AX, AX - LONG $0x220d8d48; WORD $0x005b; BYTE $0x00 // leaq $23330(%rip), %rcx /* _POW_TAB(%rip) */ - MOVL 0(CX)(AX*4), R14 + MOVL 0(R14)(AX*4), BX + CMPL 16(R15), $0 + JE LBB9_7 LBB9_11: - TESTL R14, R14 - JE LBB9_8 - CMPL 16(R12), $0 - JE LBB9_8 - MOVL R14, BX - NEGL BX - TESTL R14, R14 - JS LBB9_16 - CMPL R14, $61 - JL LBB9_7 + MOVQ R15, DI + MOVL BX, SI + LONG $0x002ceee8; BYTE $0x00 // callq _right_shift -LBB9_15: - MOVQ R12, DI - MOVL $60, SI - LONG $0x002e1fe8; BYTE $0x00 // callq _right_shift - LEAL 60(BX), AX - CMPL BX, $-120 - MOVL AX, BX - JL LBB9_15 +LBB9_7: + ADDL BX, R12 + MOVL 20(R15), AX + TESTL AX, AX + JLE LBB9_12 + +LBB9_8: + CMPL AX, $8 + JLE LBB9_10 + MOVL $27, BX + CMPL 16(R15), $0 + JNE LBB9_11 JMP LBB9_7 -LBB9_16: - CMPL R14, $-61 - JG LBB9_18 - -LBB9_17: - MOVQ R12, DI - MOVL $60, SI - LONG $0x002c91e8; BYTE $0x00 // callq _left_shift - LEAL -60(BX), SI - CMPL BX, $120 - MOVL SI, BX - JG LBB9_17 - JMP LBB9_19 +LBB9_12: + LONG $0xc3358d4c; WORD $0x0059; BYTE $0x00 // leaq $22979(%rip), %r14 /* _POW_TAB(%rip) */ + JMP LBB9_14 LBB9_18: - MOVL BX, SI - -LBB9_19: - MOVQ R12, DI - LONG $0x002c7be8; BYTE $0x00 // callq _left_shift - JMP LBB9_8 + MOVL $27, BX + CMPL 16(R15), $0 + JE LBB9_13 LBB9_20: - MOVQ R12, DI - LONG $0x002c6ee8; BYTE $0x00 // callq _left_shift + MOVQ R15, DI + MOVL BX, SI + LONG $0x002b12e8; BYTE $0x00 // callq _left_shift + MOVL 20(R15), AX + +LBB9_13: + SUBL BX, R12 + +LBB9_14: + TESTL AX, AX + JS LBB9_17 + JNE LBB9_21 + MOVQ 0(R15), CX + CMPB 0(CX), $53 + JL LBB9_19 + JMP LBB9_21 + +LBB9_17: + CMPL AX, $-8 + JL LBB9_18 + +LBB9_19: + MOVL AX, CX + NEGL CX + MOVL 0(R14)(CX*4), BX + CMPL 16(R15), $0 + JNE LBB9_20 + JMP LBB9_13 LBB9_21: - SUBL R14, R15 - MOVL 20(R12), AX - -LBB9_22: - TESTL AX, AX - JS LBB9_25 - JNE LBB9_36 - MOVQ 0(R12), CX - CMPB 0(CX), $53 - JL LBB9_26 - JMP LBB9_36 + CMPL R12, $-1022 + JG LBB9_27 + CMPL 16(R15), $0 + MOVQ -48(BP), BX + JE LBB9_29 + CMPL R12, $-1082 + JG LBB9_30 + ADDL $961, R12 LBB9_25: - MOVL $27, R14 - CMPL AX, $-8 - JL LBB9_27 - -LBB9_26: - NEGL AX - WORD $0x9848 // cltq - LONG $0x7c0d8d48; WORD $0x005a; BYTE $0x00 // leaq $23164(%rip), %rcx /* _POW_TAB(%rip) */ - MOVL 0(CX)(AX*4), R14 + MOVQ R15, DI + MOVL $60, SI + LONG $0x002c53e8; BYTE $0x00 // callq _right_shift + ADDL $60, R12 + CMPL R12, $-120 + JL LBB9_25 + ADDL $60, R12 + JMP LBB9_31 LBB9_27: - TESTL R14, R14 - JE LBB9_21 - CMPL 16(R12), $0 - JE LBB9_21 - TESTL R14, R14 - JLE LBB9_33 - MOVL R14, SI - CMPL R14, $61 - JL LBB9_20 - MOVL R14, BX + CMPL R12, $1024 + MOVQ -48(BP), BX + JG LBB9_61 + ADDL $-1, R12 + MOVL R12, R14 + JMP LBB9_32 + +LBB9_29: + MOVL $-1022, R14 + JMP LBB9_34 + +LBB9_30: + ADDL $1021, R12 + +LBB9_31: + NEGL R12 + MOVQ R15, DI + MOVL R12, SI + LONG $0x002c0ce8; BYTE $0x00 // callq _right_shift + MOVL $-1022, R14 LBB9_32: - MOVQ R12, DI - MOVL $60, SI - LONG $0x002c09e8; BYTE $0x00 // callq _left_shift - LEAL -60(BX), SI - CMPL BX, $120 - MOVL SI, BX - JG LBB9_32 - JMP LBB9_20 - -LBB9_33: - MOVL R14, BX - CMPL R14, $-61 - JG LBB9_35 + CMPL 16(R15), $0 + JE LBB9_34 + MOVQ R15, DI + MOVL $53, SI + LONG $0x002a53e8; BYTE $0x00 // callq _left_shift LBB9_34: - MOVQ R12, DI - MOVL $60, SI - LONG $0x002d56e8; BYTE $0x00 // callq _right_shift - LEAL 60(BX), AX - CMPL BX, $-120 - MOVL AX, BX - JL LBB9_34 + MOVL 20(R15), AX + MOVQ $-1, R12 + CMPL AX, $20 + JG LBB9_63 + TESTL AX, AX + JLE LBB9_40 + MOVL 16(R15), DX + XORL SI, SI + TESTL DX, DX + WORD $0x4e0f; BYTE $0xd6 // cmovlel %esi, %edx + LEAQ -1(AX), R9 + CMPQ R9, DX + LONG $0xca430f4c // cmovaeq %rdx, %r9 + LEAL 1(R9), R8 + XORL R12, R12 -LBB9_35: - NEGL BX - MOVQ R12, DI - MOVL BX, SI - LONG $0x002d40e8; BYTE $0x00 // callq _right_shift - JMP LBB9_21 - -LBB9_36: - CMPL R15, $-1022 - JG LBB9_42 - CMPL 16(R12), $0 - MOVQ -48(BP), BX - JE LBB9_44 - CMPL R15, $-1082 - JG LBB9_45 - ADDL $961, R15 +LBB9_37: + CMPQ DX, SI + JE LBB9_41 + LEAQ 0(R12)(R12*4), DI + MOVQ 0(R15), CX + MOVBQSX 0(CX)(SI*1), CX + LEAQ 0(CX)(DI*2), R12 + ADDQ $-48, R12 + ADDQ $1, SI + CMPQ AX, SI + JNE LBB9_37 + MOVL R8, R9 + JMP LBB9_41 LBB9_40: - MOVQ R12, DI - MOVL $60, SI - LONG $0x002d09e8; BYTE $0x00 // callq _right_shift - ADDL $60, R15 - CMPL R15, $-120 - JL LBB9_40 - ADDL $60, R15 - JMP LBB9_46 + XORL R9, R9 + XORL R12, R12 -LBB9_42: - CMPL R15, $1024 - MOVQ -48(BP), BX - JG LBB9_75 - DECL R15 - MOVL R15, R14 - JMP LBB9_47 +LBB9_41: + CMPL AX, R9 + JLE LBB9_49 + MOVL AX, SI + SUBL R9, SI + MOVL R9, DX + NOTL DX + ADDL AX, DX + ANDL $7, SI + JE LBB9_46 + NEGL SI + XORL DI, DI LBB9_44: - MOVL $-1022, R14 - JMP LBB9_49 - -LBB9_45: - ADDL $1021, R15 + ADDQ R12, R12 + LEAQ 0(R12)(R12*4), R12 + ADDL $-1, DI + CMPL SI, DI + JNE LBB9_44 + SUBL DI, R9 LBB9_46: - NEGL R15 - MOVQ R12, DI - MOVL R15, SI - LONG $0x002cc3e8; BYTE $0x00 // callq _right_shift - MOVL $-1022, R14 + CMPL DX, $7 + JB LBB9_49 + MOVL AX, DX + SUBL R9, DX -LBB9_47: - CMPL 16(R12), $0 - JE LBB9_49 - MOVQ R12, DI - MOVL $53, SI - LONG $0x002b39e8; BYTE $0x00 // callq _left_shift +LBB9_48: + IMUL3Q $100000000, R12, R12 + ADDL $-8, DX + JNE LBB9_48 LBB9_49: - MOVLQSX 20(R12), R8 - MOVQ $-1, R15 - CMPQ R8, $20 - JG LBB9_77 - MOVL R8, CX - TESTL CX, CX - JLE LBB9_54 - MOVLQSX 16(R12), SI - XORL DX, DX - XORL R15, R15 + TESTL AX, AX + JS LBB9_57 + MOVL 16(R15), CX + CMPL CX, AX + JLE LBB9_57 + MOVQ 0(R15), SI + MOVB 0(SI)(AX*1), DX + CMPB DX, $53 + JNE LBB9_58 + LEAL 1(AX), DI + CMPL DI, CX + JNE LBB9_58 + CMPL 28(R15), $0 + SETNE CX + JNE LBB9_59 + TESTL AX, AX + JLE LBB9_59 + ADDL $-1, AX + MOVB 0(SI)(AX*1), CX + ANDB $1, CX + JMP LBB9_59 -LBB9_52: - CMPQ DX, SI - JGE LBB9_55 - LEAQ 0(R15)(R15*4), AX - MOVQ 0(R12), DI - MOVBQSX 0(DI)(DX*1), DI - LEAQ -48(DI)(AX*2), R15 - INCQ DX - CMPQ CX, DX - JNE LBB9_52 - JMP LBB9_55 +LBB9_57: + XORL CX, CX -LBB9_54: - XORL DX, DX - XORL R15, R15 +LBB9_59: + MOVBLZX CX, AX + ADDQ AX, R12 + MOVQ $9007199254740992, AX + CMPQ R12, AX + JNE LBB9_63 + CMPL R14, $1022 + JLE LBB9_62 -LBB9_55: - CMPL R8, DX - JLE LBB9_63 - MOVL CX, DI - SUBL DX, DI - MOVL DX, SI - NOTL SI - ADDL R8, SI - ANDL $7, DI - JE LBB9_60 - NEGL DI - XORL AX, AX - -LBB9_58: - ADDQ R15, R15 - LEAQ 0(R15)(R15*4), R15 - DECL AX - CMPL DI, AX - JNE LBB9_58 - SUBL AX, DX - -LBB9_60: - CMPL SI, $7 - JB LBB9_63 - MOVL CX, AX - SUBL DX, AX +LBB9_61: + XORL R12, R12 + MOVQ $9218868437227405312, R14 + JMP LBB9_64 LBB9_62: - IMUL3Q $100000000, R15, R15 - ADDL $-8, AX - JNE LBB9_62 + ADDL $1, R14 + MOVQ R13, R12 LBB9_63: - TESTL CX, CX - JS LBB9_71 - MOVL 16(R12), DX - CMPL DX, R8 - JLE LBB9_71 - MOVQ 0(R12), SI - MOVB 0(SI)(CX*1), AX - LEAL 1(CX), DI - CMPL DI, DX - JNE LBB9_72 - CMPB AX, $53 - JNE LBB9_72 - CMPL 28(R12), $0 - SETNE DX - JNE LBB9_73 - TESTL CX, CX - JLE LBB9_73 - MOVB -1(R8)(SI*1), DX - ANDB $1, DX - JMP LBB9_73 - -LBB9_71: - XORL DX, DX - -LBB9_73: - MOVBLZX DX, AX - ADDQ AX, R15 - MOVQ $9007199254740992, AX - CMPQ R15, AX - JNE LBB9_77 - CMPL R14, $1022 - JLE LBB9_76 - -LBB9_75: - XORL R15, R15 - MOVQ $9218868437227405312, R14 - JMP LBB9_78 - -LBB9_76: - INCL R14 - MOVQ R13, R15 - -LBB9_77: - MOVQ R15, AX + MOVQ R12, AX ANDQ R13, AX ADDL $1023, R14 ANDL $2047, R14 @@ -3492,13 +3535,13 @@ LBB9_77: TESTQ AX, AX LONG $0xf0440f4c // cmoveq %rax, %r14 -LBB9_78: - DECQ R13 - ANDQ R15, R13 +LBB9_64: + ADDQ $-1, R13 + ANDQ R12, R13 ORQ R14, R13 MOVQ $-9223372036854775808, AX ORQ R13, AX - CMPL 24(R12), $0 + CMPL 24(R15), $0 LONG $0xc5440f49 // cmoveq %r13, %rax MOVQ AX, 0(BX) XORL AX, AX @@ -3511,10 +3554,10 @@ LBB9_78: BYTE $0x5d // popq %rbp RET -LBB9_72: - CMPB AX, $52 - SETGT DX - JMP LBB9_73 +LBB9_58: + CMPB DX, $53 + SETGE CX + JMP LBB9_59 _atof_native: BYTE $0x55 // pushq %rbp @@ -3536,162 +3579,164 @@ _atof_native: LBB10_4: MOVQ -32(BP), CX MOVB $0, 0(CX)(AX*1) - INCQ AX + ADDQ $1, AX CMPQ -24(BP), AX JA LBB10_4 LBB10_5: LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 LONG $0x4511f8c5; BYTE $0xf0 // vmovups %xmm0, $-16(%rbp) + XORL DX, DX CMPB 0(DI), $45 - JNE LBB10_6 + JNE LBB10_7 MOVL $1, -8(BP) MOVL $1, AX CMPQ AX, SI - JL LBB10_9 + JL LBB10_8 + JMP LBB10_39 -LBB10_41: - MOVL $0, -12(BP) - JMP LBB10_40 - -LBB10_6: +LBB10_7: XORL AX, AX CMPQ AX, SI - JGE LBB10_41 + JGE LBB10_39 -LBB10_9: +LBB10_8: MOVB $1, R11 XORL R9, R9 XORL R10, R10 XORL R8, R8 - JMP LBB10_10 + JMP LBB10_12 -LBB10_13: - DECL -12(BP) - XORL R10, R10 +LBB10_20: + MOVL $1, -4(BP) -LBB10_22: - INCQ AX +LBB10_11: + ADDQ $1, AX CMPQ AX, SI SETLT R11 CMPQ SI, AX - JE LBB10_23 + JE LBB10_22 -LBB10_10: +LBB10_12: MOVBLZX 0(DI)(AX*1), CX LEAL -48(CX), DX CMPB DX, $9 - JA LBB10_19 - TESTL R10, R10 - JNE LBB10_14 + JA LBB10_17 CMPB CX, $48 - JE LBB10_13 + JNE LBB10_19 + TESTL R10, R10 + JE LBB10_21 + MOVLQSX R9, R11 + CMPQ -24(BP), R11 + JA LBB10_9 + JMP LBB10_10 -LBB10_14: - MOVLQSX R9, R10 - CMPQ -24(BP), R10 - JBE LBB10_16 - MOVQ -32(BP), DX - MOVB CX, 0(DX)(R10*1) - MOVL -16(BP), R9 - INCL R9 - MOVL R9, -16(BP) - MOVL R9, R10 - JMP LBB10_22 - -LBB10_19: +LBB10_17: CMPB CX, $46 - JNE LBB10_20 + JNE LBB10_23 MOVL R10, -12(BP) MOVL $1, R8 - JMP LBB10_22 + JMP LBB10_11 -LBB10_16: - CMPB CX, $48 - JNE LBB10_18 - MOVL R9, R10 - JMP LBB10_22 +LBB10_19: + MOVLQSX R10, R11 + CMPQ -24(BP), R11 + JBE LBB10_20 -LBB10_18: - MOVL $1, -4(BP) +LBB10_9: + MOVQ -32(BP), DX + MOVB CX, 0(DX)(R11*1) + MOVL -16(BP), R9 + ADDL $1, R9 + MOVL R9, -16(BP) + +LBB10_10: MOVL R9, R10 - JMP LBB10_22 + JMP LBB10_11 + +LBB10_21: + ADDL $-1, -12(BP) + XORL R10, R10 + JMP LBB10_11 + +LBB10_22: + MOVQ SI, AX LBB10_23: - MOVL SI, CX - MOVQ SI, AX TESTL R8, R8 + JE LBB10_25 + TESTB $1, R11 JNE LBB10_26 + JMP LBB10_40 LBB10_25: - MOVL R9, -12(BP) - -LBB10_26: + MOVL R9, -12(BP) TESTB $1, R11 JE LBB10_40 - MOVB 0(DI)(CX*1), CX - ORB $32, CX - CMPB CX, $101 - JNE LBB10_40 - MOVL AX, DX - MOVB 1(DI)(DX*1), CX - CMPB CX, $45 - JE LBB10_32 - MOVL $1, R8 - CMPB CX, $43 - JNE LBB10_30 - ADDL $2, AX - JMP LBB10_33 -LBB10_20: - MOVQ AX, CX - TESTL R8, R8 - JNE LBB10_26 - JMP LBB10_25 +LBB10_26: + MOVL AX, DX + MOVB 0(DI)(DX*1), CX + ORB $32, CX + CMPB CX, $101 + JNE LBB10_40 + MOVB 1(DI)(DX*1), CX + CMPB CX, $45 + JE LBB10_30 + MOVL $1, R8 + CMPB CX, $43 + JNE LBB10_32 + ADDL $2, AX + JMP LBB10_31 -LBB10_32: +LBB10_30: ADDL $2, AX MOVL $-1, R8 -LBB10_33: +LBB10_31: MOVL AX, DX - MOVLQSX DX, DX - XORL R9, R9 - CMPQ DX, SI - JL LBB10_35 - JMP LBB10_39 + MOVLQSX DX, AX + XORL DX, DX + CMPQ AX, SI + JL LBB10_33 + JMP LBB10_38 -LBB10_30: - INCQ DX - MOVLQSX DX, DX - XORL R9, R9 - CMPQ DX, SI - JGE LBB10_39 +LBB10_32: + ADDQ $1, DX + MOVLQSX DX, AX + XORL DX, DX + CMPQ AX, SI + JGE LBB10_38 -LBB10_35: - XORL R9, R9 +LBB10_33: + XORL DX, DX -LBB10_36: - CMPL R9, $9999 - JG LBB10_39 - MOVBLZX 0(DI)(DX*1), CX - LEAL -48(CX), AX - CMPB AX, $9 - JA LBB10_39 - LEAL 0(R9)(R9*4), AX - LEAL -48(CX)(AX*2), R9 - INCQ DX - CMPQ SI, DX - JNE LBB10_36 +LBB10_34: + MOVBLSX 0(DI)(AX*1), CX + CMPL CX, $48 + JL LBB10_38 + CMPB CX, $57 + JG LBB10_38 + CMPL DX, $9999 + JG LBB10_38 + LEAL 0(DX)(DX*4), DX + LEAL 0(CX)(DX*2), DX + ADDL $-48, DX + ADDQ $1, AX + CMPQ SI, AX + JNE LBB10_34 + +LBB10_38: + IMULL R8, DX + ADDL -12(BP), DX LBB10_39: - IMULL R8, R9 - ADDL R9, -12(BP) + MOVL DX, -12(BP) LBB10_40: LEAQ -32(BP), DI LEAQ -40(BP), SI - LONG $0xfffabde8; BYTE $0xff // callq _decimal_to_f64 + LONG $0xfffb65e8; BYTE $0xff // callq _decimal_to_f64 LONG $0x4510fbc5; BYTE $0xd8 // vmovsd $-40(%rbp), %xmm0 ADDQ $48, SP BYTE $0x5d // popq %rbp @@ -3714,11 +3759,11 @@ _value: MOVQ DI, -80(BP) MOVQ SI, -72(BP) LEAQ -48(BP), DX - LONG $0x00054de8; BYTE $0x00 // callq _advance_ns + LONG $0x000557e8; BYTE $0x00 // callq _advance_ns MOVBLSX AX, AX CMPL AX, $125 JA LBB11_11 - LONG $0x020d8d48; WORD $0x0003; BYTE $0x00 // leaq $770(%rip), %rcx /* LJTI11_0(%rip) */ + LONG $0x0c0d8d48; WORD $0x0003; BYTE $0x00 // leaq $780(%rip), %rcx /* LJTI11_0(%rip) */ MOVLQSX 0(CX)(AX*4), AX ADDQ CX, AX JMP AX @@ -3733,9 +3778,9 @@ LBB11_2: LEAQ -80(BP), DI LEAQ -48(BP), SI MOVQ -56(BP), DX - LONG $0x000b2ce8; BYTE $0x00 // callq _vnumber - MOVQ -48(BP), BX - JMP LBB11_50 + LONG $0x001147e8; BYTE $0x00 // callq _vnumber + MOVQ -48(BP), R12 + JMP LBB11_49 LBB11_4: XORL AX, AX @@ -3744,41 +3789,39 @@ LBB11_4: SETEQ AX ADDQ AX, R12 SUBQ AX, BX - JE LBB11_45 + JE LBB11_44 CMPQ R13, BX JAE LBB11_7 MOVB 0(R12), AX ADDB $-48, AX - CMPB AX, $10 - JAE LBB11_47 + CMPB AX, $9 + JA LBB11_46 LBB11_7: MOVQ R12, DI MOVQ BX, SI - LONG $0x002072e8; BYTE $0x00 // callq _do_skip_number + LONG $0x002095e8; BYTE $0x00 // callq _do_skip_number TESTQ AX, AX - JS LBB11_46 + JS LBB11_45 ADDQ AX, R12 - MOVQ R12, BX - SUBQ R15, BX - MOVQ BX, -48(BP) + SUBQ R15, R12 TESTQ R14, R14 - JLE LBB11_49 + JLE LBB11_48 MOVQ -56(BP), AX MOVQ $8, 0(AX) MOVQ R13, 24(AX) - JMP LBB11_50 + JMP LBB11_49 LBB11_10: MOVQ $1, 0(R14) - MOVQ -48(BP), BX - JMP LBB11_50 + MOVQ -48(BP), R12 + JMP LBB11_49 LBB11_11: MOVQ $-2, 0(R14) - MOVQ -48(BP), BX - DECQ BX - JMP LBB11_50 + MOVQ -48(BP), R12 + ADDQ $-1, R12 + JMP LBB11_49 LBB11_12: MOVQ $-1, -64(BP) @@ -3786,195 +3829,191 @@ LBB11_12: LEAQ -80(BP), DI LEAQ -64(BP), DX MOVQ R15, SI - LONG $0x0006fde8; BYTE $0x00 // callq _advance_string + MOVQ R12, CX + LONG $0x0006e1e8; BYTE $0x00 // callq _advance_string + MOVQ AX, R12 TESTQ AX, AX - JS LBB11_31 - MOVQ AX, -48(BP) + JS LBB11_33 + MOVQ R12, -48(BP) MOVQ R15, 16(R14) - MOVQ -64(BP), CX - CMPQ CX, AX - MOVQ $-1, DX - LONG $0xd14c0f48 // cmovlq %rcx, %rdx - MOVQ DX, 24(R14) - MOVL $7, CX - MOVQ CX, 0(R14) - MOVQ AX, BX - JMP LBB11_50 + MOVQ -64(BP), AX + CMPQ AX, R12 + MOVQ $-1, CX + LONG $0xc84c0f48 // cmovlq %rax, %rcx + MOVQ CX, 24(R14) + MOVL $7, AX + MOVQ AX, 0(R14) + JMP LBB11_49 LBB11_14: - XORL AX, AX TESTL R12, R12 + MOVQ $-2, AX MOVL $11, CX - JMP LBB11_28 + JMP LBB11_32 LBB11_15: - XORL AX, AX TESTL R12, R12 + MOVQ $-2, AX MOVL $10, CX - JMP LBB11_28 + JMP LBB11_32 LBB11_16: MOVQ $5, 0(R14) - MOVQ -48(BP), BX - JMP LBB11_50 + MOVQ -48(BP), R12 + JMP LBB11_49 LBB11_17: - XORL AX, AX TESTL R12, R12 + MOVQ $-2, AX MOVL $12, CX - JMP LBB11_28 + JMP LBB11_32 LBB11_18: - MOVQ -48(BP), AX + MOVQ -48(BP), R12 LEAQ -4(BX), CX - CMPQ AX, CX - JA LBB11_22 - MOVL 0(R15)(AX*1), DX - CMPL DX, $1702063201 - JNE LBB11_32 - ADDQ $4, AX - MOVQ AX, -48(BP) - MOVL $4, CX - JMP LBB11_40 + MOVQ $-1, AX + CMPQ R12, CX + JA LBB11_25 + MOVL 0(R15)(R12*1), CX + CMPL CX, $1702063201 + JNE LBB11_34 + ADDQ $4, R12 + MOVL $4, AX + JMP LBB11_24 LBB11_21: - MOVQ -48(BP), AX + MOVQ -48(BP), R12 LEAQ -3(BX), CX - CMPQ AX, CX - JA LBB11_22 - MOVL -1(R15)(AX*1), DX - CMPL DX, $1819047278 - JNE LBB11_36 - ADDQ $3, AX - MOVQ AX, -48(BP) - MOVL $2, CX - JMP LBB11_40 - -LBB11_23: - MOVQ -48(BP), AX - LEAQ -3(BX), CX - CMPQ AX, CX - JBE LBB11_24 - -LBB11_22: - MOVQ BX, -48(BP) - MOVQ $-1, CX - MOVQ CX, 0(R14) - JMP LBB11_50 - -LBB11_26: - MOVQ $6, 0(R14) - MOVQ -48(BP), BX - JMP LBB11_50 + MOVQ $-1, AX + CMPQ R12, CX + JA LBB11_25 + MOVL -1(R15)(R12*1), CX + CMPL CX, $1819047278 + JNE LBB11_37 + ADDQ $3, R12 + MOVL $2, AX + JMP LBB11_24 LBB11_27: - XORL AX, AX - TESTL R12, R12 - MOVL $13, CX - -LBB11_28: - MOVQ $-2, DX - LONG $0xd1480f48 // cmovsq %rcx, %rdx - SETPL AX - MOVQ DX, 0(R14) - MOVQ -48(BP), BX - SUBQ AX, BX - JMP LBB11_50 + MOVQ -48(BP), R12 + LEAQ -3(BX), CX + MOVQ $-1, AX + CMPQ R12, CX + JA LBB11_25 + MOVL -1(R15)(R12*1), CX + CMPL CX, $1702195828 + JNE LBB11_41 + ADDQ $3, R12 + MOVL $3, AX LBB11_24: - MOVL -1(R15)(AX*1), DX - CMPL DX, $1702195828 - JNE LBB11_41 - ADDQ $3, AX - MOVQ AX, -48(BP) - MOVL $3, CX - JMP LBB11_40 + MOVQ R12, BX + +LBB11_25: + MOVQ BX, -48(BP) + MOVQ BX, R12 + +LBB11_26: + MOVQ AX, 0(R14) + JMP LBB11_49 + +LBB11_30: + MOVQ $6, 0(R14) + MOVQ -48(BP), R12 + JMP LBB11_49 LBB11_31: - MOVQ BX, -48(BP) - MOVQ AX, 0(R14) - JMP LBB11_50 + TESTL R12, R12 + MOVQ $-2, AX + MOVL $13, CX LBB11_32: - MOVQ $-2, CX - CMPB DX, $97 - JNE LBB11_40 - MOVL $1702063201, DX + LONG $0xc8490f48 // cmovnsq %rax, %rcx + MOVQ CX, 0(R14) + SARL $31, R12 + NOTL R12 + MOVLQSX R12, R12 + ADDQ -48(BP), R12 + JMP LBB11_49 + +LBB11_33: + MOVQ BX, -48(BP) + MOVQ R12, 0(R14) + MOVQ BX, R12 + JMP LBB11_49 LBB11_34: - SHRL $8, DX - MOVBLSX 1(R15)(AX*1), SI - INCQ AX - MOVBLZX DX, DI - CMPL DI, SI - JE LBB11_34 - JMP LBB11_39 + MOVQ $-2, AX + CMPB CX, $97 + JNE LBB11_26 + MOVL $1702063201, CX LBB11_36: - DECQ AX - MOVQ AX, -48(BP) - MOVQ $-2, CX - CMPB DX, $110 - JNE LBB11_40 - MOVL $1819047278, DX + SHRL $8, CX + MOVBLSX 1(R15)(R12*1), DX + ADDQ $1, R12 + MOVBLZX CX, SI + CMPL SI, DX + JE LBB11_36 + JMP LBB11_40 -LBB11_38: - SHRL $8, DX - MOVBLSX 1(R15)(AX*1), SI - INCQ AX - MOVBLZX DX, DI - CMPL DI, SI - JE LBB11_38 - JMP LBB11_39 - -LBB11_41: - DECQ AX - MOVQ AX, -48(BP) - MOVQ $-2, CX - CMPB DX, $116 - JNE LBB11_40 - MOVL $1702195828, DX - -LBB11_43: - SHRL $8, DX - MOVBLSX 1(R15)(AX*1), SI - INCQ AX - MOVBLZX DX, DI - CMPL DI, SI - JE LBB11_43 +LBB11_37: + ADDQ $-1, R12 + MOVQ $-2, AX + CMPB CX, $110 + JNE LBB11_26 + MOVL $1819047278, CX LBB11_39: - MOVQ AX, -48(BP) + SHRL $8, CX + MOVBLSX 1(R15)(R12*1), DX + ADDQ $1, R12 + MOVBLZX CX, SI + CMPL SI, DX + JE LBB11_39 + JMP LBB11_40 + +LBB11_41: + ADDQ $-1, R12 + MOVQ $-2, AX + CMPB CX, $116 + JNE LBB11_26 + MOVL $1702195828, CX + +LBB11_43: + SHRL $8, CX + MOVBLSX 1(R15)(R12*1), DX + ADDQ $1, R12 + MOVBLZX CX, SI + CMPL SI, DX + JE LBB11_43 LBB11_40: - MOVQ AX, BX - MOVQ CX, 0(R14) - JMP LBB11_50 + MOVQ R12, -48(BP) + MOVQ AX, 0(R14) + JMP LBB11_49 + +LBB11_44: + MOVQ $-1, R13 + JMP LBB11_47 LBB11_45: - SUBQ R15, R12 - MOVQ R12, -48(BP) - MOVQ $-1, R13 - JMP LBB11_48 - -LBB11_46: NOTQ AX ADDQ AX, R12 +LBB11_46: + MOVQ $-2, R13 + LBB11_47: SUBQ R15, R12 MOVQ R12, -48(BP) - MOVQ $-2, R13 LBB11_48: - MOVQ R12, BX - -LBB11_49: MOVQ -56(BP), AX MOVQ R13, 0(AX) -LBB11_50: - MOVQ BX, AX +LBB11_49: + MOVQ R12, AX ADDQ $40, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 @@ -3994,136 +4033,136 @@ LBB11_50: // .set L11_0_set_17, LBB11_17-LJTI11_0 // .set L11_0_set_18, LBB11_18-LJTI11_0 // .set L11_0_set_21, LBB11_21-LJTI11_0 -// .set L11_0_set_23, LBB11_23-LJTI11_0 -// .set L11_0_set_26, LBB11_26-LJTI11_0 // .set L11_0_set_27, LBB11_27-LJTI11_0 +// .set L11_0_set_30, LBB11_30-LJTI11_0 +// .set L11_0_set_31, LBB11_31-LJTI11_0 LJTI11_0: - LONG $0xfffffda2 // .long L11_0_set_10 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdc5 // .long L11_0_set_12 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffe18 // .long L11_0_set_14 - LONG $0xfffffd07 // .long L11_0_set_2 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffd07 // .long L11_0_set_2 - LONG $0xfffffd07 // .long L11_0_set_2 - LONG $0xfffffd07 // .long L11_0_set_2 - LONG $0xfffffd07 // .long L11_0_set_2 - LONG $0xfffffd07 // .long L11_0_set_2 - LONG $0xfffffd07 // .long L11_0_set_2 - LONG $0xfffffd07 // .long L11_0_set_2 - LONG $0xfffffd07 // .long L11_0_set_2 - LONG $0xfffffd07 // .long L11_0_set_2 - LONG $0xfffffd07 // .long L11_0_set_2 - LONG $0xfffffe27 // .long L11_0_set_15 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffe36 // .long L11_0_set_16 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffe46 // .long L11_0_set_17 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffe55 // .long L11_0_set_18 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffe84 // .long L11_0_set_21 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffeb4 // .long L11_0_set_23 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffed4 // .long L11_0_set_26 - LONG $0xfffffdb2 // .long L11_0_set_11 - LONG $0xfffffee4 // .long L11_0_set_27 + LONG $0xfffffd91 // .long L11_0_set_10 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffdb5 // .long L11_0_set_12 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffe0b // .long L11_0_set_14 + LONG $0xfffffcfd // .long L11_0_set_2 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffcfd // .long L11_0_set_2 + LONG $0xfffffcfd // .long L11_0_set_2 + LONG $0xfffffcfd // .long L11_0_set_2 + LONG $0xfffffcfd // .long L11_0_set_2 + LONG $0xfffffcfd // .long L11_0_set_2 + LONG $0xfffffcfd // .long L11_0_set_2 + LONG $0xfffffcfd // .long L11_0_set_2 + LONG $0xfffffcfd // .long L11_0_set_2 + LONG $0xfffffcfd // .long L11_0_set_2 + LONG $0xfffffcfd // .long L11_0_set_2 + LONG $0xfffffe1f // .long L11_0_set_15 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffe33 // .long L11_0_set_16 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffe43 // .long L11_0_set_17 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffe57 // .long L11_0_set_18 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffe86 // .long L11_0_set_21 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffeb6 // .long L11_0_set_27 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xfffffef6 // .long L11_0_set_30 + LONG $0xfffffda1 // .long L11_0_set_11 + LONG $0xffffff06 // .long L11_0_set_31 LCPI12_0: QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' @@ -4140,7 +4179,6 @@ LCPI12_3: _advance_ns: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - BYTE $0x53 // pushq %rbx MOVQ 0(DX), R8 CMPQ R8, SI JAE LBB12_6 @@ -4152,14 +4190,14 @@ _advance_ns: ADDB $-9, AX CMPB AX, $1 JBE LBB12_6 - MOVQ R8, R10 + MOVQ R8, AX JMP LBB12_5 LBB12_6: - LEAQ 1(R8), R10 - CMPQ R10, SI + LEAQ 1(R8), AX + CMPQ AX, SI JAE LBB12_10 - MOVB 0(DI)(R10*1), CX + MOVB 0(DI)(AX*1), CX CMPB CX, $13 JE LBB12_10 CMPB CX, $32 @@ -4169,10 +4207,10 @@ LBB12_6: JA LBB12_5 LBB12_10: - LEAQ 2(R8), R10 - CMPQ R10, SI + LEAQ 2(R8), AX + CMPQ AX, SI JAE LBB12_14 - MOVB 0(DI)(R10*1), CX + MOVB 0(DI)(AX*1), CX CMPB CX, $13 JE LBB12_14 CMPB CX, $32 @@ -4182,10 +4220,10 @@ LBB12_10: JA LBB12_5 LBB12_14: - LEAQ 3(R8), R10 - CMPQ R10, SI + LEAQ 3(R8), AX + CMPQ AX, SI JAE LBB12_18 - MOVB 0(DI)(R10*1), CX + MOVB 0(DI)(AX*1), CX CMPB CX, $13 JE LBB12_18 CMPB CX, $32 @@ -4195,59 +4233,55 @@ LBB12_14: JA LBB12_5 LBB12_18: - LEAQ 4(R8), R9 - CMPQ R9, SI + ADDQ $4, R8 + CMPQ R8, SI JAE LBB12_19 - LEAQ 0(DI)(R9*1), R10 - MOVQ SI, BX - SUBQ R9, BX + LEAQ 0(DI)(R8*1), R9 + MOVQ SI, R11 + SUBQ R8, R11 JE LBB12_27 - MOVL R10, AX + MOVL R9, AX ANDL $15, AX TESTQ AX, AX JE LBB12_27 - LEAQ 0(DI)(R8*1), R10 - MOVQ SI, BX - SUBQ R8, BX - LEAQ -5(BX), R8 - XORL AX, AX + MOVL $5, R10 + SUBQ SI, R10 MOVQ $4294977024, R9 LBB12_23: - MOVBLSX 4(R10)(AX*1), CX + MOVBLSX 0(DI)(R8*1), CX CMPL CX, $32 - JA LBB12_25 + JA LBB12_42 BTQ CX, R9 - JAE LBB12_25 - LEAQ 1(AX), R11 - CMPQ R8, AX + JAE LBB12_42 + LEAQ 0(R10)(R8*1), AX + LEAQ 1(R8), CX + CMPQ AX, $4 JE LBB12_26 - LEAQ 5(R10)(AX*1), CX - ANDL $15, CX - MOVQ R11, AX - TESTQ CX, CX + LEAL 0(DI)(R8*1), AX + ADDL $1, AX + ANDL $15, AX + MOVQ CX, R8 + TESTQ AX, AX JNE LBB12_23 LBB12_26: - LEAQ 4(R11)(R10*1), R10 - SUBQ R11, BX - ADDQ $-4, BX + LEAQ 0(DI)(CX*1), R9 + MOVQ SI, R11 + SUBQ CX, R11 LBB12_27: - CMPQ BX, $16 + CMPQ R11, $16 JB LBB12_33 - LEAQ -16(BX), R8 - MOVQ R8, AX - ANDQ $-16, AX - LEAQ 16(AX)(R10*1), R9 - ANDL $15, R8 - QUAD $0xfffffe92056ffac5 // vmovdqu $-366(%rip), %xmm0 /* LCPI12_0(%rip) */ - QUAD $0xfffffe9a0d6ffac5 // vmovdqu $-358(%rip), %xmm1 /* LCPI12_1(%rip) */ - QUAD $0xfffffea2156ffac5 // vmovdqu $-350(%rip), %xmm2 /* LCPI12_2(%rip) */ - QUAD $0xfffffeaa1d6ffac5 // vmovdqu $-342(%rip), %xmm3 /* LCPI12_3(%rip) */ + MOVQ DI, CX + SUBQ R9, CX + QUAD $0xfffffea7056ffac5 // vmovdqu $-345(%rip), %xmm0 /* LCPI12_0(%rip) */ + QUAD $0xfffffeaf0d6ffac5 // vmovdqu $-337(%rip), %xmm1 /* LCPI12_1(%rip) */ + QUAD $0xfffffeb7156ffac5 // vmovdqu $-329(%rip), %xmm2 /* LCPI12_2(%rip) */ + QUAD $0xfffffebf1d6ffac5 // vmovdqu $-321(%rip), %xmm3 /* LCPI12_3(%rip) */ LBB12_29: - LONG $0x6f79c1c4; BYTE $0x22 // vmovdqa (%r10), %xmm4 + LONG $0x6f79c1c4; BYTE $0x21 // vmovdqa (%r9), %xmm4 LONG $0xe874d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm5 LONG $0xf174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm6 LONG $0xeeebd1c5 // vpor %xmm6, %xmm5, %xmm5 @@ -4258,82 +4292,70 @@ LBB12_29: LONG $0xc4d7f9c5 // vpmovmskb %xmm4, %eax CMPW AX, $-1 JNE LBB12_30 - ADDQ $16, R10 - ADDQ $-16, BX - CMPQ BX, $15 + ADDQ $16, R9 + ADDQ $-16, R11 + ADDQ $-16, CX + CMPQ R11, $15 JA LBB12_29 - MOVQ R8, BX - MOVQ R9, R10 LBB12_33: - TESTQ BX, BX - JE LBB12_42 - LEAQ 0(R10)(BX*1), R8 - INCQ R10 - MOVQ $4294977024, R9 + TESTQ R11, R11 + JE LBB12_40 + LEAQ 0(R9)(R11*1), R8 + XORL CX, CX + MOVQ $4294977024, R10 LBB12_35: - MOVBLSX -1(R10), AX + MOVBLSX 0(R9)(CX*1), AX CMPL AX, $32 JA LBB12_37 - BTQ AX, R9 + BTQ AX, R10 JAE LBB12_37 - DECQ BX - INCQ R10 - TESTQ BX, BX + ADDQ $1, CX + CMPQ R11, CX JNE LBB12_35 - MOVQ R8, R10 + MOVQ R8, R9 -LBB12_42: - SUBQ DI, R10 - CMPQ R10, SI - JB LBB12_5 - JMP LBB12_44 +LBB12_40: + SUBQ DI, R9 + +LBB12_41: + MOVQ R9, R8 + JMP LBB12_42 LBB12_19: - MOVQ R9, 0(DX) - JMP LBB12_44 + MOVQ R8, 0(DX) + JMP LBB12_43 LBB12_30: MOVWLZX AX, AX - SUBQ DI, R10 NOTL AX - BSFL AX, AX - ADDQ AX, R10 - CMPQ R10, SI - JB LBB12_5 - JMP LBB12_44 + BSFL AX, R8 + SUBQ CX, R8 -LBB12_25: - ADDQ AX, R10 - MOVQ DI, AX - NOTQ AX - LEAQ 5(AX)(R10*1), R10 - CMPQ R10, SI - JAE LBB12_44 +LBB12_42: + MOVQ R8, AX + CMPQ R8, SI + JAE LBB12_43 LBB12_5: - LEAQ 1(R10), AX - MOVQ AX, 0(DX) - MOVB 0(DI)(R10*1), AX + LEAQ 1(AX), CX + MOVQ CX, 0(DX) + MOVB 0(DI)(AX*1), AX MOVBLSX AX, AX - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp + BYTE $0x5d // popq %rbp + RET + +LBB12_43: + XORL AX, AX + MOVBLSX AX, AX + BYTE $0x5d // popq %rbp RET LBB12_37: - MOVQ DI, AX - NOTQ AX - ADDQ AX, R10 - CMPQ R10, SI - JB LBB12_5 - -LBB12_44: - XORL AX, AX - MOVBLSX AX, AX - BYTE $0x5b // popq %rbx - BYTE $0x5d // popq %rbp - RET + SUBQ DI, R9 + ADDQ CX, R9 + JMP LBB12_41 _vstring: BYTE $0x55 // pushq %rbp @@ -4350,7 +4372,7 @@ _vstring: MOVQ 0(SI), R12 LEAQ -40(BP), DX MOVQ R12, SI - LONG $0x000060e8; BYTE $0x00 // callq _advance_string + LONG $0x000070e8; BYTE $0x00 // callq _advance_string TESTQ AX, AX JS LBB13_1 MOVQ AX, 0(BX) @@ -4383,164 +4405,631 @@ LCPI14_0: LCPI14_1: QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +LCPI14_2: + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + _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 - SUBQ $16, SP - MOVQ 8(DI), R12 - SUBQ SI, R12 - JE LBB14_17 - MOVQ 0(DI), AX - MOVQ AX, -48(BP) - ADDQ AX, SI - MOVQ DX, -56(BP) - MOVQ $-1, 0(DX) - CMPQ R12, $64 - JB LBB14_18 - MOVL R12, R9 - ANDL $63, R9 - MOVQ $-1, R14 - XORL R15, R15 - QUAD $0xffffff8a056ffac5 // vmovdqu $-118(%rip), %xmm0 /* LCPI14_0(%rip) */ - QUAD $0xffffff920d6ffac5 // vmovdqu $-110(%rip), %xmm1 /* LCPI14_1(%rip) */ - MOVQ -48(BP), DX + 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 $24, SP + MOVQ DX, -56(BP) + TESTB $32, CX + JNE LBB14_12 + MOVQ 8(DI), R15 + SUBQ SI, R15 + JE LBB14_111 + MOVQ 0(DI), R14 + MOVQ -56(BP), AX + MOVQ $-1, 0(AX) + CMPQ R15, $64 + JB LBB14_112 + MOVQ SI, BX + NOTQ BX + MOVQ $-1, -48(BP) + XORL R11, R11 + QUAD $0xffffff74056ffac5 // vmovdqu $-140(%rip), %xmm0 /* LCPI14_0(%rip) */ + QUAD $0xffffff7c0d6ffac5 // vmovdqu $-132(%rip), %xmm1 /* LCPI14_1(%rip) */ + MOVQ $6148914691236517205, R10 -LBB14_3: - LONG $0x166ffac5 // vmovdqu (%rsi), %xmm2 - LONG $0x5e6ffac5; BYTE $0x10 // vmovdqu $16(%rsi), %xmm3 - LONG $0x666ffac5; BYTE $0x20 // vmovdqu $32(%rsi), %xmm4 - LONG $0x6e6ffac5; BYTE $0x30 // vmovdqu $48(%rsi), %xmm5 - LONG $0xf074e9c5 // vpcmpeqb %xmm0, %xmm2, %xmm6 - LONG $0xded7f9c5 // vpmovmskb %xmm6, %ebx - LONG $0xf074e1c5 // vpcmpeqb %xmm0, %xmm3, %xmm6 - LONG $0xced7f9c5 // vpmovmskb %xmm6, %ecx - LONG $0xf074d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm6 - LONG $0xc6d7f9c5 // vpmovmskb %xmm6, %eax - LONG $0xf074d1c5 // vpcmpeqb %xmm0, %xmm5, %xmm6 - LONG $0xeed779c5 // vpmovmskb %xmm6, %r13d - LONG $0xd174e9c5 // vpcmpeqb %xmm1, %xmm2, %xmm2 - LONG $0xfad7f9c5 // vpmovmskb %xmm2, %edi - LONG $0xd174e1c5 // vpcmpeqb %xmm1, %xmm3, %xmm2 - LONG $0xd2d779c5 // vpmovmskb %xmm2, %r10d - LONG $0xd174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm2 - LONG $0xdad779c5 // vpmovmskb %xmm2, %r11d - LONG $0xd174d1c5 // vpcmpeqb %xmm1, %xmm5, %xmm2 - LONG $0xc2d779c5 // vpmovmskb %xmm2, %r8d - SHLQ $48, R13 - SHLQ $32, AX - SHLQ $16, CX - ORQ CX, BX - ORQ AX, BX - SHLQ $48, R8 - SHLQ $32, R11 - SHLQ $16, R10 - ORQ R10, DI - ORQ R11, DI - ORQ R8, DI - JE LBB14_5 - CMPQ R14, $-1 - JE LBB14_8 - -LBB14_5: - ORQ R13, BX - MOVQ DI, AX - ORQ R15, AX - JNE LBB14_9 - -LBB14_6: - TESTQ BX, BX - JNE LBB14_15 +LBB14_4: + LONG $0x6f7ac1c4; WORD $0x3614 // vmovdqu (%r14,%rsi), %xmm2 + LONG $0x6f7ac1c4; WORD $0x365c; BYTE $0x10 // vmovdqu $16(%r14,%rsi), %xmm3 + LONG $0x6f7ac1c4; WORD $0x3664; BYTE $0x20 // vmovdqu $32(%r14,%rsi), %xmm4 + LONG $0x6f7ac1c4; WORD $0x366c; BYTE $0x30 // vmovdqu $48(%r14,%rsi), %xmm5 + LONG $0xf074e9c5 // vpcmpeqb %xmm0, %xmm2, %xmm6 + LONG $0xe6d779c5 // vpmovmskb %xmm6, %r12d + LONG $0xf074e1c5 // vpcmpeqb %xmm0, %xmm3, %xmm6 + LONG $0xd6d7f9c5 // vpmovmskb %xmm6, %edx + LONG $0xf074d9c5 // vpcmpeqb %xmm0, %xmm4, %xmm6 + LONG $0xc6d7f9c5 // vpmovmskb %xmm6, %eax + LONG $0xf074d1c5 // vpcmpeqb %xmm0, %xmm5, %xmm6 + LONG $0xfed7f9c5 // vpmovmskb %xmm6, %edi + LONG $0xd174e9c5 // vpcmpeqb %xmm1, %xmm2, %xmm2 + LONG $0xead779c5 // vpmovmskb %xmm2, %r13d + LONG $0xd174e1c5 // vpcmpeqb %xmm1, %xmm3, %xmm2 + LONG $0xcad7f9c5 // vpmovmskb %xmm2, %ecx + LONG $0xd174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm2 + LONG $0xc2d779c5 // vpmovmskb %xmm2, %r8d + LONG $0xd174d1c5 // vpcmpeqb %xmm1, %xmm5, %xmm2 + LONG $0xcad779c5 // vpmovmskb %xmm2, %r9d + SHLQ $48, DI + SHLQ $32, AX + ORQ DI, AX + SHLQ $16, DX + ORQ AX, DX + ORQ DX, R12 + SHLQ $48, R9 + SHLQ $32, R8 + ORQ R9, R8 + SHLQ $16, CX + ORQ R8, CX + ORQ CX, R13 + JNE LBB14_8 + TESTQ R11, R11 + JNE LBB14_10 + XORL R11, R11 + TESTQ R12, R12 + JNE LBB14_11 LBB14_7: + ADDQ $-64, R15 + ADDQ $-64, BX ADDQ $64, SI - ADDQ $-64, R12 - CMPQ R12, $63 - JA LBB14_3 - JMP LBB14_10 + CMPQ R15, $63 + JA LBB14_4 + JMP LBB14_70 LBB14_8: - MOVQ SI, AX - SUBQ DX, AX - BSFQ DI, R14 - ADDQ AX, R14 + CMPQ -48(BP), $-1 + JNE LBB14_10 + BSFQ R13, CX + ADDQ SI, CX MOVQ -56(BP), AX - MOVQ R14, 0(AX) - ORQ R13, BX - MOVQ DI, AX - ORQ R15, AX - JE LBB14_6 - -LBB14_9: - MOVQ R15, AX - NOTQ AX - ANDQ DI, AX - LEAQ 0(AX)(AX*1), R8 - ORQ R15, R8 - MOVQ R8, CX - NOTQ CX - ANDQ DI, CX - MOVQ $-6148914691236517206, DI - ANDQ DI, CX - XORL R15, R15 - ADDQ AX, CX - SETCS R15 - ADDQ CX, CX - MOVQ $6148914691236517205, AX - XORQ AX, CX - ANDQ R8, CX - NOTQ CX - ANDQ CX, BX - TESTQ BX, BX - JE LBB14_7 - JMP LBB14_15 + MOVQ CX, -48(BP) + MOVQ CX, 0(AX) LBB14_10: - MOVQ R9, R12 - CMPQ R12, $32 - JB LBB14_22 + MOVQ R11, AX + NOTQ AX + ANDQ R13, AX + LEAQ 0(AX)(AX*1), CX + ORQ R11, CX + MOVQ CX, DX + NOTQ DX + ANDQ R13, DX + MOVQ $-6148914691236517206, DI + ANDQ DI, DX + XORL R11, R11 + ADDQ AX, DX + SETCS R11 + ADDQ DX, DX + XORQ R10, DX + ANDQ CX, DX + NOTQ DX + ANDQ DX, R12 + TESTQ R12, R12 + JE LBB14_7 LBB14_11: - LONG $0x066ffac5 // vmovdqu (%rsi), %xmm0 - LONG $0x4e6ffac5; BYTE $0x10 // vmovdqu $16(%rsi), %xmm1 - QUAD $0xfffffe43156ffac5 // vmovdqu $-445(%rip), %xmm2 /* LCPI14_0(%rip) */ - QUAD $0xfffffe4b1d6ffac5 // vmovdqu $-437(%rip), %xmm3 /* LCPI14_1(%rip) */ - LONG $0xe274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm4 - LONG $0xfcd7f9c5 // vpmovmskb %xmm4, %edi - LONG $0xd274f1c5 // vpcmpeqb %xmm2, %xmm1, %xmm2 - LONG $0xdad7f9c5 // vpmovmskb %xmm2, %ebx - LONG $0xc374f9c5 // vpcmpeqb %xmm3, %xmm0, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - LONG $0xc374f1c5 // vpcmpeqb %xmm3, %xmm1, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - SHLQ $16, BX - SHLQ $16, CX - ORQ CX, AX - JE LBB14_13 - CMPQ R14, $-1 - JE LBB14_19 + BSFQ R12, AX + SUBQ BX, AX + JMP LBB14_108 -LBB14_13: - ORQ DI, BX - MOVQ AX, CX - ORQ R15, CX - JNE LBB14_20 +LBB14_12: + MOVQ 8(DI), R13 + SUBQ SI, R13 + JE LBB14_111 + MOVQ 0(DI), R14 + ADDQ R14, SI + MOVQ -56(BP), AX + MOVQ $-1, 0(AX) + MOVQ R14, -48(BP) + NEGQ R14 + MOVQ $-1, -64(BP) + QUAD $0xfffffe15056f7ac5 // vmovdqu $-491(%rip), %xmm8 /* LCPI14_0(%rip) */ + QUAD $0xfffffe1d0d6f7ac5 // vmovdqu $-483(%rip), %xmm9 /* LCPI14_1(%rip) */ + QUAD $0xfffffe25156ffac5 // vmovdqu $-475(%rip), %xmm2 /* LCPI14_2(%rip) */ + LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 LBB14_14: - TESTQ BX, BX - JE LBB14_21 - -LBB14_15: - BSFQ BX, AX - SUBQ DX, SI - LEAQ 1(SI)(AX*1), AX + CMPQ R13, $64 + JB LBB14_63 + LEAQ 0(R14)(SI*1), R15 + XORL R11, R11 + XORL R12, R12 LBB14_16: - ADDQ $16, SP + LONG $0x6f7aa1c4; WORD $0x1e24 // vmovdqu (%rsi,%r11), %xmm4 + LONG $0x6f7aa1c4; WORD $0x1e6c; BYTE $0x10 // vmovdqu $16(%rsi,%r11), %xmm5 + LONG $0x6f7aa1c4; WORD $0x1e7c; BYTE $0x20 // vmovdqu $32(%rsi,%r11), %xmm7 + LONG $0x6f7aa1c4; WORD $0x1e74; BYTE $0x30 // vmovdqu $48(%rsi,%r11), %xmm6 + LONG $0xc474b9c5 // vpcmpeqb %xmm4, %xmm8, %xmm0 + LONG $0xc0d779c5 // vpmovmskb %xmm0, %r8d + LONG $0xc574b9c5 // vpcmpeqb %xmm5, %xmm8, %xmm0 + LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx + LONG $0xc774b9c5 // vpcmpeqb %xmm7, %xmm8, %xmm0 + LONG $0xf8d7f9c5 // vpmovmskb %xmm0, %edi + LONG $0xc674b9c5 // vpcmpeqb %xmm6, %xmm8, %xmm0 + LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax + LONG $0xc574b1c5 // vpcmpeqb %xmm5, %xmm9, %xmm0 + LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d + LONG $0xc774b1c5 // vpcmpeqb %xmm7, %xmm9, %xmm0 + SHLQ $48, AX + SHLQ $32, DI + ORQ AX, DI + LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax + LONG $0xc674b1c5 // vpcmpeqb %xmm6, %xmm9, %xmm0 + SHLQ $16, CX + ORQ DI, CX + LONG $0xd8d7f9c5 // vpmovmskb %xmm0, %ebx + LONG $0xc564e9c5 // vpcmpgtb %xmm5, %xmm2, %xmm0 + LONG $0xcb64d1c5 // vpcmpgtb %xmm3, %xmm5, %xmm1 + LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 + ORQ CX, R8 + LONG $0xf8d7f9c5 // vpmovmskb %xmm0, %edi + LONG $0xc764e9c5 // vpcmpgtb %xmm7, %xmm2, %xmm0 + LONG $0xcb64c1c5 // vpcmpgtb %xmm3, %xmm7, %xmm1 + LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 + SHLQ $48, BX + SHLQ $32, AX + ORQ BX, AX + LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx + LONG $0xc664e9c5 // vpcmpgtb %xmm6, %xmm2, %xmm0 + LONG $0xcb64c9c5 // vpcmpgtb %xmm3, %xmm6, %xmm1 + LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 + LONG $0xcc74b1c5 // vpcmpeqb %xmm4, %xmm9, %xmm1 + SHLQ $16, R9 + ORQ AX, R9 + LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax + SHLQ $48, AX + SHLQ $32, CX + ORQ AX, CX + LONG $0xc7d7f9c5 // vpmovmskb %xmm7, %eax + SHLQ $16, DI + ORQ CX, DI + LONG $0xced7f9c5 // vpmovmskb %xmm6, %ecx + SHLQ $48, CX + SHLQ $32, AX + ORQ CX, AX + LONG $0xcdd7f9c5 // vpmovmskb %xmm5, %ecx + SHLQ $16, CX + ORQ AX, CX + LONG $0xd1d779c5 // vpmovmskb %xmm1, %r10d + ORQ R9, R10 + JNE LBB14_23 + TESTQ R12, R12 + JNE LBB14_25 + XORL R12, R12 + +LBB14_19: + LONG $0xc464e9c5 // vpcmpgtb %xmm4, %xmm2, %xmm0 + LONG $0xcb64d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm1 + LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 + LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax + LONG $0xd4d7f9c5 // vpmovmskb %xmm4, %edx + ORQ AX, DI + ORQ DX, CX + TESTQ R8, R8 + JNE LBB14_26 + TESTQ DI, DI + JNE LBB14_68 + TESTQ CX, CX + JNE LBB14_46 + ADDQ $-64, R13 + ADDQ $64, R11 + CMPQ R13, $63 + JA LBB14_16 + JMP LBB14_47 + +LBB14_23: + CMPQ -64(BP), $-1 + JNE LBB14_25 + BSFQ R10, DX + ADDQ R15, DX + ADDQ R11, DX + MOVQ -56(BP), AX + MOVQ DX, -64(BP) + MOVQ DX, 0(AX) + +LBB14_25: + MOVQ R12, AX + NOTQ AX + ANDQ R10, AX + LEAQ 0(AX)(AX*1), R9 + ORQ R12, R9 + MOVQ R9, BX + NOTQ BX + ANDQ R10, BX + MOVQ $-6148914691236517206, DX + ANDQ DX, BX + XORL R12, R12 + ADDQ AX, BX + SETCS R12 + ADDQ BX, BX + MOVQ $6148914691236517205, AX + XORQ AX, BX + ANDQ R9, BX + NOTQ BX + ANDQ BX, R8 + JMP LBB14_19 + +LBB14_26: + MOVL $64, R15 + MOVL $64, R9 + TESTQ DI, DI + JE LBB14_28 + BSFQ DI, R9 + +LBB14_28: + BSFQ R8, AX + TESTQ CX, CX + JE LBB14_30 + BSFQ CX, R15 + +LBB14_30: + CMPQ R9, AX + JB LBB14_75 + CMPQ R15, AX + JAE LBB14_67 + +LBB14_32: + ADDQ R11, SI + +LBB14_33: + ADDQ R15, SI + SUBQ R15, R13 + +LBB14_34: + CMPQ R13, $4 + JB LBB14_79 + MOVL 0(SI), AX + MOVL AX, CX + ANDL $12632304, CX + CMPL CX, $8421600 + JNE LBB14_38 + MOVL AX, DI + ANDL $8207, DI + CMPL DI, $8205 + JE LBB14_38 + MOVL $3, CX + TESTL DI, DI + JNE LBB14_44 + +LBB14_38: + MOVL AX, CX + ANDL $49376, CX + CMPL CX, $32960 + JNE LBB14_40 + MOVL AX, DX + MOVL $2, CX + ANDL $30, DX + JNE LBB14_44 + +LBB14_40: + MOVL AX, CX + ANDL $-1061109512, CX + CMPL CX, $-2139062032 + JNE LBB14_106 + MOVL AX, CX + ANDL $12295, CX + JE LBB14_106 + MOVL $4, CX + TESTB $4, AX + JE LBB14_44 + ANDL $12291, AX + JNE LBB14_106 + +LBB14_44: + ADDQ CX, SI + SUBQ CX, R13 + JE LBB14_14 + CMPB 0(SI), $0 + JS LBB14_34 + JMP LBB14_14 + +LBB14_46: + BSFQ CX, R15 + JMP LBB14_32 + +LBB14_47: + ADDQ R11, SI + CMPQ R13, $32 + JB LBB14_78 + +LBB14_48: + LONG $0x266ffac5 // vmovdqu (%rsi), %xmm4 + LONG $0x6e6ffac5; BYTE $0x10 // vmovdqu $16(%rsi), %xmm5 + LONG $0xc474b9c5 // vpcmpeqb %xmm4, %xmm8, %xmm0 + LONG $0xc8d779c5 // vpmovmskb %xmm0, %r9d + LONG $0xc574b9c5 // vpcmpeqb %xmm5, %xmm8, %xmm0 + LONG $0xd0d7f9c5 // vpmovmskb %xmm0, %edx + LONG $0xc474b1c5 // vpcmpeqb %xmm4, %xmm9, %xmm0 + LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx + LONG $0xc574b1c5 // vpcmpeqb %xmm5, %xmm9, %xmm0 + LONG $0xf8d7f9c5 // vpmovmskb %xmm0, %edi + LONG $0xc5d7f9c5 // vpmovmskb %xmm5, %eax + SHLQ $16, DX + ORQ DX, R9 + SHLQ $16, DI + SHLQ $16, AX + ORQ DI, CX + JNE LBB14_64 + TESTQ R12, R12 + JNE LBB14_66 + XORL R12, R12 + +LBB14_51: + LONG $0xc564e9c5 // vpcmpgtb %xmm5, %xmm2, %xmm0 + LONG $0xcb64d1c5 // vpcmpgtb %xmm3, %xmm5, %xmm1 + LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 + LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx + SHLQ $16, CX + LONG $0xd4d7f9c5 // vpmovmskb %xmm4, %edx + ORQ DX, AX + MOVL $64, R15 + MOVL $64, DI + TESTQ R9, R9 + JE LBB14_53 + BSFQ R9, DI + +LBB14_53: + LONG $0xc464e9c5 // vpcmpgtb %xmm4, %xmm2, %xmm0 + LONG $0xcb64d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm1 + LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 + LONG $0xd0d7f9c5 // vpmovmskb %xmm0, %edx + ORQ DX, CX + TESTQ AX, AX + JE LBB14_55 + BSFQ AX, R15 + +LBB14_55: + TESTQ CX, CX + JE LBB14_57 + BSFQ CX, BX + JMP LBB14_58 + +LBB14_57: + MOVL $64, BX + +LBB14_58: + TESTQ R9, R9 + JE LBB14_61 + CMPQ BX, DI + JB LBB14_113 + CMPQ R15, DI + JB LBB14_33 + JMP LBB14_76 + +LBB14_61: + TESTQ CX, CX + JNE LBB14_113 + TESTQ AX, AX + JNE LBB14_33 + JMP LBB14_77 + +LBB14_63: + XORL R12, R12 + CMPQ R13, $32 + JAE LBB14_48 + JMP LBB14_78 + +LBB14_64: + CMPQ -64(BP), $-1 + JNE LBB14_66 + MOVQ SI, DX + SUBQ -48(BP), DX + BSFQ CX, DI + ADDQ DX, DI + MOVQ -56(BP), DX + MOVQ DI, -64(BP) + MOVQ DI, 0(DX) + +LBB14_66: + MOVL R12, DX + NOTL DX + ANDL CX, DX + LEAL 0(R12)(DX*2), DI + LEAL 0(DX)(DX*1), BX + NOTL BX + ANDL CX, BX + ANDL $-1431655766, BX + XORL R12, R12 + ADDL DX, BX + SETCS R12 + ADDL BX, BX + XORL $1431655765, BX + ANDL DI, BX + NOTL BX + ANDL BX, R9 + JMP LBB14_51 + +LBB14_67: + SUBQ -48(BP), SI + ADDQ AX, SI + LEAQ 0(R11)(SI*1), AX + ADDQ $1, AX + JMP LBB14_108 + +LBB14_68: + MOVQ $-2, AX + CMPQ -64(BP), $-1 + JNE LBB14_108 + BSFQ DI, CX + SUBQ -48(BP), SI + ADDQ CX, SI + ADDQ R11, SI + MOVQ -56(BP), CX + MOVQ SI, 0(CX) + JMP LBB14_108 + +LBB14_70: + ADDQ R14, SI + CMPQ R15, $32 + JB LBB14_118 + +LBB14_71: + LONG $0x066ffac5 // vmovdqu (%rsi), %xmm0 + LONG $0x4e6ffac5; BYTE $0x10 // vmovdqu $16(%rsi), %xmm1 + QUAD $0xfffff9b0156ffac5 // vmovdqu $-1616(%rip), %xmm2 /* LCPI14_0(%rip) */ + QUAD $0xfffff9b81d6ffac5 // vmovdqu $-1608(%rip), %xmm3 /* LCPI14_1(%rip) */ + LONG $0xe274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm4 + LONG $0xc4d7f9c5 // vpmovmskb %xmm4, %eax + LONG $0xd274f1c5 // vpcmpeqb %xmm2, %xmm1, %xmm2 + LONG $0xcad7f9c5 // vpmovmskb %xmm2, %ecx + LONG $0xc374f9c5 // vpcmpeqb %xmm3, %xmm0, %xmm0 + LONG $0xf8d7f9c5 // vpmovmskb %xmm0, %edi + LONG $0xc374f1c5 // vpcmpeqb %xmm3, %xmm1, %xmm0 + LONG $0xd0d7f9c5 // vpmovmskb %xmm0, %edx + SHLQ $16, CX + ORQ CX, AX + SHLQ $16, DX + ORQ DX, DI + JNE LBB14_114 + TESTQ R11, R11 + JNE LBB14_116 + XORL R11, R11 + TESTQ AX, AX + JE LBB14_117 + +LBB14_74: + BSFQ AX, AX + SUBQ R14, SI + ADDQ SI, AX + ADDQ $1, AX + JMP LBB14_108 + +LBB14_75: + SUBQ -48(BP), SI + ADDQ R9, SI + ADDQ R11, SI + JMP LBB14_107 + +LBB14_76: + SUBQ -48(BP), SI + LEAQ 0(SI)(DI*1), AX + ADDQ $1, AX + JMP LBB14_108 + +LBB14_77: + ADDQ $32, SI + ADDQ $-32, R13 + +LBB14_78: + TESTQ R12, R12 + JNE LBB14_139 + +LBB14_79: + MOVQ $-1, AX + +LBB14_80: + TESTQ R13, R13 + JE LBB14_108 + MOVBLZX 0(SI), CX + CMPL CX, $34 + JE LBB14_109 + CMPB CX, $92 + JE LBB14_102 + CMPB CX, $31 + JBE LBB14_106 + TESTB CX, CX + JS LBB14_86 + ADDQ $1, SI + ADDQ $-1, R13 + JMP LBB14_80 + +LBB14_86: + CMPQ R13, $4 + JB LBB14_88 + MOVL 0(SI), CX + JMP LBB14_92 + +LBB14_88: + CMPQ R13, $2 + JE LBB14_91 + CMPQ R13, $1 + JE LBB14_92 + MOVBLZX 2(SI), CX + MOVWLZX 0(SI), DX + SHLL $16, CX + ORL DX, CX + JMP LBB14_92 + +LBB14_91: + MOVWLZX 0(SI), CX + +LBB14_92: + MOVL CX, DX + ANDL $12632304, DX + CMPL DX, $8421600 + JNE LBB14_95 + MOVL CX, BX + ANDL $8207, BX + CMPL BX, $8205 + JE LBB14_95 + MOVL $3, DI + TESTL BX, BX + JNE LBB14_101 + +LBB14_95: + MOVL CX, DX + ANDL $49376, DX + CMPL DX, $32960 + JNE LBB14_97 + MOVL CX, DX + MOVL $2, DI + ANDL $30, DX + JNE LBB14_101 + +LBB14_97: + MOVL CX, DX + ANDL $-1061109512, DX + CMPL DX, $-2139062032 + JNE LBB14_106 + MOVL CX, DX + ANDL $12295, DX + JE LBB14_106 + MOVL $4, DI + TESTB $4, CX + JE LBB14_101 + ANDL $12291, CX + JNE LBB14_106 + +LBB14_101: + ADDQ DI, SI + SUBQ DI, R13 + JMP LBB14_80 + +LBB14_102: + CMPQ R13, $1 + JE LBB14_108 + CMPQ -64(BP), $-1 + JNE LBB14_105 + MOVQ SI, DX + SUBQ -48(BP), DX + MOVQ -56(BP), CX + MOVQ DX, -64(BP) + MOVQ DX, 0(CX) + +LBB14_105: + ADDQ $2, SI + ADDQ $-2, R13 + JMP LBB14_80 + +LBB14_106: + SUBQ -48(BP), SI + +LBB14_107: + MOVQ -56(BP), AX + MOVQ SI, 0(AX) + MOVQ $-2, AX + +LBB14_108: + ADDQ $24, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 WORD $0x5d41 // popq %r13 @@ -4549,123 +5038,166 @@ LBB14_16: BYTE $0x5d // popq %rbp RET -LBB14_18: - MOVQ $-1, R14 - XORL R15, R15 - MOVQ -48(BP), DX - CMPQ R12, $32 - JAE LBB14_11 - JMP LBB14_22 +LBB14_109: + SUBQ -48(BP), SI + ADDQ $1, SI + JMP LBB14_131 -LBB14_19: +LBB14_112: + ADDQ R14, SI + MOVQ $-1, -48(BP) + XORL R11, R11 + CMPQ R15, $32 + JAE LBB14_71 + JMP LBB14_118 + +LBB14_113: + SUBQ -48(BP), SI + ADDQ BX, SI + JMP LBB14_107 + +LBB14_114: + CMPQ -48(BP), $-1 + JNE LBB14_116 MOVQ SI, CX - SUBQ DX, CX - BSFQ AX, R14 - ADDQ CX, R14 + SUBQ R14, CX + BSFQ DI, DX + ADDQ CX, DX MOVQ -56(BP), CX - MOVQ R14, 0(CX) - ORQ DI, BX - MOVQ AX, CX - ORQ R15, CX - JE LBB14_14 + MOVQ DX, -48(BP) + MOVQ DX, 0(CX) -LBB14_20: - MOVL R15, CX +LBB14_116: + MOVL R11, CX NOTL CX - ANDL AX, CX - LEAL 0(CX)(CX*1), R8 - ORL R15, R8 - MOVL R8, DI - NOTL DI - ANDL AX, DI - ANDL $-1431655766, DI - XORL R15, R15 - ADDL CX, DI - SETCS R15 - ADDL DI, DI - XORL $1431655765, DI - ANDL R8, DI - NOTL DI + ANDL DI, CX + LEAL 0(R11)(CX*2), DX + LEAL 0(CX)(CX*1), BX + NOTL BX ANDL DI, BX - TESTQ BX, BX - JNE LBB14_15 + ANDL $-1431655766, BX + XORL R11, R11 + ADDL CX, BX + SETCS R11 + ADDL BX, BX + XORL $1431655765, BX + ANDL DX, BX + NOTL BX + ANDL BX, AX + TESTQ AX, AX + JNE LBB14_74 -LBB14_21: +LBB14_117: ADDQ $32, SI - ADDQ $-32, R12 + ADDQ $-32, R15 -LBB14_22: +LBB14_118: + TESTQ R11, R11 + JNE LBB14_134 TESTQ R15, R15 - JNE LBB14_33 - MOVQ $-1, AX - TESTQ R12, R12 - JE LBB14_16 + JE LBB14_130 -LBB14_24: - MOVQ DX, R9 - NOTQ R9 - MOVQ -56(BP), CX - -LBB14_25: - LEAQ 1(SI), DI - MOVBLZX 0(SI), BX - CMPB BX, $34 - JE LBB14_32 - LEAQ -1(R12), R10 - CMPB BX, $92 - JE LBB14_28 - MOVQ R10, R12 - MOVQ DI, SI - TESTQ R10, R10 - JNE LBB14_25 - JMP LBB14_16 - -LBB14_28: - TESTQ R10, R10 - JE LBB14_16 - CMPQ R14, $-1 - JNE LBB14_31 - ADDQ R9, DI - MOVQ DI, 0(CX) - MOVQ DI, R14 - -LBB14_31: - ADDQ $2, SI - ADDQ $-2, R12 - MOVQ R12, R10 - MOVQ -48(BP), DX - TESTQ R10, R10 - JNE LBB14_25 - JMP LBB14_16 - -LBB14_32: - SUBQ DX, DI - MOVQ DI, AX - JMP LBB14_16 - -LBB14_33: - TESTQ R12, R12 - JE LBB14_17 - CMPQ R14, $-1 - JNE LBB14_36 - MOVQ -48(BP), R14 - NOTQ R14 - ADDQ SI, R14 - MOVQ -56(BP), AX - MOVQ R14, 0(AX) - -LBB14_36: - INCQ SI - DECQ R12 - MOVQ -48(BP), DX - MOVQ $-1, AX - TESTQ R12, R12 - JNE LBB14_24 - JMP LBB14_16 - -LBB14_17: +LBB14_120: + MOVQ R14, DI + NOTQ DI + ADDQ $1, DI MOVQ $-1, AX - JMP LBB14_16 + +LBB14_121: + XORL BX, BX + +LBB14_122: + MOVBLZX 0(SI)(BX*1), CX + CMPB CX, $34 + JE LBB14_129 + CMPB CX, $92 + JE LBB14_125 + ADDQ $1, BX + CMPQ R15, BX + JNE LBB14_122 + JMP LBB14_132 + +LBB14_125: + LEAQ -1(R15), CX + CMPQ CX, BX + JE LBB14_108 + CMPQ -48(BP), $-1 + JNE LBB14_128 + LEAQ 0(DI)(SI*1), DX + ADDQ BX, DX + MOVQ -56(BP), CX + MOVQ DX, -48(BP) + MOVQ DX, 0(CX) + +LBB14_128: + ADDQ BX, SI + ADDQ $2, SI + MOVQ R15, CX + SUBQ BX, CX + ADDQ $-2, CX + ADDQ $-2, R15 + CMPQ R15, BX + MOVQ CX, R15 + JNE LBB14_121 + JMP LBB14_108 + +LBB14_129: + ADDQ BX, SI + ADDQ $1, SI + +LBB14_130: + SUBQ R14, SI + +LBB14_131: + MOVQ SI, AX + JMP LBB14_108 + +LBB14_132: + MOVQ $-1, AX + CMPB CX, $34 + JNE LBB14_108 + ADDQ R15, SI + JMP LBB14_130 + +LBB14_134: + TESTQ R15, R15 + JE LBB14_111 + CMPQ -48(BP), $-1 + JNE LBB14_137 + MOVQ R14, CX + NOTQ CX + ADDQ SI, CX + MOVQ -56(BP), AX + MOVQ CX, -48(BP) + MOVQ CX, 0(AX) + +LBB14_137: + ADDQ $1, SI + ADDQ $-1, R15 + TESTQ R15, R15 + JNE LBB14_120 + JMP LBB14_130 + +LBB14_139: + TESTQ R13, R13 + JE LBB14_111 + CMPQ -64(BP), $-1 + JNE LBB14_142 + MOVQ -48(BP), CX + NOTQ CX + ADDQ SI, CX + MOVQ -56(BP), AX + MOVQ CX, -64(BP) + MOVQ CX, 0(AX) + +LBB14_142: + ADDQ $1, SI + ADDQ $-1, R13 + JMP LBB14_79 + +LBB14_111: + MOVQ $-1, AX + JMP LBB14_108 LCPI15_0: LONG $0x43300000 // .long 1127219200 @@ -4674,14 +5206,14 @@ LCPI15_0: LONG $0x00000000 // .long 0 LCPI15_1: - QUAD $0x4330000000000000 // .quad 4841369599423283200 - QUAD $0x4530000000000000 // .quad 4985484787499139072 + QUAD $0x4330000000000000 // .quad 0x4330000000000000 + QUAD $0x4530000000000000 // .quad 0x4530000000000000 LCPI15_2: - QUAD $0x430c6bf526340000 // .quad 4831355200913801216 + QUAD $0x430c6bf526340000 // .quad 0x430c6bf526340000 LCPI15_3: - QUAD $0xc30c6bf526340000 // .quad -4392016835940974592 + QUAD $0xc30c6bf526340000 // .quad 0xc30c6bf526340000 _vnumber: BYTE $0x55 // pushq %rbp @@ -4694,7 +5226,6 @@ _vnumber: SUBQ $56, SP MOVQ DX, BX MOVQ SI, R14 - MOVQ $0, -48(BP) MOVQ 0(SI), AX MOVQ 0(DI), R15 MOVQ 8(DI), R13 @@ -4708,14 +5239,14 @@ _vnumber: CMPQ AX, R13 JAE LBB15_52 MOVB 0(R15)(AX*1), DI - MOVL $1, R9 + MOVL $1, DX CMPB DI, $45 JNE LBB15_4 - INCQ AX + ADDQ $1, AX CMPQ AX, R13 JAE LBB15_52 MOVB 0(R15)(AX*1), DI - MOVL $-1, R9 + MOVL $-1, DX LBB15_4: LEAL -48(DI), CX @@ -4730,130 +5261,122 @@ LBB15_5: LBB15_6: CMPB DI, $48 JNE LBB15_10 - LEAQ 1(AX), SI + LEAQ 1(AX), R8 CMPQ AX, R13 - JAE LBB15_19 - MOVB 0(R15)(SI*1), DX - ADDB $-46, DX - CMPB DX, $55 - JA LBB15_19 - MOVBLZX DX, R8 - MOVQ $36028797027352577, DX - BTQ R8, DX - JAE LBB15_19 + JAE LBB15_22 + MOVB 0(R15)(R8*1), CX + ADDB $-46, CX + CMPB CX, $55 + JA LBB15_22 + MOVBLZX CX, CX + MOVQ $36028797027352577, SI + BTQ CX, SI + JAE LBB15_22 LBB15_10: + MOVL DX, -44(BP) + MOVB $1, CX + MOVL CX, -56(BP) CMPQ AX, R13 - JAE LBB15_18 - CMPB CX, $9 - JA LBB15_20 - LEAQ -1(R13), R8 + JAE LBB15_21 + MOVL $4294967248, R9 + ADDQ $1, AX XORL CX, CX - XORL SI, SI + XORL R8, R8 XORL R12, R12 -LBB15_13: - CMPL SI, $18 - JG LBB15_15 - MOVBQSX DI, DI +LBB15_12: + CMPL R8, $18 + JG LBB15_14 LEAQ 0(R12)(R12*4), DX - LEAQ -48(DI)(DX*2), R12 - INCL SI - JMP LBB15_16 + MOVBLZX DI, DI + ADDL R9, DI + LEAQ 0(DI)(DX*2), R12 + ADDL $1, R8 + JMP LBB15_15 + +LBB15_14: + ADDL $1, CX LBB15_15: - INCL CX - -LBB15_16: - CMPQ R8, AX - JE LBB15_24 - MOVBLZX 1(R15)(AX*1), DI - INCQ AX + CMPQ R13, AX + JE LBB15_23 + MOVBLZX 0(R15)(AX*1), DI LEAL -48(DI), DX + ADDQ $1, AX CMPB DX, $10 - JB LBB15_13 - JMP LBB15_21 + JB LBB15_12 + CMPB DI, $46 + JNE LBB15_24 + MOVQ $8, 0(BX) + CMPQ AX, R13 + JAE LBB15_52 + MOVB 0(R15)(AX*1), DX + ADDB $-48, DX + CMPB DX, $10 + JAE LBB15_5 + MOVL $0, -56(BP) + JMP LBB15_25 -LBB15_18: +LBB15_21: XORL CX, CX - XORL SI, SI + XORL R8, R8 XORL R12, R12 JMP LBB15_25 -LBB15_19: - MOVQ SI, 0(R14) +LBB15_22: + MOVQ R8, 0(R14) JMP LBB15_53 -LBB15_20: - XORL R12, R12 - XORL SI, SI - XORL CX, CX - -LBB15_21: - XORL DX, DX - TESTL CX, CX - SETGT DX - MOVL DX, -52(BP) - MOVL $9, R8 - CMPB DI, $46 - JNE LBB15_26 - INCQ AX - MOVQ $8, 0(BX) - CMPQ AX, R13 - JAE LBB15_52 - MOVB 0(R15)(AX*1), DX - ADDB $-48, DX - MOVL $8, R8 - CMPB DX, $10 - JAE LBB15_5 - JMP LBB15_26 +LBB15_23: + MOVQ R13, AX + JMP LBB15_25 LBB15_24: - MOVQ R13, AX + ADDQ $-1, AX LBB15_25: XORL DX, DX TESTL CX, CX SETGT DX - MOVL DX, -52(BP) - MOVL $9, R8 - -LBB15_26: - TESTL CX, CX - JNE LBB15_35 + MOVL DX, -68(BP) TESTQ R12, R12 - JNE LBB15_35 + JNE LBB15_34 + TESTL CX, CX + JNE LBB15_34 CMPQ AX, R13 - JAE LBB15_33 - MOVL AX, DI - SUBL R13, DI - XORL SI, SI + JAE LBB15_32 + MOVL AX, SI + SUBL R13, SI + XORL R8, R8 XORL CX, CX -LBB15_30: - CMPB 0(R15)(AX*1), $48 - JNE LBB15_34 - INCQ AX - DECL CX - CMPQ R13, AX - JNE LBB15_30 - XORL R12, R12 - CMPL R8, $9 - JE LBB15_55 - JMP LBB15_59 +LBB15_29: + CMPB 0(R15)(AX*1), $48 + JNE LBB15_33 + ADDQ $1, AX + ADDL $-1, CX + CMPQ R13, AX + JNE LBB15_29 + XORL R12, R12 + MOVL -56(BP), AX + TESTB AX, AX + JNE LBB15_55 + JMP LBB15_60 + +LBB15_32: + XORL CX, CX + XORL R8, R8 LBB15_33: - XORL CX, CX - XORL SI, SI - -LBB15_34: XORL R12, R12 -LBB15_35: +LBB15_34: CMPQ AX, R13 JAE LBB15_40 - CMPL SI, $18 + CMPL R8, $18 JG LBB15_40 + MOVL $4294967248, R9 LBB15_37: MOVBLZX 0(R15)(AX*1), DI @@ -4861,38 +5384,39 @@ LBB15_37: CMPB DX, $9 JA LBB15_40 LEAQ 0(R12)(R12*4), DX - LEAQ -48(DI)(DX*2), R12 - DECL CX - INCQ AX + ADDL R9, DI + LEAQ 0(DI)(DX*2), R12 + ADDL $-1, CX + ADDQ $1, AX CMPQ AX, R13 JAE LBB15_40 - LEAL 1(SI), DX - CMPL SI, $18 - MOVL DX, SI + LEAL 1(R8), DX + CMPL R8, $18 + MOVL DX, R8 JL LBB15_37 LBB15_40: CMPQ AX, R13 JAE LBB15_54 - MOVB 0(R15)(AX*1), SI - LEAL -48(SI), DX - CMPB DX, $9 + MOVB 0(R15)(AX*1), DX + LEAL -48(DX), SI + CMPB SI, $9 JA LBB15_46 - LEAQ -1(R13), DI + LEAQ -1(R13), SI LBB15_43: - CMPQ DI, AX - JE LBB15_76 - MOVBLZX 1(R15)(AX*1), SI - INCQ AX - LEAL -48(SI), DX - CMPB DX, $9 + CMPQ SI, AX + JE LBB15_59 + MOVBLZX 1(R15)(AX*1), DX + LEAL -48(DX), DI + ADDQ $1, AX + CMPB DI, $9 JBE LBB15_43 - MOVL $1, -52(BP) + MOVL $1, -68(BP) LBB15_46: - ORB $32, SI - CMPB SI, $101 + ORB $32, DX + CMPB DX, $101 JNE LBB15_54 LEAQ 1(AX), DI MOVQ $8, 0(BX) @@ -4903,7 +5427,7 @@ LBB15_46: JE LBB15_50 MOVL $1, R8 CMPB SI, $43 - JNE LBB15_85 + JNE LBB15_87 LBB15_50: ADDQ $2, AX @@ -4912,9 +5436,10 @@ LBB15_50: XORL DX, DX CMPB SI, $43 SETEQ DX - LEAL -1(DX)(DX*1), R8 + LEAL 0(DX)(DX*1), R8 + ADDL $-1, R8 MOVB 0(R15)(AX*1), SI - JMP LBB15_86 + JMP LBB15_88 LBB15_52: MOVQ R13, 0(R14) @@ -4931,147 +5456,42 @@ LBB15_53: RET LBB15_54: - MOVL CX, DI - MOVQ AX, R13 - CMPL R8, $9 - JNE LBB15_59 + MOVL CX, SI + MOVQ AX, R13 + MOVL -56(BP), AX + TESTB AX, AX + JE LBB15_60 LBB15_55: - TESTL DI, DI + TESTL SI, SI + MOVL -44(BP), DX JNE LBB15_58 MOVQ $-9223372036854775808, AX - MOVLQSX R9, CX + MOVLQSX DX, CX TESTQ R12, R12 - JNS LBB15_80 - MOVQ R12, DX - ANDQ CX, DX - CMPQ DX, AX - JE LBB15_80 + JNS LBB15_69 + MOVQ R12, DI + ANDQ CX, DI + CMPQ DI, AX + JE LBB15_69 LBB15_58: MOVQ $8, 0(BX) + JMP LBB15_61 LBB15_59: - MOVQ $0, -64(BP) - LONG $0x6ef9c1c4; BYTE $0xc4 // vmovq %r12, %xmm0 - QUAD $0xfffffcf60562f9c5 // vpunpckldq $-778(%rip), %xmm0, %xmm0 /* LCPI15_0(%rip) */ - QUAD $0xfffffcfe055cf9c5 // vsubpd $-770(%rip), %xmm0, %xmm0 /* LCPI15_1(%rip) */ - LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd $1, %xmm0, %xmm1 - LONG $0xc058f3c5 // vaddsd %xmm0, %xmm1, %xmm0 - LONG $0x4511fbc5; BYTE $0xd0 // vmovsd %xmm0, $-48(%rbp) - MOVQ R12, AX - SHRQ $52, AX - JE LBB15_71 - -LBB15_60: - MOVQ R11, -80(BP) - MOVQ R10, -88(BP) - LEAQ -48(BP), CX - MOVQ DI, SI - MOVQ R12, DI - MOVQ SI, -72(BP) - MOVL R9, DX - MOVL R9, -56(BP) - LONG $0xffeab1e8; BYTE $0xff // callq _atof_eisel_lemire64 + MOVL $1, -68(BP) + MOVL CX, SI + MOVL -56(BP), AX TESTB AX, AX - JE LBB15_64 - MOVQ -72(BP), SI - MOVL -56(BP), DX - CMPL -52(BP), $0 - JE LBB15_79 - INCQ R12 - LEAQ -64(BP), CX - MOVQ R12, DI - LONG $0xffea8de8; BYTE $0xff // callq _atof_eisel_lemire64 - TESTB AX, AX - JE LBB15_64 - LONG $0x4d10fbc5; BYTE $0xc0 // vmovsd $-64(%rbp), %xmm1 - LONG $0x4510fbc5; BYTE $0xd0 // vmovsd $-48(%rbp), %xmm0 - LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 - JNE LBB15_64 - JNP LBB15_66 - -LBB15_64: - MOVQ 0(R14), AX - ADDQ AX, R15 - MOVQ R13, SI - SUBQ AX, SI - MOVQ R15, DI - MOVQ -88(BP), DX - MOVQ -80(BP), CX - LONG $0xffef39e8; BYTE $0xff // callq _atof_native - -LBB15_65: - LONG $0x4511fbc5; BYTE $0xd0 // vmovsd %xmm0, $-48(%rbp) - -LBB15_66: - LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax - -LBB15_67: - MOVQ $-9223372036854775808, CX - DECQ CX - ANDQ AX, CX - MOVQ $9218868437227405312, DX - CMPQ CX, DX - JNE LBB15_69 - MOVQ $-8, 0(BX) + JNE LBB15_55 + JMP LBB15_60 LBB15_69: - MOVQ AX, 8(BX) - -LBB15_70: - MOVQ R13, 0(R14) - JMP LBB15_53 - -LBB15_71: - LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx - MOVL R9, AX - SHRL $31, AX - SHLQ $63, AX - ORQ CX, AX - MOVQ AX, -48(BP) - TESTQ R12, R12 - JE LBB15_67 - TESTL DI, DI - JE LBB15_67 - LONG $0x6ef9e1c4; BYTE $0xc0 // vmovq %rax, %xmm0 - LEAL -1(DI), AX - CMPL AX, $36 - JA LBB15_77 - CMPL DI, $23 - JL LBB15_81 - MOVLQSX DI, AX - LONG $0xee0d8d48; WORD $0x00bc; BYTE $0x00 // leaq $48366(%rip), %rcx /* _P10_TAB(%rip) */ - QUAD $0xffff50c18459fbc5; BYTE $0xff // vmulsd $-176(%rcx,%rax,8), %xmm0, %xmm0 - LONG $0x4511fbc5; BYTE $0xd0 // vmovsd %xmm0, $-48(%rbp) - MOVL $22, AX - JMP LBB15_82 - -LBB15_76: - MOVL $1, -52(BP) - MOVL CX, DI - CMPL R8, $9 - JE LBB15_55 - JMP LBB15_59 - -LBB15_77: - CMPL DI, $-22 - JB LBB15_60 - NEGL DI - MOVLQSX DI, AX - LONG $0xac0d8d48; WORD $0x00bc; BYTE $0x00 // leaq $48300(%rip), %rcx /* _P10_TAB(%rip) */ - LONG $0x045efbc5; BYTE $0xc1 // vdivsd (%rcx,%rax,8), %xmm0, %xmm0 - JMP LBB15_65 - -LBB15_79: - MOVQ -48(BP), AX - JMP LBB15_67 - -LBB15_80: LONG $0x6ef9c1c4; BYTE $0xc4 // vmovq %r12, %xmm0 IMULQ CX, R12 - QUAD $0xfffffb790562f9c5 // vpunpckldq $-1159(%rip), %xmm0, %xmm0 /* LCPI15_0(%rip) */ - QUAD $0xfffffb81055cf9c5 // vsubpd $-1151(%rip), %xmm0, %xmm0 /* LCPI15_1(%rip) */ + QUAD $0xfffffcd10562f9c5 // vpunpckldq $-815(%rip), %xmm0, %xmm0 /* LCPI15_0(%rip) */ + QUAD $0xfffffcd9055cf9c5 // vsubpd $-807(%rip), %xmm0, %xmm0 /* LCPI15_1(%rip) */ MOVQ R12, 16(BX) LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd $1, %xmm0, %xmm1 LONG $0xc058f3c5 // vaddsd %xmm0, %xmm1, %xmm0 @@ -5079,51 +5499,34 @@ LBB15_80: LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx ORQ AX, CX MOVQ CX, 8(BX) - JMP LBB15_70 + JMP LBB15_86 -LBB15_81: - MOVL DI, AX - -LBB15_82: - QUAD $0xfffffb65052ef9c5 // vucomisd $-1179(%rip), %xmm0 /* LCPI15_2(%rip) */ - JA LBB15_60 - QUAD $0xfffffb5f0d10fbc5 // vmovsd $-1185(%rip), %xmm1 /* LCPI15_3(%rip) */ - LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 - JA LBB15_60 - MOVL AX, AX - LONG $0x330d8d48; WORD $0x00bc; BYTE $0x00 // leaq $48179(%rip), %rcx /* _P10_TAB(%rip) */ - LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0 - JMP LBB15_65 - -LBB15_85: +LBB15_87: MOVQ DI, AX -LBB15_86: +LBB15_88: LEAL -48(SI), DI CMPB DI, $9 JA LBB15_5 - MOVL R9, -56(BP) CMPQ AX, R13 JAE LBB15_93 - CMPB DI, $9 - JA LBB15_93 LEAQ -1(R13), R9 XORL DI, DI -LBB15_90: +LBB15_91: MOVL DI, DX + MOVBLZX SI, SI CMPL DI, $10000 LEAL 0(DX)(DX*4), DI - MOVBLZX SI, SI LEAL -48(SI)(DI*2), DI WORD $0x4d0f; BYTE $0xfa // cmovgel %edx, %edi CMPQ R9, AX JE LBB15_94 MOVBLZX 1(R15)(AX*1), SI - INCQ AX LEAL -48(SI), DX + ADDQ $1, AX CMPB DX, $10 - JB LBB15_90 + JB LBB15_91 JMP LBB15_95 LBB15_93: @@ -5134,48 +5537,172 @@ LBB15_94: MOVQ R13, AX LBB15_95: - IMULL R8, DI - ADDL CX, DI + MOVQ DI, SI + IMULL R8, SI + ADDL CX, SI MOVQ AX, R13 - MOVL -56(BP), R9 - JMP LBB15_59 + +LBB15_60: + MOVL -44(BP), DX + +LBB15_61: + MOVQ $0, -80(BP) + LONG $0x6ef9c1c4; BYTE $0xc4 // vmovq %r12, %xmm0 + QUAD $0xfffffc320562f9c5 // vpunpckldq $-974(%rip), %xmm0, %xmm0 /* LCPI15_0(%rip) */ + QUAD $0xfffffc3a055cf9c5 // vsubpd $-966(%rip), %xmm0, %xmm0 /* LCPI15_1(%rip) */ + LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd $1, %xmm0, %xmm1 + LONG $0xc058f3c5 // vaddsd %xmm0, %xmm1, %xmm0 + LONG $0x4511fbc5; BYTE $0xc0 // vmovsd %xmm0, $-64(%rbp) + MOVQ R12, AX + SHRQ $52, AX + JNE LBB15_74 + LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx + MOVL DX, AX + SHRL $31, AX + SHLQ $63, AX + ORQ CX, AX + MOVQ AX, -64(BP) + TESTL SI, SI + JE LBB15_82 + TESTQ R12, R12 + JE LBB15_82 + LONG $0x6ef9e1c4; BYTE $0xc0 // vmovq %rax, %xmm0 + LEAL -1(SI), AX + CMPL AX, $36 + JA LBB15_67 + CMPL SI, $23 + JL LBB15_70 + LEAL -22(SI), AX + LONG $0x0f0d8d48; WORD $0x00b6; BYTE $0x00 // leaq $46607(%rip), %rcx /* _P10_TAB(%rip) */ + LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0 + LONG $0x4511fbc5; BYTE $0xc0 // vmovsd %xmm0, $-64(%rbp) + MOVL $22, AX + JMP LBB15_71 + +LBB15_67: + CMPL SI, $-22 + JB LBB15_74 + NEGL SI + LONG $0xf0058d48; WORD $0x00b5; BYTE $0x00 // leaq $46576(%rip), %rax /* _P10_TAB(%rip) */ + LONG $0x045efbc5; BYTE $0xf0 // vdivsd (%rax,%rsi,8), %xmm0, %xmm0 + LONG $0x4511fbc5; BYTE $0xc0 // vmovsd %xmm0, $-64(%rbp) + JMP LBB15_78 + +LBB15_70: + MOVL SI, AX + +LBB15_71: + QUAD $0xfffffbb7052ef9c5 // vucomisd $-1097(%rip), %xmm0 /* LCPI15_2(%rip) */ + JA LBB15_74 + QUAD $0xfffffbb50d10fbc5 // vmovsd $-1099(%rip), %xmm1 /* LCPI15_3(%rip) */ + LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 + JA LBB15_74 + MOVL AX, AX + LONG $0xc10d8d48; WORD $0x00b5; BYTE $0x00 // leaq $46529(%rip), %rcx /* _P10_TAB(%rip) */ + LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0 + LONG $0x4511fbc5; BYTE $0xc0 // vmovsd %xmm0, $-64(%rbp) + JMP LBB15_78 + +LBB15_74: + MOVQ R11, -96(BP) + MOVQ R10, -56(BP) + LEAQ -64(BP), CX + MOVQ R12, DI + MOVQ SI, -88(BP) + LONG $0xffe3e9e8; BYTE $0xff // callq _atof_eisel_lemire64 + TESTB AX, AX + JE LBB15_80 + MOVQ -88(BP), SI + CMPL -68(BP), $0 + JE LBB15_81 + ADDQ $1, R12 + LEAQ -80(BP), CX + MOVQ R12, DI + MOVL -44(BP), DX + LONG $0xffe3c8e8; BYTE $0xff // callq _atof_eisel_lemire64 + TESTB AX, AX + JE LBB15_80 + LONG $0x4d10fbc5; BYTE $0xb0 // vmovsd $-80(%rbp), %xmm1 + LONG $0x4510fbc5; BYTE $0xc0 // vmovsd $-64(%rbp), %xmm0 + LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 + JNE LBB15_80 + JP LBB15_80 + +LBB15_78: + LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax + JMP LBB15_82 + +LBB15_80: + MOVQ 0(R14), AX + ADDQ AX, R15 + MOVQ R13, SI + SUBQ AX, SI + MOVQ R15, DI + MOVQ -56(BP), DX + MOVQ -96(BP), CX + LONG $0xffe7c5e8; BYTE $0xff // callq _atof_native + LONG $0x4511fbc5; BYTE $0xc0 // vmovsd %xmm0, $-64(%rbp) + LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax + JMP LBB15_83 + +LBB15_81: + MOVQ -64(BP), AX + +LBB15_82: + LONG $0x6ef9e1c4; BYTE $0xc0 // vmovq %rax, %xmm0 + +LBB15_83: + MOVQ $-9223372036854775808, CX + ADDQ $-1, CX + ANDQ AX, CX + MOVQ $9218868437227405312, AX + CMPQ CX, AX + JNE LBB15_85 + MOVQ $-8, 0(BX) + +LBB15_85: + LONG $0x4311fbc5; BYTE $0x08 // vmovsd %xmm0, $8(%rbx) + +LBB15_86: + MOVQ R13, 0(R14) + JMP LBB15_53 _vsigned: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp BYTE $0x53 // pushq %rbx - MOVQ 0(SI), BX + MOVQ 0(SI), AX MOVQ 0(DI), R8 - MOVQ 8(DI), R10 + MOVQ 8(DI), R11 MOVQ $9, 0(DX) LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 LONG $0x4211f8c5; BYTE $0x08 // vmovups %xmm0, $8(%rdx) MOVQ 0(SI), CX MOVQ CX, 24(DX) - CMPQ BX, R10 + CMPQ AX, R11 JAE LBB16_1 - MOVB 0(R8)(BX*1), CX + MOVB 0(R8)(AX*1), CX MOVL $1, R9 CMPB CX, $45 JNE LBB16_5 - INCQ BX - CMPQ BX, R10 + ADDQ $1, AX + CMPQ AX, R11 JAE LBB16_1 - MOVB 0(R8)(BX*1), CX + MOVB 0(R8)(AX*1), CX MOVQ $-1, R9 LBB16_5: LEAL -48(CX), DI CMPB DI, $10 JB LBB16_7 - MOVQ BX, 0(SI) + MOVQ AX, 0(SI) MOVQ $-2, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET LBB16_1: - MOVQ R10, 0(SI) + MOVQ R11, 0(SI) MOVQ $-1, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp @@ -5183,68 +5710,76 @@ LBB16_1: LBB16_7: CMPB CX, $48 - JNE LBB16_8 - LEAQ 1(BX), DI - CMPQ BX, R10 - JAE LBB16_17 + JNE LBB16_12 + LEAQ 1(AX), DI + CMPQ AX, R11 + JAE LBB16_11 MOVB 0(R8)(DI*1), CX ADDB $-46, CX CMPB CX, $55 - JA LBB16_17 - MOVBLZX CX, R11 + JA LBB16_11 + MOVBLZX CX, R10 MOVQ $36028797027352577, CX - BTQ R11, CX - JAE LBB16_17 + BTQ R10, CX + JAE LBB16_11 -LBB16_8: +LBB16_12: + CMPQ AX, R11 + MOVQ R11, R10 + LONG $0xd0470f4c // cmovaq %rax, %r10 XORL DI, DI -LBB16_9: - CMPQ BX, R10 - JAE LBB16_22 - MOVBQSX 0(R8)(BX*1), CX - LEAL -48(CX), AX - CMPB AX, $9 +LBB16_13: + CMPQ R10, AX + JE LBB16_23 + MOVBQSX 0(R8)(AX*1), CX + LEAL -48(CX), BX + CMPB BX, $9 JA LBB16_18 IMUL3Q $10, DI, DI - JO LBB16_13 - INCQ BX - ADDQ $-48, CX + JO LBB16_17 + ADDQ $1, AX + ADDL $-48, CX IMULQ R9, CX ADDQ CX, DI - JNO LBB16_9 + JNO LBB16_13 -LBB16_13: - DECQ BX - MOVQ BX, 0(SI) +LBB16_17: + ADDQ $-1, AX + MOVQ AX, 0(SI) MOVQ $-5, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB16_17: +LBB16_11: MOVQ DI, 0(SI) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET LBB16_18: - CMPB CX, $101 - JE LBB16_21 - CMPB CX, $69 - JE LBB16_21 + CMPQ AX, R11 + JAE LBB16_22 CMPB CX, $46 + JE LBB16_25 + CMPB CX, $69 + JE LBB16_25 + CMPB CX, $101 JNE LBB16_22 -LBB16_21: - MOVQ BX, 0(SI) +LBB16_25: + MOVQ AX, 0(SI) MOVQ $-6, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET LBB16_22: - MOVQ BX, 0(SI) + MOVQ AX, R10 + +LBB16_23: + MOVQ R10, 0(SI) MOVQ DI, 16(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp @@ -5253,16 +5788,18 @@ LBB16_22: _vunsigned: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5641 // pushq %r14 + BYTE $0x53 // pushq %rbx MOVQ DX, R8 MOVQ 0(SI), CX MOVQ 0(DI), R9 - MOVQ 8(DI), R11 + MOVQ 8(DI), R14 MOVQ $9, 0(DX) LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 LONG $0x4211f8c5; BYTE $0x08 // vmovups %xmm0, $8(%rdx) MOVQ 0(SI), AX MOVQ AX, 24(DX) - CMPQ CX, R11 + CMPQ CX, R14 JAE LBB17_1 MOVB 0(R9)(CX*1), AX CMPB AX, $45 @@ -5271,12 +5808,16 @@ _vunsigned: LBB17_3: MOVQ CX, 0(SI) MOVQ $-6, 0(R8) + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET LBB17_1: - MOVQ R11, 0(SI) + MOVQ R14, 0(SI) MOVQ $-1, 0(R8) + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET @@ -5286,73 +5827,86 @@ LBB17_4: JB LBB17_6 MOVQ CX, 0(SI) MOVQ $-2, 0(R8) + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET LBB17_6: CMPB AX, $48 - JNE LBB17_7 + JNE LBB17_10 MOVB 1(R9)(CX*1), AX ADDB $-46, AX CMPB AX, $55 - JA LBB17_16 + JA LBB17_9 MOVBLZX AX, AX MOVQ $36028797027352577, DX BTQ AX, DX - JAE LBB17_16 + JAE LBB17_9 -LBB17_7: +LBB17_10: + CMPQ R14, CX + MOVQ CX, R10 + LONG $0xd6470f4d // cmovaq %r14, %r10 XORL AX, AX - MOVL $10, R10 + MOVL $10, R11 -LBB17_8: - CMPQ CX, R11 - JAE LBB17_20 - MOVBLSX 0(R9)(CX*1), DI - LEAL -48(DI), DX +LBB17_11: + CMPQ R10, CX + JE LBB17_22 + MOVBLSX 0(R9)(CX*1), BX + LEAL -48(BX), DX CMPB DX, $9 JA LBB17_17 - MULQ R10 - JO LBB17_13 - INCQ CX - ADDL $-48, DI - MOVLQSX DI, DX - MOVQ DX, DI - SARQ $63, DI - ADDQ DX, AX - ADCQ $0, DI - MOVL DI, DX - ANDL $1, DX + MULQ R11 + JO LBB17_16 + ADDQ $1, CX + ADDL $-48, BX + XORL DI, DI + ADDQ BX, AX + SETCS DI + MOVQ DI, DX NEGQ DX XORQ DX, DI - JNE LBB17_13 + JNE LBB17_16 TESTQ DX, DX - JNS LBB17_8 + JNS LBB17_11 -LBB17_13: - DECQ CX +LBB17_16: + ADDQ $-1, CX MOVQ CX, 0(SI) MOVQ $-5, 0(R8) + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET LBB17_17: - CMPB DI, $101 + CMPQ CX, R14 + JAE LBB17_21 + CMPB BX, $46 JE LBB17_3 - CMPB DI, $69 + CMPB BX, $69 JE LBB17_3 - CMPB DI, $46 + CMPB BX, $101 JE LBB17_3 -LBB17_20: - MOVQ CX, 0(SI) +LBB17_21: + MOVQ CX, R10 + +LBB17_22: + MOVQ R10, 0(SI) MOVQ AX, 16(R8) + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET -LBB17_16: - INCQ CX +LBB17_9: + ADDQ $1, CX MOVQ CX, 0(SI) + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET @@ -5364,7 +5918,6 @@ _skip_one: MOVQ DI, SI MOVQ $1, 0(AX) MOVQ AX, DI - XORL CX, CX BYTE $0x5d // popq %rbp JMP _fsm_exec @@ -5376,348 +5929,311 @@ _fsm_exec: WORD $0x5541 // pushq %r13 WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx - SUBQ $24, SP + SUBQ $40, SP + MOVQ CX, -72(BP) CMPL 0(DI), $0 - JE LBB19_59 - MOVQ DX, R8 - MOVQ DI, R12 - MOVL CX, -52(BP) + JE LBB19_57 + MOVQ DX, R12 + MOVQ DI, R15 MOVQ SI, -48(BP) MOVQ $-1, R14 + MOVQ DX, -56(BP) JMP LBB19_4 -LBB19_3: - LEAQ 3(AX), CX - MOVQ CX, 0(R8) - TESTQ AX, AX - JLE LBB19_72 +LBB19_2: + MOVQ -64(BP), AX -LBB19_41: - MOVL 0(R12), R9 +LBB19_3: + MOVQ -56(BP), R12 + MOVQ AX, 0(R12) + TESTQ R13, R13 + JS LBB19_75 + +LBB19_55: + MOVL 0(R15), CX MOVQ R14, R13 - TESTL R9, R9 - JE LBB19_60 + TESTL CX, CX + JE LBB19_75 LBB19_4: - MOVQ -48(BP), BX - MOVQ 0(BX), DI - MOVQ 8(BX), SI - MOVQ R8, R15 - MOVQ R8, DX - LONG $0xfff22ae8; BYTE $0xff // callq _advance_ns + MOVQ -48(BP), R13 + MOVQ 0(R13), DI + MOVQ 8(R13), SI + MOVQ R12, DX + LONG $0xffebe8e8; BYTE $0xff // callq _advance_ns TESTB AX, AX - JE LBB19_59 - MOVLQSX 0(R12), DX - LEAQ -1(DX), R9 - MOVL 0(R12)(DX*4), DI + JE LBB19_57 + MOVLQSX 0(R15), DX + LEAQ -1(DX), CX CMPQ R14, $-1 - MOVQ R15, R8 JNE LBB19_7 - MOVQ 0(R8), R14 - DECQ R14 + MOVQ 0(R12), R14 + ADDQ $-1, R14 LBB19_7: MOVBLSX AX, SI - DECL DI + MOVL 0(R15)(DX*4), DI + ADDL $-1, DI CMPL DI, $5 JA LBB19_12 - LONG $0x6d0d8d48; WORD $0x0004; BYTE $0x00 // leaq $1133(%rip), %rcx /* LJTI19_0(%rip) */ - MOVLQSX 0(CX)(DI*4), DI - ADDQ CX, DI + LONG $0x2d1d8d48; WORD $0x0004; BYTE $0x00 // leaq $1069(%rip), %rbx /* LJTI19_0(%rip) */ + MOVLQSX 0(BX)(DI*4), DI + ADDQ BX, DI JMP DI LBB19_9: CMPL SI, $44 JE LBB19_30 CMPL SI, $93 - JNE LBB19_63 - MOVL R9, 0(R12) + JNE LBB19_74 + MOVL CX, 0(R15) MOVQ R14, R13 - TESTL R9, R9 + TESTL CX, CX JNE LBB19_4 - JMP LBB19_60 + JMP LBB19_75 LBB19_12: - MOVL R9, 0(R12) - MOVQ $-2, R13 - ADDL $-34, SI - CMPL SI, $89 + MOVL CX, 0(R15) + CMPL SI, $123 JBE LBB19_28 - JMP LBB19_60 + JMP LBB19_74 LBB19_13: CMPL SI, $44 JE LBB19_32 CMPL SI, $125 - JNE LBB19_63 - MOVL R9, 0(R12) + JNE LBB19_74 + MOVL CX, 0(R15) MOVQ R14, R13 - TESTL R9, R9 + TESTL CX, CX JNE LBB19_4 - JMP LBB19_60 + JMP LBB19_75 LBB19_16: CMPB AX, $34 - JNE LBB19_63 - MOVL $4, 0(R12)(DX*4) - MOVQ 0(R8), R15 - MOVQ BX, DI + JNE LBB19_74 + MOVL $4, 0(R15)(DX*4) + MOVQ 0(R12), BX + MOVQ R13, DI LBB19_18: - MOVQ R15, SI + MOVQ BX, SI LEAQ -64(BP), DX - MOVQ R8, BX - LONG $0xfff408e8; BYTE $0xff // callq _advance_string + MOVQ -72(BP), CX + LONG $0xffedabe8; BYTE $0xff // callq _advance_string MOVQ AX, R13 TESTQ AX, AX - JS LBB19_62 - MOVQ R13, 0(BX) - TESTQ R15, R15 - MOVQ BX, R8 - JG LBB19_41 - JMP LBB19_61 + JS LBB19_2 + ADDQ $-1, BX + MOVQ R13, AX + MOVQ BX, R13 + JMP LBB19_3 LBB19_20: CMPB AX, $58 - JNE LBB19_63 - MOVL $0, 0(R12)(DX*4) - JMP LBB19_41 + JNE LBB19_74 + MOVL $0, 0(R15)(DX*4) + JMP LBB19_55 LBB19_22: CMPB AX, $93 JNE LBB19_27 - MOVL R9, 0(R12) + MOVL CX, 0(R15) MOVQ R14, R13 - TESTL R9, R9 + TESTL CX, CX JNE LBB19_4 - JMP LBB19_60 + JMP LBB19_75 LBB19_24: CMPL SI, $34 JE LBB19_34 CMPL SI, $125 - JNE LBB19_63 - MOVL R9, 0(R12) + JNE LBB19_74 + MOVL CX, 0(R15) MOVQ R14, R13 - TESTL R9, R9 + TESTL CX, CX JNE LBB19_4 - JMP LBB19_60 + JMP LBB19_75 LBB19_27: - MOVL $1, 0(R12)(DX*4) - MOVQ $-2, R13 - ADDL $-34, SI - CMPL SI, $89 - JA LBB19_60 + MOVL $1, 0(R15)(DX*4) + CMPL SI, $123 + JA LBB19_74 LBB19_28: - LONG $0x5a0d8d48; WORD $0x0003; BYTE $0x00 // leaq $858(%rip), %rcx /* LJTI19_1(%rip) */ - MOVLQSX 0(CX)(SI*4), AX + MOVL SI, AX + LONG $0x380d8d48; WORD $0x0003; BYTE $0x00 // leaq $824(%rip), %rcx /* LJTI19_1(%rip) */ + MOVLQSX 0(CX)(AX*4), AX ADDQ CX, AX + MOVQ $-1, R13 JMP AX LBB19_29: - MOVQ 0(R8), BX + MOVQ -56(BP), AX + MOVQ 0(AX), BX LEAQ -1(BX), R13 MOVQ -48(BP), AX MOVQ 0(AX), DI ADDQ R13, DI MOVQ 8(AX), SI SUBQ R13, SI - LONG $0x000c4ee8; BYTE $0x00 // callq _do_skip_number - MOVQ R15, R8 - MOVQ $-2, CX - SUBQ AX, CX + LONG $0x000639e8; BYTE $0x00 // callq _do_skip_number + LEAQ -1(AX), CX + MOVQ $-2, DX + SUBQ AX, DX TESTQ AX, AX - LEAQ -1(AX), AX - LONG $0xc1480f48 // cmovsq %rcx, %rax - MOVQ $-2, CX - LONG $0xe9480f4c // cmovsq %rcx, %r13 - ADDQ BX, AX - MOVQ AX, 0(R15) + LONG $0xd1490f48 // cmovnsq %rcx, %rdx + MOVQ $-2, AX + LONG $0xe8480f4c // cmovsq %rax, %r13 + ADDQ BX, DX + MOVQ -56(BP), R12 + MOVQ DX, 0(R12) TESTQ R13, R13 - JNS LBB19_41 - JMP LBB19_60 + JNS LBB19_55 + JMP LBB19_75 LBB19_30: CMPL DX, $65535 - JG LBB19_68 + JG LBB19_58 LEAL 1(DX), AX - MOVL AX, 0(R12) - MOVL $0, 4(R12)(DX*4) - JMP LBB19_41 + MOVL AX, 0(R15) + MOVL $0, 4(R15)(DX*4) + JMP LBB19_55 LBB19_32: CMPL DX, $65535 - JG LBB19_68 + JG LBB19_58 LEAL 1(DX), AX - MOVL AX, 0(R12) - MOVL $3, 4(R12)(DX*4) - JMP LBB19_41 + MOVL AX, 0(R15) + MOVL $3, 4(R15)(DX*4) + JMP LBB19_55 LBB19_34: - MOVL $2, 0(R12)(DX*4) - MOVL -52(BP), AX - CMPL AX, $1 - JE LBB19_38 - TESTL AX, AX - JNE LBB19_39 - MOVQ 0(R8), R15 - MOVQ -48(BP), DI - MOVQ R15, SI + MOVL $2, 0(R15)(DX*4) + MOVQ 0(R12), BX + MOVQ R13, DI + MOVQ BX, SI LEAQ -64(BP), DX - MOVQ R8, BX - LONG $0xfff2a8e8; BYTE $0xff // callq _advance_string + MOVQ -72(BP), CX + LONG $0xffec5ce8; BYTE $0xff // callq _advance_string MOVQ AX, R13 TESTQ AX, AX - JS LBB19_62 - MOVQ R13, 0(BX) - TESTQ R15, R15 - MOVQ BX, R8 - JG LBB19_39 - JMP LBB19_61 + JNS LBB19_36 + MOVQ -64(BP), AX + JMP LBB19_37 -LBB19_38: - MOVQ BX, DI - MOVQ R8, SI - LONG $0x00048de8; BYTE $0x00 // callq _validate_string - MOVQ R15, R8 - TESTQ AX, AX - JS LBB19_73 +LBB19_36: + ADDQ $-1, BX + MOVQ R13, AX + MOVQ BX, R13 -LBB19_39: - MOVLQSX 0(R12), AX +LBB19_37: + MOVQ -56(BP), R12 + MOVQ AX, 0(R12) + TESTQ R13, R13 + JS LBB19_75 + MOVLQSX 0(R15), AX CMPQ AX, $65535 - JG LBB19_68 + JG LBB19_58 LEAL 1(AX), CX - MOVL CX, 0(R12) - MOVL $4, 4(R12)(AX*4) - JMP LBB19_41 + MOVL CX, 0(R15) + MOVL $4, 4(R15)(AX*4) + JMP LBB19_55 -LBB19_42: - MOVL -52(BP), AX - CMPL AX, $1 - JE LBB19_58 - TESTL AX, AX - JNE LBB19_41 - MOVQ 0(R8), R15 - MOVQ -48(BP), DI - JMP LBB19_18 +LBB19_40: + MOVQ 0(R12), BX + MOVQ -48(BP), DI + JMP LBB19_18 -LBB19_45: - MOVQ 0(R8), R15 +LBB19_41: + MOVQ 0(R12), R13 MOVQ -48(BP), AX MOVQ 0(AX), DI - ADDQ R15, DI + ADDQ R13, DI MOVQ 8(AX), SI - SUBQ R15, SI - MOVQ R8, BX - LONG $0x000b17e8; BYTE $0x00 // callq _do_skip_number + SUBQ R13, SI + LONG $0x00052ee8; BYTE $0x00 // callq _do_skip_number TESTQ AX, AX - JS LBB19_74 - ADDQ R15, AX - MOVQ AX, 0(BX) - TESTQ R15, R15 - MOVQ BX, R8 - JG LBB19_41 - JMP LBB19_61 + JS LBB19_62 + ADDQ R13, AX + MOVQ AX, 0(R12) + TESTQ R13, R13 + JG LBB19_55 + JMP LBB19_63 -LBB19_47: - MOVLQSX 0(R12), AX +LBB19_43: + MOVLQSX 0(R15), AX CMPQ AX, $65535 - JG LBB19_68 + JG LBB19_58 LEAL 1(AX), CX - MOVL CX, 0(R12) - MOVL $5, 4(R12)(AX*4) - JMP LBB19_41 + MOVL CX, 0(R15) + MOVL $5, 4(R15)(AX*4) + JMP LBB19_55 -LBB19_49: - MOVQ 0(R8), AX +LBB19_45: + MOVQ 0(R12), AX MOVQ -48(BP), SI MOVQ 8(SI), CX LEAQ -4(CX), DX CMPQ AX, DX - JA LBB19_71 + JA LBB19_61 MOVQ 0(SI), CX MOVL 0(CX)(AX*1), DX CMPL DX, $1702063201 - JNE LBB19_76 + JNE LBB19_65 LEAQ 4(AX), CX - MOVQ CX, 0(R8) + MOVQ CX, 0(R12) TESTQ AX, AX - JG LBB19_41 - JMP LBB19_72 + JG LBB19_55 + JMP LBB19_77 + +LBB19_48: + MOVQ 0(R12), AX + MOVQ -48(BP), SI + MOVQ 8(SI), CX + LEAQ -3(CX), DX + CMPQ AX, DX + JA LBB19_61 + MOVQ 0(SI), CX + LEAQ -1(AX), R13 + CMPL -1(CX)(AX*1), $1819047278 + JE LBB19_52 + JMP LBB19_68 + +LBB19_50: + MOVQ 0(R12), AX + MOVQ -48(BP), SI + MOVQ 8(SI), CX + LEAQ -3(CX), DX + CMPQ AX, DX + JA LBB19_61 + MOVQ 0(SI), CX + LEAQ -1(AX), R13 + CMPL -1(CX)(AX*1), $1702195828 + JNE LBB19_71 LBB19_52: - MOVQ 0(R8), AX - MOVQ -48(BP), SI - MOVQ 8(SI), CX - LEAQ -3(CX), DX - CMPQ AX, DX - JA LBB19_71 - MOVQ 0(SI), CX - CMPL -1(CX)(AX*1), $1819047278 - JE LBB19_3 - JMP LBB19_79 - -LBB19_54: - MOVQ 0(R8), AX - MOVQ -48(BP), SI - MOVQ 8(SI), CX - LEAQ -3(CX), DX - CMPQ AX, DX - JA LBB19_71 - MOVQ 0(SI), CX - CMPL -1(CX)(AX*1), $1702195828 - JE LBB19_3 - JMP LBB19_82 - -LBB19_56: - MOVLQSX 0(R12), AX - CMPQ AX, $65535 - JG LBB19_68 - LEAL 1(AX), CX - MOVL CX, 0(R12) - MOVL $6, 4(R12)(AX*4) - JMP LBB19_41 - -LBB19_58: - MOVQ -48(BP), DI - MOVQ R8, SI - LONG $0x000317e8; BYTE $0x00 // callq _validate_string - MOVQ R15, R8 + LEAQ 3(AX), CX + MOVQ CX, 0(R12) TESTQ AX, AX - JNS LBB19_41 - JMP LBB19_73 + JG LBB19_55 + JMP LBB19_75 -LBB19_63: - MOVQ $-2, R13 - JMP LBB19_60 +LBB19_53: + MOVLQSX 0(R15), AX + CMPQ AX, $65535 + JG LBB19_58 + LEAL 1(AX), CX + MOVL CX, 0(R15) + MOVL $6, 4(R15)(AX*4) + JMP LBB19_55 -LBB19_68: - MOVQ $-7, R13 - JMP LBB19_60 - -LBB19_61: - DECQ R15 - MOVQ R15, R13 - JMP LBB19_60 - -LBB19_62: - MOVQ -48(BP), AX - MOVQ 8(AX), AX - MOVQ AX, 0(BX) - JMP LBB19_60 - -LBB19_71: - MOVQ CX, 0(R8) - -LBB19_59: +LBB19_57: MOVQ $-1, R13 -LBB19_60: +LBB19_75: MOVQ R13, AX - ADDQ $24, SP + ADDQ $40, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 WORD $0x5d41 // popq %r13 @@ -5726,68 +6242,81 @@ LBB19_60: BYTE $0x5d // popq %rbp RET -LBB19_72: - DECQ AX +LBB19_58: + MOVQ $-7, R13 + JMP LBB19_75 -LBB19_73: - MOVQ AX, R13 - JMP LBB19_60 +LBB19_61: + MOVQ CX, 0(R12) + MOVQ $-1, R13 + JMP LBB19_75 -LBB19_74: +LBB19_62: NOTQ AX - ADDQ AX, R15 - MOVQ R15, 0(BX) - JMP LBB19_60 + ADDQ AX, R13 + MOVQ R13, 0(R12) + JMP LBB19_74 -LBB19_76: +LBB19_63: + ADDQ $-1, R13 + JMP LBB19_75 + +LBB19_65: + MOVQ $-2, R13 CMPB DX, $97 - JNE LBB19_60 - INCQ AX + JNE LBB19_75 + ADDQ $1, AX MOVL $1702063201, DX -LBB19_78: +LBB19_67: SHRL $8, DX - MOVQ AX, 0(R8) + MOVQ AX, 0(R12) MOVBLSX 0(CX)(AX*1), SI MOVBLZX DX, DI - INCQ AX + ADDQ $1, AX CMPL DI, SI - JE LBB19_78 - JMP LBB19_60 + JE LBB19_67 + JMP LBB19_75 -LBB19_79: - LEAQ -1(AX), DX - MOVQ DX, 0(R8) - CMPB -1(CX)(AX*1), $110 - JNE LBB19_60 +LBB19_68: + MOVQ R13, 0(R12) + CMPB 0(CX)(R13*1), $110 + JNE LBB19_74 MOVL $1819047278, DX -LBB19_81: +LBB19_70: SHRL $8, DX - MOVQ AX, 0(R8) + MOVQ AX, 0(R12) MOVBLSX 0(CX)(AX*1), SI MOVBLZX DX, DI - INCQ AX + ADDQ $1, AX CMPL DI, SI - JE LBB19_81 - JMP LBB19_60 + JE LBB19_70 + JMP LBB19_74 -LBB19_82: - LEAQ -1(AX), DX - MOVQ DX, 0(R8) - CMPB -1(CX)(AX*1), $116 - JNE LBB19_60 +LBB19_71: + MOVQ R13, 0(R12) + CMPB 0(CX)(R13*1), $116 + JNE LBB19_74 MOVL $1702195828, DX -LBB19_84: +LBB19_73: SHRL $8, DX - MOVQ AX, 0(R8) + MOVQ AX, 0(R12) MOVBLSX 0(CX)(AX*1), SI MOVBLZX DX, DI - INCQ AX + ADDQ $1, AX CMPL DI, SI - JE LBB19_84 - JMP LBB19_60 + JE LBB19_73 + +LBB19_74: + MOVQ $-2, R13 + JMP LBB19_75 + +LBB19_77: + ADDQ $-1, AX + MOVQ AX, R13 + JMP LBB19_75 // .set L19_0_set_9, LBB19_9-LJTI19_0 // .set L19_0_set_13, LBB19_13-LJTI19_0 @@ -5796,113 +6325,148 @@ LBB19_84: // .set L19_0_set_22, LBB19_22-LJTI19_0 // .set L19_0_set_24, LBB19_24-LJTI19_0 LJTI19_0: - LONG $0xfffffb9c // .long L19_0_set_9 - LONG $0xfffffbdb // .long L19_0_set_13 - LONG $0xfffffc02 // .long L19_0_set_16 - LONG $0xfffffc47 // .long L19_0_set_20 - LONG $0xfffffc5c // .long L19_0_set_22 - LONG $0xfffffc75 // .long L19_0_set_24 + LONG $0xfffffbdc // .long L19_0_set_9 + LONG $0xfffffc0e // .long L19_0_set_13 + LONG $0xfffffc33 // .long L19_0_set_16 + LONG $0xfffffc75 // .long L19_0_set_20 + LONG $0xfffffc8a // .long L19_0_set_22 + LONG $0xfffffca1 // .long L19_0_set_24 - // .set L19_1_set_42, LBB19_42-LJTI19_1 - // .set L19_1_set_60, LBB19_60-LJTI19_1 - // .set L19_1_set_45, LBB19_45-LJTI19_1 + // .set L19_1_set_75, LBB19_75-LJTI19_1 + // .set L19_1_set_74, LBB19_74-LJTI19_1 + // .set L19_1_set_40, LBB19_40-LJTI19_1 + // .set L19_1_set_41, LBB19_41-LJTI19_1 // .set L19_1_set_29, LBB19_29-LJTI19_1 - // .set L19_1_set_47, LBB19_47-LJTI19_1 - // .set L19_1_set_49, LBB19_49-LJTI19_1 - // .set L19_1_set_52, LBB19_52-LJTI19_1 - // .set L19_1_set_54, LBB19_54-LJTI19_1 - // .set L19_1_set_56, LBB19_56-LJTI19_1 + // .set L19_1_set_43, LBB19_43-LJTI19_1 + // .set L19_1_set_45, LBB19_45-LJTI19_1 + // .set L19_1_set_48, LBB19_48-LJTI19_1 + // .set L19_1_set_50, LBB19_50-LJTI19_1 + // .set L19_1_set_53, LBB19_53-LJTI19_1 LJTI19_1: - LONG $0xfffffdc7 // .long L19_1_set_42 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xfffffde7 // .long L19_1_set_45 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xfffffcaf // .long L19_1_set_29 - LONG $0xfffffcaf // .long L19_1_set_29 - LONG $0xfffffcaf // .long L19_1_set_29 - LONG $0xfffffcaf // .long L19_1_set_29 - LONG $0xfffffcaf // .long L19_1_set_29 - LONG $0xfffffcaf // .long L19_1_set_29 - LONG $0xfffffcaf // .long L19_1_set_29 - LONG $0xfffffcaf // .long L19_1_set_29 - LONG $0xfffffcaf // .long L19_1_set_29 - LONG $0xfffffcaf // .long L19_1_set_29 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xfffffe23 // .long L19_1_set_47 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xfffffe48 // .long L19_1_set_49 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xfffffe87 // .long L19_1_set_52 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xfffffeb5 // .long L19_1_set_54 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xffffff4b // .long L19_1_set_60 - LONG $0xfffffedf // .long L19_1_set_56 + LONG $0xffffff18 // .long L19_1_set_75 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xfffffddd // .long L19_1_set_40 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xfffffdea // .long L19_1_set_41 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xfffffcd8 // .long L19_1_set_29 + LONG $0xfffffcd8 // .long L19_1_set_29 + LONG $0xfffffcd8 // .long L19_1_set_29 + LONG $0xfffffcd8 // .long L19_1_set_29 + LONG $0xfffffcd8 // .long L19_1_set_29 + LONG $0xfffffcd8 // .long L19_1_set_29 + LONG $0xfffffcd8 // .long L19_1_set_29 + LONG $0xfffffcd8 // .long L19_1_set_29 + LONG $0xfffffcd8 // .long L19_1_set_29 + LONG $0xfffffcd8 // .long L19_1_set_29 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xfffffe22 // .long L19_1_set_43 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xfffffe45 // .long L19_1_set_45 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xfffffe86 // .long L19_1_set_48 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xfffffeb5 // .long L19_1_set_50 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xffffffd0 // .long L19_1_set_74 + LONG $0xfffffef2 // .long L19_1_set_53 _skip_array: BYTE $0x55 // pushq %rbp @@ -5910,10 +6474,9 @@ _skip_array: MOVQ DX, AX MOVQ SI, DX MOVQ DI, SI - MOVQ $21474836481, CX - MOVQ CX, 0(AX) + MOVQ $21474836481, DI + MOVQ DI, 0(AX) MOVQ AX, DI - XORL CX, CX BYTE $0x5d // popq %rbp JMP _fsm_exec @@ -5923,592 +6486,42 @@ _skip_object: MOVQ DX, AX MOVQ SI, DX MOVQ DI, SI - MOVQ $25769803777, CX - MOVQ CX, 0(AX) + MOVQ $25769803777, DI + MOVQ DI, 0(AX) MOVQ AX, DI - XORL CX, CX BYTE $0x5d // popq %rbp JMP _fsm_exec _skip_string: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 WORD $0x5641 // pushq %r14 BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax + SUBQ $16, SP + MOVQ DX, CX MOVQ SI, R14 - MOVQ DI, R15 MOVQ 0(SI), BX - LEAQ -32(BP), DX + LEAQ -24(BP), DX MOVQ BX, SI - LONG $0xffee46e8; BYTE $0xff // callq _advance_string + LONG $0xffe797e8; BYTE $0xff // callq _advance_string TESTQ AX, AX - JS LBB22_2 - DECQ BX - MOVQ AX, CX - MOVQ BX, AX + JNS LBB22_1 + MOVQ -24(BP), CX JMP LBB22_3 -LBB22_2: - MOVQ 8(R15), CX +LBB22_1: + ADDQ $-1, BX + MOVQ AX, CX + MOVQ BX, AX LBB22_3: MOVQ CX, 0(R14) - ADDQ $8, SP + ADDQ $16, SP BYTE $0x5b // popq %rbx WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 BYTE $0x5d // popq %rbp RET -LCPI23_0: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - -LCPI23_1: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - -LCPI23_2: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - -_validate_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 - SUBQ $40, SP - MOVQ SI, R14 - MOVQ 0(SI), R15 - MOVQ 8(DI), R12 - MOVQ R12, -64(BP) - SUBQ R15, R12 - JE LBB23_16 - MOVQ R14, -48(BP) - MOVQ 0(DI), AX - MOVQ AX, -56(BP) - LEAQ 0(AX)(R15*1), SI - CMPQ R12, $64 - MOVQ SI, -72(BP) - JB LBB23_31 - MOVL R12, R9 - ANDL $63, R9 - MOVQ $-1, R13 - XORL R14, R14 - QUAD $0xffffff72056f7ac5 // vmovdqu $-142(%rip), %xmm8 /* LCPI23_0(%rip) */ - QUAD $0xffffff7a0d6ffac5 // vmovdqu $-134(%rip), %xmm1 /* LCPI23_1(%rip) */ - QUAD $0xffffff82156ffac5 // vmovdqu $-126(%rip), %xmm2 /* LCPI23_2(%rip) */ - LONG $0xdb76e1c5 // vpcmpeqd %xmm3, %xmm3, %xmm3 - -LBB23_3: - LONG $0x3e6ffac5 // vmovdqu (%rsi), %xmm7 - LONG $0x766ffac5; BYTE $0x10 // vmovdqu $16(%rsi), %xmm6 - LONG $0x6e6ffac5; BYTE $0x20 // vmovdqu $32(%rsi), %xmm5 - LONG $0x666ffac5; BYTE $0x30 // vmovdqu $48(%rsi), %xmm4 - LONG $0xc774b9c5 // vpcmpeqb %xmm7, %xmm8, %xmm0 - LONG $0xd0d7f9c5 // vpmovmskb %xmm0, %edx - LONG $0xc674b9c5 // vpcmpeqb %xmm6, %xmm8, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - LONG $0xc574b9c5 // vpcmpeqb %xmm5, %xmm8, %xmm0 - LONG $0xd8d7f9c5 // vpmovmskb %xmm0, %ebx - LONG $0xc474b9c5 // vpcmpeqb %xmm4, %xmm8, %xmm0 - LONG $0xd8d779c5 // vpmovmskb %xmm0, %r11d - LONG $0xc174c1c5 // vpcmpeqb %xmm1, %xmm7, %xmm0 - LONG $0xd0d779c5 // vpmovmskb %xmm0, %r10d - LONG $0xc174c9c5 // vpcmpeqb %xmm1, %xmm6, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0xc174d1c5 // vpcmpeqb %xmm1, %xmm5, %xmm0 - SHLQ $16, AX - ORQ AX, DX - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - LONG $0xc174d9c5 // vpcmpeqb %xmm1, %xmm4, %xmm0 - SHLQ $32, BX - ORQ BX, DX - LONG $0xd8d7f9c5 // vpmovmskb %xmm0, %ebx - LONG $0xc764e9c5 // vpcmpgtb %xmm7, %xmm2, %xmm0 - LONG $0xfb64c1c5 // vpcmpgtb %xmm3, %xmm7, %xmm7 - LONG $0xc0dbc1c5 // vpand %xmm0, %xmm7, %xmm0 - SHLQ $16, CX - ORQ CX, R10 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - LONG $0xc664e9c5 // vpcmpgtb %xmm6, %xmm2, %xmm0 - LONG $0xf364c9c5 // vpcmpgtb %xmm3, %xmm6, %xmm6 - LONG $0xc0dbc9c5 // vpand %xmm0, %xmm6, %xmm0 - SHLQ $32, AX - ORQ AX, R10 - LONG $0xf8d7f9c5 // vpmovmskb %xmm0, %edi - LONG $0xc564e9c5 // vpcmpgtb %xmm5, %xmm2, %xmm0 - LONG $0xeb64d1c5 // vpcmpgtb %xmm3, %xmm5, %xmm5 - LONG $0xc0dbd1c5 // vpand %xmm0, %xmm5, %xmm0 - SHLQ $48, BX - ORQ BX, R10 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - LONG $0xc464e9c5 // vpcmpgtb %xmm4, %xmm2, %xmm0 - LONG $0xe364d9c5 // vpcmpgtb %xmm3, %xmm4, %xmm4 - LONG $0xc0dbd9c5 // vpand %xmm0, %xmm4, %xmm0 - SHLQ $16, DI - ORQ DI, CX - LONG $0xc0d779c5 // vpmovmskb %xmm0, %r8d - SHLQ $48, R11 - SHLQ $32, AX - CMPQ R13, $-1 - JNE LBB23_5 - TESTQ R10, R10 - JNE LBB23_10 - -LBB23_5: - SHLQ $48, R8 - ORQ AX, CX - ORQ R11, DX - MOVQ R10, AX - ORQ R14, AX - JNE LBB23_9 - ORQ R8, CX - TESTQ DX, DX - JNE LBB23_11 - -LBB23_7: - TESTQ CX, CX - JNE LBB23_18 - ADDQ $64, SI - ADDQ $-64, R12 - CMPQ R12, $63 - JA LBB23_3 - JMP LBB23_20 - -LBB23_9: - MOVQ R14, AX - NOTQ AX - ANDQ R10, AX - LEAQ 0(AX)(AX*1), R11 - ORQ R14, R11 - MOVQ R11, DI - NOTQ DI - ANDQ R10, DI - MOVQ $-6148914691236517206, BX - ANDQ BX, DI - XORL R14, R14 - ADDQ AX, DI - SETCS R14 - ADDQ DI, DI - MOVQ $6148914691236517205, AX - XORQ AX, DI - ANDQ R11, DI - NOTQ DI - ANDQ DI, DX - ORQ R8, CX - TESTQ DX, DX - JE LBB23_7 - JMP LBB23_11 - -LBB23_10: - MOVQ SI, DI - SUBQ -56(BP), DI - BSFQ R10, R13 - ADDQ DI, R13 - JMP LBB23_5 - -LBB23_11: - SUBQ -56(BP), SI - BSFQ DX, DX - LEAQ 1(SI)(DX*1), BX - TESTQ CX, CX - MOVQ -48(BP), R14 - JE LBB23_13 - BSFQ CX, AX - CMPQ AX, DX - JBE LBB23_27 - -LBB23_13: - TESTQ BX, BX - JS LBB23_15 - MOVQ R15, SI - NOTQ SI - ADDQ BX, SI - MOVQ -72(BP), DI - LONG $0x0002bee8; BYTE $0x00 // callq _utf8_validate - LEAQ 0(AX)(R15*1), R13 - TESTQ AX, AX - LONG $0xeb480f4c // cmovsq %rbx, %r13 - LEAQ -1(R15), BX - MOVQ $-2, AX - LONG $0xd8490f48 // cmovnsq %rax, %rbx - JMP LBB23_17 - -LBB23_15: - CMPQ BX, $-1 - JNE LBB23_17 - -LBB23_16: - MOVQ $-1, BX - MOVQ -64(BP), R13 - -LBB23_17: - MOVQ R13, 0(R14) - MOVQ BX, AX - 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 - RET - -LBB23_18: - MOVQ $-2, BX - CMPQ R13, $-1 - JE LBB23_28 - -LBB23_19: - MOVQ -48(BP), R14 - JMP LBB23_17 - -LBB23_20: - MOVQ R9, R12 - CMPQ R12, $32 - JB LBB23_35 - -LBB23_21: - LONG $0x066ffac5 // vmovdqu (%rsi), %xmm0 - LONG $0x4e6ffac5; BYTE $0x10 // vmovdqu $16(%rsi), %xmm1 - QUAD $0xfffffd35156ffac5 // vmovdqu $-715(%rip), %xmm2 /* LCPI23_0(%rip) */ - LONG $0xda74f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm3 - LONG $0xdbd779c5 // vpmovmskb %xmm3, %r11d - LONG $0xd274f1c5 // vpcmpeqb %xmm2, %xmm1, %xmm2 - LONG $0xd2d7f9c5 // vpmovmskb %xmm2, %edx - QUAD $0xfffffd2d156ffac5 // vmovdqu $-723(%rip), %xmm2 /* LCPI23_1(%rip) */ - LONG $0xda74f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm3 - LONG $0xcbd7f9c5 // vpmovmskb %xmm3, %ecx - LONG $0xd274f1c5 // vpcmpeqb %xmm2, %xmm1, %xmm2 - LONG $0xc2d7f9c5 // vpmovmskb %xmm2, %eax - QUAD $0xfffffd25156ffac5 // vmovdqu $-731(%rip), %xmm2 /* LCPI23_2(%rip) */ - LONG $0xd864e9c5 // vpcmpgtb %xmm0, %xmm2, %xmm3 - LONG $0xe476d9c5 // vpcmpeqd %xmm4, %xmm4, %xmm4 - LONG $0xc464f9c5 // vpcmpgtb %xmm4, %xmm0, %xmm0 - LONG $0xc3dbf9c5 // vpand %xmm3, %xmm0, %xmm0 - LONG $0xc0d779c5 // vpmovmskb %xmm0, %r8d - LONG $0xc164e9c5 // vpcmpgtb %xmm1, %xmm2, %xmm0 - LONG $0xcc64f1c5 // vpcmpgtb %xmm4, %xmm1, %xmm1 - LONG $0xc0dbf1c5 // vpand %xmm0, %xmm1, %xmm0 - LONG $0xd0d779c5 // vpmovmskb %xmm0, %r10d - SHLQ $16, DX - SHLQ $16, AX - ORQ AX, CX - CMPQ R13, $-1 - JNE LBB23_23 - TESTQ CX, CX - JNE LBB23_47 - -LBB23_23: - SHLQ $16, R10 - ORQ R11, DX - MOVQ CX, AX - ORQ R14, AX - JNE LBB23_32 - ORQ R8, R10 - TESTQ DX, DX - JE LBB23_33 - -LBB23_25: - SUBQ -56(BP), SI - BSFQ DX, CX - LEAQ 1(SI)(CX*1), BX - TESTQ R10, R10 - JE LBB23_30 - BSFQ R10, AX - CMPQ AX, CX - MOVQ -48(BP), R14 - JA LBB23_13 - -LBB23_27: - ADDQ SI, AX - CMPQ R13, $-1 - LONG $0xe8440f4c // cmoveq %rax, %r13 - MOVQ $-2, BX - JMP LBB23_17 - -LBB23_28: - SUBQ -56(BP), SI - BSFQ CX, R13 - -LBB23_29: - ADDQ SI, R13 - MOVQ -48(BP), R14 - JMP LBB23_17 - -LBB23_30: - MOVQ -48(BP), R14 - JMP LBB23_13 - -LBB23_31: - MOVQ $-1, R13 - XORL R14, R14 - CMPQ R12, $32 - JAE LBB23_21 - JMP LBB23_35 - -LBB23_32: - MOVL R14, AX - NOTL AX - ANDL CX, AX - LEAL 0(AX)(AX*1), BX - ORL R14, BX - MOVL BX, DI - NOTL DI - ANDL CX, DI - ANDL $-1431655766, DI - XORL R14, R14 - ADDL AX, DI - SETCS R14 - ADDL DI, DI - XORL $1431655765, DI - ANDL BX, DI - NOTL DI - ANDL DI, DX - ORQ R8, R10 - TESTQ DX, DX - JNE LBB23_25 - -LBB23_33: - TESTQ R10, R10 - JNE LBB23_48 - ADDQ $32, SI - ADDQ $-32, R12 - -LBB23_35: - TESTQ R14, R14 - JNE LBB23_50 - MOVQ -48(BP), R14 - TESTQ R12, R12 - JE LBB23_46 - -LBB23_37: - MOVQ -56(BP), CX - NOTQ CX - -LBB23_38: - LEAQ 1(SI), AX - MOVBLZX 0(SI), DX - CMPB DX, $34 - JE LBB23_45 - LEAQ -1(R12), BX - CMPB DX, $92 - JE LBB23_42 - CMPB DX, $31 - JBE LBB23_52 - MOVQ AX, SI - MOVQ BX, R12 - TESTQ BX, BX - JNE LBB23_38 - JMP LBB23_44 - -LBB23_42: - TESTQ BX, BX - JE LBB23_16 - ADDQ CX, AX - CMPQ R13, $-1 - LONG $0xe8440f4c // cmoveq %rax, %r13 - ADDQ $2, SI - ADDQ $-2, R12 - MOVQ R12, BX - TESTQ BX, BX - JNE LBB23_38 - -LBB23_44: - CMPB DX, $34 - JNE LBB23_16 - JMP LBB23_46 - -LBB23_45: - MOVQ AX, SI - -LBB23_46: - SUBQ -56(BP), SI - MOVQ SI, BX - JMP LBB23_13 - -LBB23_47: - MOVQ SI, AX - SUBQ -56(BP), AX - BSFQ CX, R13 - ADDQ AX, R13 - JMP LBB23_23 - -LBB23_48: - MOVQ $-2, BX - CMPQ R13, $-1 - JNE LBB23_19 - SUBQ -56(BP), SI - BSFQ R10, R13 - JMP LBB23_29 - -LBB23_50: - TESTQ R12, R12 - MOVQ -48(BP), R14 - JE LBB23_16 - MOVQ -56(BP), AX - NOTQ AX - ADDQ SI, AX - CMPQ R13, $-1 - LONG $0xe8440f4c // cmoveq %rax, %r13 - INCQ SI - DECQ R12 - TESTQ R12, R12 - JNE LBB23_37 - JMP LBB23_46 - -LBB23_52: - MOVQ $-2, BX - CMPQ R13, $-1 - JNE LBB23_19 - ADDQ CX, AX - MOVQ AX, R13 - MOVQ -48(BP), R14 - JMP LBB23_17 - -_utf8_validate: - 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 - TESTQ SI, SI - JLE LBB24_27 - LONG $0x050d8d4c; WORD $0x00ae; BYTE $0x00 // leaq $44549(%rip), %r9 /* _first(%rip) */ - LONG $0xfe058d4c; WORD $0x00ae; BYTE $0x00 // leaq $44798(%rip), %r8 /* _ranges(%rip) */ - LONG $0x19158d4c; WORD $0x0001; BYTE $0x00 // leaq $281(%rip), %r10 /* LJTI24_0(%rip) */ - MOVQ DI, R14 - -LBB24_2: - CMPB 0(R14), $0 - JS LBB24_3 - MOVQ SI, DX - MOVQ R14, CX - CMPQ SI, $16 - JL LBB24_5 - -LBB24_10: - LONG $0x016ffac5 // vmovdqu (%rcx), %xmm0 - LONG $0xd8d7f9c5 // vpmovmskb %xmm0, %ebx - TESTW BX, BX - JNE LBB24_11 - ADDQ $16, CX - CMPQ DX, $31 - LEAQ -16(DX), DX - JG LBB24_10 - -LBB24_5: - TESTQ DX, DX - JLE LBB24_27 - INCQ DX - -LBB24_7: - CMPB 0(CX), $0 - JS LBB24_12 - INCQ CX - DECQ DX - CMPQ DX, $1 - JG LBB24_7 - JMP LBB24_27 - -LBB24_3: - XORL DX, DX - CMPQ DX, $-1 - JNE LBB24_14 - JMP LBB24_27 - -LBB24_12: - SUBQ R14, CX - MOVQ CX, DX - CMPQ DX, $-1 - JE LBB24_27 - -LBB24_14: - SUBQ DX, SI - JLE LBB24_27 - LEAQ 0(R14)(DX*1), R11 - MOVBLZX 0(R14)(DX*1), R14 - MOVBLZX 0(R14)(R9*1), R15 - MOVL R15, DX - ANDL $7, DX - CMPQ SI, DX - JB LBB24_25 - CMPB DX, $4 - JA LBB24_25 - MOVL $1, BX - MOVBLZX DX, CX - MOVLQSX 0(R10)(CX*4), CX - ADDQ R10, CX - JMP CX - -LBB24_18: - MOVB 3(R11), BX - TESTB BX, BX - JNS LBB24_25 - CMPB BX, $-65 - JA LBB24_25 - -LBB24_20: - MOVB 2(R11), BX - TESTB BX, BX - JNS LBB24_25 - CMPB BX, $-65 - JA LBB24_25 - -LBB24_22: - TESTB R14, R14 - JNS LBB24_25 - SHRQ $4, R15 - MOVB 1(R11), R14 - CMPB R14, 0(R8)(R15*2) - JB LBB24_25 - MOVQ DX, BX - CMPB 1(R8)(R15*2), R14 - JB LBB24_25 - -LBB24_26: - ADDQ BX, R11 - MOVQ R11, R14 - SUBQ BX, SI - JG LBB24_2 - JMP LBB24_27 - -LBB24_11: - MOVWLZX BX, DX - SUBQ R14, CX - BSFQ DX, DX - ADDQ CX, DX - CMPQ DX, $-1 - JNE LBB24_14 - JMP LBB24_27 - -LBB24_25: - SUBQ DI, R11 - MOVQ R11, AX - -LBB24_27: - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - RET - -// .set L24_0_set_26, LBB24_26-LJTI24_0 -// .set L24_0_set_25, LBB24_25-LJTI24_0 -// .set L24_0_set_22, LBB24_22-LJTI24_0 -// .set L24_0_set_20, LBB24_20-LJTI24_0 -// .set L24_0_set_18, LBB24_18-LJTI24_0 -LJTI24_0: - LONG $0xffffffc9 // .long L24_0_set_26 - LONG $0xfffffff3 // .long L24_0_set_25 - LONG $0xffffffac // .long L24_0_set_22 - LONG $0xffffff9f // .long L24_0_set_20 - LONG $0xffffff92 // .long L24_0_set_18 - _skip_negative: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp @@ -6521,389 +6534,344 @@ _skip_negative: MOVQ 8(DI), SI SUBQ BX, SI MOVQ AX, DI - LONG $0x000098e8; BYTE $0x00 // callq _do_skip_number + LONG $0x000099e8; BYTE $0x00 // callq _do_skip_number TESTQ AX, AX - JS LBB25_1 + JS LBB23_1 ADDQ BX, AX MOVQ AX, 0(R14) - DECQ BX - JMP LBB25_3 + ADDQ $-1, BX + JMP LBB23_3 -LBB25_1: +LBB23_1: NOTQ AX ADDQ AX, BX MOVQ BX, 0(R14) MOVQ $-2, BX -LBB25_3: +LBB23_3: MOVQ BX, AX BYTE $0x5b // popq %rbx WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET -LCPI26_0: +LCPI24_0: QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' -LCPI26_1: +LCPI24_1: QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' -LCPI26_2: +LCPI24_2: QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' -LCPI26_3: +LCPI24_3: QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' -LCPI26_4: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' +LCPI24_4: + QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' -LCPI26_5: +LCPI24_5: QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' -LCPI26_6: - QUAD $0x6565656565656565; QUAD $0x6565656565656565 // .space 16, 'eeeeeeeeeeeeeeee' +LCPI24_6: + QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE' _do_skip_number: 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 TESTQ SI, SI - JE LBB26_34 + JE LBB24_1 CMPB 0(DI), $48 - JNE LBB26_5 - MOVL $1, DX + JNE LBB24_6 + MOVL $1, AX CMPQ SI, $1 - JE LBB26_52 - MOVB 1(DI), AX - ADDB $-46, AX - CMPB AX, $55 - JA LBB26_52 - MOVBLZX AX, AX - MOVQ $36028797027352577, CX - BTQ AX, CX - JAE LBB26_52 + JE LBB24_55 + MOVB 1(DI), CX + ADDB $-46, CX + CMPB CX, $55 + JA LBB24_55 + MOVBLZX CX, CX + MOVQ $36028797027352577, DX + BTQ CX, DX + JAE LBB24_55 -LBB26_5: +LBB24_6: CMPQ SI, $16 - JB LBB26_57 - LEAQ -16(SI), R11 - MOVQ R11, AX - ANDQ $-16, AX - LEAQ 16(AX)(DI*1), R10 - ANDL $15, R11 + JB LBB24_7 + MOVQ $-1, R10 + XORL AX, AX + QUAD $0xffffff29056f7ac5 // vmovdqu $-215(%rip), %xmm8 /* LCPI24_0(%rip) */ + QUAD $0xffffff310d6f7ac5 // vmovdqu $-207(%rip), %xmm9 /* LCPI24_1(%rip) */ + QUAD $0xffffff39156f7ac5 // vmovdqu $-199(%rip), %xmm10 /* LCPI24_2(%rip) */ + QUAD $0xffffff411d6f7ac5 // vmovdqu $-191(%rip), %xmm11 /* LCPI24_3(%rip) */ + QUAD $0xffffff49256ffac5 // vmovdqu $-183(%rip), %xmm4 /* LCPI24_4(%rip) */ + QUAD $0xffffff512d6ffac5 // vmovdqu $-175(%rip), %xmm5 /* LCPI24_5(%rip) */ + QUAD $0xffffff59356ffac5 // vmovdqu $-167(%rip), %xmm6 /* LCPI24_6(%rip) */ MOVQ $-1, R9 - QUAD $0xffffff15056f7ac5 // vmovdqu $-235(%rip), %xmm8 /* LCPI26_0(%rip) */ - QUAD $0xffffff1d0d6f7ac5 // vmovdqu $-227(%rip), %xmm9 /* LCPI26_1(%rip) */ - QUAD $0xffffff25156f7ac5 // vmovdqu $-219(%rip), %xmm10 /* LCPI26_2(%rip) */ - QUAD $0xffffff2d1d6f7ac5 // vmovdqu $-211(%rip), %xmm11 /* LCPI26_3(%rip) */ - QUAD $0xffffff35256ffac5 // vmovdqu $-203(%rip), %xmm4 /* LCPI26_4(%rip) */ - QUAD $0xffffff3d2d6ffac5 // vmovdqu $-195(%rip), %xmm5 /* LCPI26_5(%rip) */ - QUAD $0xffffff45356ffac5 // vmovdqu $-187(%rip), %xmm6 /* LCPI26_6(%rip) */ - MOVL $4294967295, R14 - MOVQ $-1, AX MOVQ $-1, R8 - MOVQ DI, R15 + MOVQ SI, R14 -LBB26_7: - LONG $0x6f7ac1c4; BYTE $0x3f // vmovdqu (%r15), %xmm7 +LBB24_9: + LONG $0x3c6ffac5; BYTE $0x07 // vmovdqu (%rdi,%rax), %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 $0xd4ebc1c5 // vpor %xmm4, %xmm7, %xmm2 + 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 $0xd7d7f9c5 // vpmovmskb %xmm7, %edx - LONG $0xead779c5 // vpmovmskb %xmm2, %r13d - LONG $0xe1d779c5 // vpmovmskb %xmm1, %r12d + LONG $0xfad779c5 // vpmovmskb %xmm2, %r15d + LONG $0xd9d779c5 // vpmovmskb %xmm1, %r11d LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - XORQ R14, CX - BSFQ CX, CX + NOTL CX + BSFL CX, CX CMPL CX, $16 - JE LBB26_9 + JE LBB24_11 MOVL $-1, BX SHLL CX, BX NOTL BX ANDL BX, DX - ANDL BX, R13 - ANDL R12, BX - MOVL BX, R12 + ANDL BX, R15 + ANDL R11, BX + MOVL BX, R11 -LBB26_9: +LBB24_11: LEAL -1(DX), BX ANDL DX, BX - JNE LBB26_50 - LEAL -1(R13), BX - ANDL R13, BX - JNE LBB26_50 - LEAL -1(R12), BX - ANDL R12, BX - JNE LBB26_50 + JNE LBB24_12 + LEAL -1(R15), BX + ANDL R15, BX + JNE LBB24_12 + LEAL -1(R11), BX + ANDL R11, BX + JNE LBB24_12 TESTL DX, DX - JE LBB26_15 - MOVQ R15, BX - SUBQ DI, BX + JE LBB24_19 BSFL DX, DX - ADDQ BX, DX CMPQ R8, $-1 - JNE LBB26_51 + JNE LBB24_56 + ADDQ AX, DX MOVQ DX, R8 -LBB26_15: - TESTL R13, R13 - JE LBB26_18 - MOVQ R15, BX - SUBQ DI, BX - BSFL R13, DX - ADDQ BX, DX - CMPQ AX, $-1 - JNE LBB26_51 - MOVQ DX, AX - -LBB26_18: - TESTL R12, R12 - JE LBB26_21 - MOVQ R15, BX - SUBQ DI, BX - BSFL R12, DX - ADDQ BX, DX +LBB24_19: + TESTL R15, R15 + JE LBB24_22 + BSFL R15, DX CMPQ R9, $-1 - JNE LBB26_51 + JNE LBB24_56 + ADDQ AX, DX MOVQ DX, R9 -LBB26_21: - CMPL CX, $16 - JNE LBB26_35 - ADDQ $16, R15 - ADDQ $-16, SI - CMPQ SI, $15 - JA LBB26_7 - TESTQ R11, R11 - JE LBB26_36 +LBB24_22: + TESTL R11, R11 + JE LBB24_25 + BSFL R11, DX + CMPQ R10, $-1 + JNE LBB24_56 + ADDQ AX, DX + MOVQ DX, R10 -LBB26_24: - LEAQ 0(R10)(R11*1), CX - LONG $0x5b358d48; WORD $0x0001; BYTE $0x00 // leaq $347(%rip), %rsi /* LJTI26_0(%rip) */ - JMP LBB26_26 +LBB24_25: + CMPL CX, $16 + JNE LBB24_57 + ADDQ $-16, R14 + ADDQ $16, AX + CMPQ R14, $15 + JA LBB24_9 + LEAQ 0(DI)(AX*1), CX + MOVQ CX, R11 + CMPQ AX, SI + JE LBB24_41 -LBB26_25: - MOVQ BX, R10 - DECQ R11 - JE LBB26_54 +LBB24_28: + LEAQ 0(CX)(R14*1), R11 + MOVQ CX, SI + SUBQ DI, SI + XORL AX, AX + LONG $0x3b3d8d4c; WORD $0x0001; BYTE $0x00 // leaq $315(%rip), %r15 /* LJTI24_0(%rip) */ + JMP LBB24_29 -LBB26_26: - MOVBLSX 0(R10), DX - ADDL $-43, DX - CMPL DX, $58 - JA LBB26_36 - LEAQ 1(R10), BX - MOVLQSX 0(SI)(DX*4), DX - ADDQ SI, DX +LBB24_31: + CMPL DX, $101 + JNE LBB24_40 + +LBB24_32: + CMPQ R9, $-1 + JNE LBB24_58 + LEAQ 0(SI)(AX*1), R9 + +LBB24_39: + ADDQ $1, AX + CMPQ R14, AX + JE LBB24_41 + +LBB24_29: + MOVBLSX 0(CX)(AX*1), DX + LEAL -48(DX), BX + CMPL BX, $10 + JB LBB24_39 + LEAL -43(DX), BX + CMPL BX, $26 + JA LBB24_31 + MOVLQSX 0(R15)(BX*4), DX + ADDQ R15, DX JMP DX -LBB26_28: - MOVQ BX, DX - SUBQ DI, DX - CMPQ R9, $-1 - JNE LBB26_58 - DECQ DX - MOVQ DX, R9 - JMP LBB26_25 +LBB24_37: + CMPQ R10, $-1 + JNE LBB24_58 + LEAQ 0(SI)(AX*1), R10 + JMP LBB24_39 -LBB26_30: - MOVQ BX, DX - SUBQ DI, DX - CMPQ AX, $-1 - JNE LBB26_58 - DECQ DX - MOVQ DX, AX - JMP LBB26_25 - -LBB26_32: - MOVQ BX, DX - SUBQ DI, DX +LBB24_35: CMPQ R8, $-1 - JNE LBB26_58 - DECQ DX - MOVQ DX, R8 - JMP LBB26_25 + JNE LBB24_58 + LEAQ 0(SI)(AX*1), R8 + JMP LBB24_39 -LBB26_34: +LBB24_1: MOVQ $-1, AX - JMP LBB26_53 + JMP LBB24_55 -LBB26_35: - ADDQ CX, R15 - MOVQ R15, R10 +LBB24_57: + MOVL CX, R11 + ADDQ DI, R11 + ADDQ AX, R11 -LBB26_36: - MOVQ $-1, DX - TESTQ AX, AX - JE LBB26_52 - -LBB26_37: - TESTQ R9, R9 - JE LBB26_52 +LBB24_41: + MOVQ $-1, AX TESTQ R8, R8 - JE LBB26_52 - SUBQ DI, R10 - LEAQ -1(R10), CX - CMPQ AX, CX - JE LBB26_45 - CMPQ R8, CX - JE LBB26_45 - CMPQ R9, CX - JE LBB26_45 + JNE LBB24_42 + JMP LBB24_55 + +LBB24_40: + ADDQ AX, CX + MOVQ CX, R11 + MOVQ $-1, AX + TESTQ R8, R8 + JE LBB24_55 + +LBB24_42: + TESTQ R10, R10 + JE LBB24_55 TESTQ R9, R9 - JLE LBB26_46 - LEAQ -1(R9), CX - CMPQ AX, CX - JE LBB26_46 - NOTQ R9 - MOVQ R9, DX - MOVQ R9, AX - JMP LBB26_53 - -LBB26_45: - NEGQ R10 - MOVQ R10, DX - MOVQ R10, AX - JMP LBB26_53 - -LBB26_46: - MOVQ R8, CX - ORQ AX, CX + JE LBB24_55 + SUBQ DI, R11 + LEAQ -1(R11), AX CMPQ R8, AX - JL LBB26_49 - TESTQ CX, CX - JS LBB26_49 - NOTQ R8 - MOVQ R8, DX - MOVQ R8, AX - JMP LBB26_53 + JE LBB24_47 + CMPQ R10, AX + JE LBB24_47 + CMPQ R9, AX + JE LBB24_47 + TESTQ R10, R10 + JLE LBB24_51 + LEAQ -1(R10), AX + CMPQ R9, AX + JE LBB24_51 + NOTQ R10 + MOVQ R10, AX + JMP LBB24_55 -LBB26_49: - TESTQ CX, CX - LEAQ -1(AX), CX - NOTQ AX - LONG $0xc2480f49 // cmovsq %r10, %rax - CMPQ R8, CX - LONG $0xc2450f49 // cmovneq %r10, %rax - JMP LBB26_53 +LBB24_47: + NEGQ R11 + MOVQ R11, AX -LBB26_50: - SUBQ DI, R15 - BSFL BX, DX - ADDQ R15, DX - -LBB26_51: - NOTQ DX - -LBB26_52: - MOVQ DX, AX - -LBB26_53: +LBB24_55: 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 -LBB26_54: - MOVQ CX, R10 - MOVQ $-1, DX - TESTQ AX, AX - JNE LBB26_37 - JMP LBB26_52 +LBB24_51: + MOVQ R8, AX + ORQ R9, AX + SETPL AX + JS LBB24_54 + CMPQ R8, R9 + JL LBB24_54 + NOTQ R8 + MOVQ R8, AX + JMP LBB24_55 -LBB26_58: - NEGQ DX - JMP LBB26_52 +LBB24_54: + LEAQ -1(R9), CX + CMPQ R8, CX + NOTQ R9 + LONG $0xcb450f4d // cmovneq %r11, %r9 + TESTB AX, AX + LONG $0xcb440f4d // cmoveq %r11, %r9 + MOVQ R9, AX + JMP LBB24_55 -LBB26_57: +LBB24_12: + BSFL BX, CX + JMP LBB24_13 + +LBB24_58: + SUBQ CX, DI + NOTQ AX + ADDQ DI, AX + JMP LBB24_55 + +LBB24_56: + MOVL DX, CX + +LBB24_13: + NOTQ AX + SUBQ CX, AX + JMP LBB24_55 + +LBB24_7: MOVQ $-1, R8 - MOVQ DI, R10 - MOVQ SI, R11 - MOVQ $-1, AX + MOVQ DI, CX + MOVQ SI, R14 MOVQ $-1, R9 - JMP LBB26_24 + MOVQ $-1, R10 + JMP LBB24_28 -// .set L26_0_set_28, LBB26_28-LJTI26_0 -// .set L26_0_set_36, LBB26_36-LJTI26_0 -// .set L26_0_set_32, LBB26_32-LJTI26_0 -// .set L26_0_set_25, LBB26_25-LJTI26_0 -// .set L26_0_set_30, LBB26_30-LJTI26_0 -LJTI26_0: - LONG $0xfffffecc // .long L26_0_set_28 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xfffffecc // .long L26_0_set_28 - LONG $0xfffffefc // .long L26_0_set_32 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xfffffea7 // .long L26_0_set_25 - LONG $0xfffffea7 // .long L26_0_set_25 - LONG $0xfffffea7 // .long L26_0_set_25 - LONG $0xfffffea7 // .long L26_0_set_25 - LONG $0xfffffea7 // .long L26_0_set_25 - LONG $0xfffffea7 // .long L26_0_set_25 - LONG $0xfffffea7 // .long L26_0_set_25 - LONG $0xfffffea7 // .long L26_0_set_25 - LONG $0xfffffea7 // .long L26_0_set_25 - LONG $0xfffffea7 // .long L26_0_set_25 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xfffffee4 // .long L26_0_set_30 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xffffff26 // .long L26_0_set_36 - LONG $0xfffffee4 // .long L26_0_set_30 +// .set L24_0_set_37, LBB24_37-LJTI24_0 +// .set L24_0_set_40, LBB24_40-LJTI24_0 +// .set L24_0_set_35, LBB24_35-LJTI24_0 +// .set L24_0_set_32, LBB24_32-LJTI24_0 +LJTI24_0: + LONG $0xffffff00 // .long L24_0_set_37 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff00 // .long L24_0_set_37 + LONG $0xffffff10 // .long L24_0_set_35 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xffffff40 // .long L24_0_set_40 + LONG $0xfffffecc // .long L24_0_set_32 _skip_positive: BYTE $0x55 // pushq %rbp @@ -6920,16 +6888,16 @@ _skip_positive: MOVQ 8(DI), SI SUBQ BX, SI MOVQ AX, DI - LONG $0xfffbb8e8; BYTE $0xff // callq _do_skip_number + LONG $0xfffc78e8; BYTE $0xff // callq _do_skip_number + LEAQ -1(AX), DX MOVQ $-2, CX - MOVQ $-2, DX - SUBQ AX, DX + MOVQ $-2, SI + SUBQ AX, SI TESTQ AX, AX - LEAQ -1(AX), AX - LONG $0xc2480f48 // cmovsq %rdx, %rax + LONG $0xf2490f48 // cmovnsq %rdx, %rsi LONG $0xcb490f48 // cmovnsq %rbx, %rcx - ADDQ R15, AX - MOVQ AX, 0(R14) + ADDQ R15, SI + MOVQ SI, 0(R14) MOVQ CX, AX ADDQ $8, SP BYTE $0x5b // popq %rbx @@ -6955,22 +6923,22 @@ _skip_number: SETEQ AX ADDQ AX, BX SUBQ AX, SI - JE LBB28_6 + JE LBB26_6 CMPQ R15, SI - JAE LBB28_3 + JAE LBB26_3 MOVB 0(BX), AX ADDB $-48, AX CMPB AX, $9 - JA LBB28_8 + JA LBB26_8 -LBB28_3: +LBB26_3: MOVQ BX, DI - LONG $0xfffb41e8; BYTE $0xff // callq _do_skip_number + LONG $0xfffc01e8; BYTE $0xff // callq _do_skip_number TESTQ AX, AX - JS LBB28_7 + JS LBB26_7 ADDQ AX, BX -LBB28_5: +LBB26_5: SUBQ R12, BX MOVQ BX, 0(R14) MOVQ R15, AX @@ -6981,17 +6949,17 @@ LBB28_5: BYTE $0x5d // popq %rbp RET -LBB28_6: +LBB26_6: MOVQ $-1, R15 - JMP LBB28_5 + JMP LBB26_5 -LBB28_7: +LBB26_7: NOTQ AX ADDQ AX, BX -LBB28_8: +LBB26_8: MOVQ $-2, R15 - JMP LBB28_5 + JMP LBB26_5 _validate_one: BYTE $0x55 // pushq %rbp @@ -7000,70 +6968,21 @@ _validate_one: MOVQ SI, DX MOVQ DI, SI MOVQ $1, 0(AX) + MOVL $32, CX MOVQ AX, DI - MOVL $1, CX BYTE $0x5d // popq %rbp JMP _fsm_exec -_find_non_ascii: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - MOVQ DI, CX - CMPQ SI, $16 - JL LBB30_1 - -LBB30_6: - LONG $0x016ffac5 // vmovdqu (%rcx), %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - TESTW AX, AX - JNE LBB30_7 - ADDQ $16, CX - CMPQ SI, $31 - LEAQ -16(SI), SI - JG LBB30_6 - -LBB30_1: - MOVQ $-1, AX - TESTQ SI, SI - JLE LBB30_9 - INCQ SI - -LBB30_3: - CMPB 0(CX), $0 - JS LBB30_8 - INCQ CX - DECQ SI - CMPQ SI, $1 - JG LBB30_3 - -LBB30_9: - BYTE $0x5d // popq %rbp - RET - -LBB30_8: - SUBQ DI, CX - MOVQ CX, AX - BYTE $0x5d // popq %rbp - RET - -LBB30_7: - MOVWLZX AX, AX - SUBQ DI, CX - BSFQ AX, AX - ADDQ CX, AX - BYTE $0x5d // popq %rbp - RET - _print_mantissa: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp WORD $0x5641 // pushq %r14 BYTE $0x53 // pushq %rbx - MOVLQSX DX, R14 + MOVL DX, R14 ADDQ SI, R14 MOVQ DI, AX SHRQ $32, AX - JE LBB31_2 + JE LBB28_2 MOVQ $-6067343680855748867, DX MOVQ DI, AX MULQ DX @@ -7095,7 +7014,7 @@ _print_mantissa: LONG $0x64fa6b41 // imull $100, %r10d, %edi SUBL DI, AX MOVWLZX AX, R11 - LONG $0x203d8d48; WORD $0x0059; BYTE $0x00 // leaq $22816(%rip), %rdi /* _Digits(%rip) */ + LONG $0x6d3d8d48; WORD $0x0059; BYTE $0x00 // leaq $22893(%rip), %rdi /* _Digits(%rip) */ MOVWLZX 0(DI)(R8*2), AX MOVW AX, -2(R14) MOVWLZX 0(DI)(R9*2), AX @@ -7107,13 +7026,13 @@ _print_mantissa: ADDQ $-8, R14 MOVQ DX, DI -LBB31_2: +LBB28_2: CMPL DI, $10000 - JB LBB31_3 + JB LBB28_3 MOVL $3518437209, R8 - LONG $0xd80d8d4c; WORD $0x0058; BYTE $0x00 // leaq $22744(%rip), %r9 /* _Digits(%rip) */ + LONG $0x250d8d4c; WORD $0x0059; BYTE $0x00 // leaq $22821(%rip), %r9 /* _Digits(%rip) */ -LBB31_5: +LBB28_5: MOVL DI, AX IMULQ R8, AX SHRQ $45, AX @@ -7130,11 +7049,11 @@ LBB31_5: ADDQ $-4, R14 CMPL DI, $99999999 MOVL AX, DI - JA LBB31_5 + JA LBB28_5 CMPL AX, $100 - JB LBB31_8 + JB LBB28_8 -LBB31_7: +LBB28_7: MOVWLZX AX, CX SHRL $2, CX LONG $0x147bc969; WORD $0x0000 // imull $5243, %ecx, %ecx @@ -7142,17 +7061,17 @@ LBB31_7: WORD $0xd16b; BYTE $0x64 // imull $100, %ecx, %edx SUBL DX, AX MOVWLZX AX, AX - LONG $0x71158d48; WORD $0x0058; BYTE $0x00 // leaq $22641(%rip), %rdx /* _Digits(%rip) */ + LONG $0xbe158d48; WORD $0x0058; BYTE $0x00 // leaq $22718(%rip), %rdx /* _Digits(%rip) */ MOVWLZX 0(DX)(AX*2), AX MOVW AX, -2(R14) ADDQ $-2, R14 MOVL CX, AX -LBB31_8: +LBB28_8: CMPL AX, $10 - JB LBB31_10 + JB LBB28_10 MOVL AX, AX - LONG $0x540d8d48; WORD $0x0058; BYTE $0x00 // leaq $22612(%rip), %rcx /* _Digits(%rip) */ + LONG $0xa10d8d48; WORD $0x0058; BYTE $0x00 // leaq $22689(%rip), %rcx /* _Digits(%rip) */ MOVWLZX 0(CX)(AX*2), AX MOVW AX, -2(R14) BYTE $0x5b // popq %rbx @@ -7160,13 +7079,13 @@ LBB31_8: BYTE $0x5d // popq %rbp RET -LBB31_3: +LBB28_3: MOVL DI, AX CMPL AX, $100 - JAE LBB31_7 - JMP LBB31_8 + JAE LBB28_7 + JMP LBB28_8 -LBB31_10: +LBB28_10: ADDB $48, AX MOVB AX, 0(SI) BYTE $0x5b // popq %rbx @@ -7177,292 +7096,314 @@ LBB31_10: _left_shift: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5741 // pushq %r15 WORD $0x5641 // pushq %r14 BYTE $0x53 // pushq %rbx MOVL SI, CX - IMUL3Q $104, CX, DX - LONG $0x78358d48; WORD $0x008b; BYTE $0x00 // leaq $35704(%rip), %rsi /* _LSHIFT_TAB(%rip) */ - MOVL 0(DX)(SI*1), R8 - MOVQ 0(DI), R10 + IMUL3Q $104, CX, R14 + LONG $0xc3158d48; WORD $0x008b; BYTE $0x00 // leaq $35779(%rip), %rdx /* _LSHIFT_TAB(%rip) */ + MOVL 0(R14)(DX*1), R8 + MOVQ 0(DI), R11 MOVLQSX 16(DI), R9 - MOVB 4(DX)(SI*1), AX + MOVL R9, R10 TESTQ R9, R9 - JE LBB32_6 - LEAQ 5(DX)(SI*1), DX - XORL SI, SI + JE LBB29_1 + LEAQ 0(R14)(DX*1), SI + ADDQ $4, SI + XORL BX, BX -LBB32_3: +LBB29_3: + MOVBLZX 0(SI)(BX*1), AX TESTB AX, AX - JE LBB32_8 - CMPB 0(R10)(SI*1), AX - JNE LBB32_5 - MOVBLZX 0(DX)(SI*1), AX - INCQ SI - CMPQ R9, SI - JNE LBB32_3 + JE LBB29_10 + CMPB 0(R11)(BX*1), AX + JNE LBB29_5 + ADDQ $1, BX + CMPQ R9, BX + JNE LBB29_3 + MOVL R9, SI + ADDQ R14, DX + CMPB 4(SI)(DX*1), $0 + JNE LBB29_9 + JMP LBB29_10 -LBB32_6: - TESTB AX, AX - JE LBB32_8 +LBB29_1: + XORL SI, SI + ADDQ R14, DX + CMPB 4(SI)(DX*1), $0 + JE LBB29_10 -LBB32_7: - DECL R8 +LBB29_9: + ADDL $-1, R8 -LBB32_8: - TESTL R9, R9 - JLE LBB32_23 - LEAL 0(R8)(R9*1), AX - MOVLQSX AX, R14 - DECQ R14 +LBB29_10: + TESTL R10, R10 + JLE LBB29_25 + LEAL 0(R8)(R10*1), AX + MOVLQSX AX, R15 + ADDL $-1, R9 + ADDQ $-1, R15 XORL DX, DX - MOVQ $-3689348814741910323, R11 + MOVQ $-3689348814741910323, R14 -LBB32_10: - MOVBQSX -1(R10)(R9*1), SI +LBB29_12: + MOVL R9, AX + MOVBQSX 0(R11)(AX*1), SI ADDQ $-48, SI SHLQ CX, SI ADDQ DX, SI MOVQ SI, AX - MULQ R11 + MULQ R14 SHRQ $3, DX LEAQ 0(DX)(DX*1), AX LEAQ 0(AX)(AX*4), BX MOVQ SI, AX SUBQ BX, AX - CMPQ 8(DI), R14 - JBE LBB32_16 + CMPQ 8(DI), R15 + JBE LBB29_18 ADDB $48, AX - MOVB AX, 0(R10)(R14*1) - JMP LBB32_18 + MOVB AX, 0(R11)(R15*1) + JMP LBB29_20 -LBB32_16: +LBB29_18: TESTQ AX, AX - JE LBB32_18 + JE LBB29_20 MOVL $1, 28(DI) -LBB32_18: - CMPQ R9, $2 - JL LBB32_12 - DECQ R9 - MOVQ 0(DI), R10 - DECQ R14 - JMP LBB32_10 +LBB29_20: + CMPQ R10, $2 + JL LBB29_14 + ADDQ $-1, R10 + MOVQ 0(DI), R11 + ADDL $-1, R9 + ADDQ $-1, R15 + JMP LBB29_12 -LBB32_12: +LBB29_14: CMPQ SI, $10 - JAE LBB32_13 + JAE LBB29_15 -LBB32_23: +LBB29_25: MOVLQSX 16(DI), CX MOVLQSX R8, AX ADDQ CX, AX MOVL AX, 16(DI) MOVQ 8(DI), CX CMPQ CX, AX - JA LBB32_25 + JA LBB29_27 MOVL CX, 16(DI) MOVL CX, AX -LBB32_25: +LBB29_27: ADDL R8, 20(DI) TESTL AX, AX - JLE LBB32_29 + JLE LBB29_31 MOVQ 0(DI), CX - MOVL AX, AX + MOVL AX, DX + ADDQ $1, DX + ADDL $-1, AX -LBB32_27: - CMPB -1(CX)(AX*1), $48 - JNE LBB32_31 - MOVL AX, DX - DECQ AX - DECL DX - MOVL DX, 16(DI) - LEAQ 1(AX), DX +LBB29_29: + MOVL AX, SI + CMPB 0(CX)(SI*1), $48 + JNE LBB29_33 + MOVL AX, 16(DI) + ADDQ $-1, DX + ADDL $-1, AX CMPQ DX, $1 - JG LBB32_27 + JG LBB29_29 + JMP LBB29_32 -LBB32_29: - TESTL AX, AX - JE LBB32_30 +LBB29_31: + JNE LBB29_33 -LBB32_31: +LBB29_32: + MOVL $0, 20(DI) + +LBB29_33: BYTE $0x5b // popq %rbx WORD $0x5e41 // popq %r14 + WORD $0x5f41 // popq %r15 BYTE $0x5d // popq %rbp RET -LBB32_13: - MOVLQSX R14, SI - DECQ SI - JMP LBB32_14 +LBB29_15: + ADDL R8, R9 + MOVLQSX R9, SI + ADDQ $-1, SI + JMP LBB29_16 -LBB32_15: +LBB29_17: ADDB $48, AX MOVQ 0(DI), BX MOVB AX, 0(BX)(SI*1) -LBB32_22: - DECQ SI +LBB29_24: + ADDQ $-1, SI CMPQ CX, $9 - JBE LBB32_23 + JBE LBB29_25 -LBB32_14: +LBB29_16: MOVQ DX, CX MOVQ DX, AX - MULQ R11 + MULQ R14 SHRQ $3, DX LEAQ 0(DX)(DX*1), AX LEAQ 0(AX)(AX*4), BX MOVQ CX, AX SUBQ BX, AX CMPQ 8(DI), SI - JA LBB32_15 + JA LBB29_17 TESTQ AX, AX - JE LBB32_22 + JE LBB29_24 MOVL $1, 28(DI) - JMP LBB32_22 + JMP LBB29_24 -LBB32_30: - MOVL $0, 20(DI) - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - BYTE $0x5d // popq %rbp - RET - -LBB32_5: - JL LBB32_7 - JMP LBB32_8 +LBB29_5: + JL LBB29_9 + JMP LBB29_10 _right_shift: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - MOVL SI, CX - MOVLQSX 16(DI), R9 - XORL SI, SI - XORL AX, AX + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + BYTE $0x53 // pushq %rbx + MOVL SI, CX + MOVL 16(DI), R8 + XORL DX, DX + TESTL R8, R8 + MOVL $0, R11 + LONG $0xd84f0f45 // cmovgl %r8d, %r11d + XORL AX, AX -LBB33_1: - CMPQ SI, R9 - JGE LBB33_2 +LBB30_1: + CMPQ R11, DX + JE LBB30_2 LEAQ 0(AX)(AX*4), AX - MOVQ 0(DI), DX - MOVBQSX 0(DX)(SI*1), DX - LEAQ -48(DX)(AX*2), AX - INCQ SI - MOVQ AX, DX - SHRQ CX, DX - TESTQ DX, DX - JE LBB33_1 + MOVQ 0(DI), SI + MOVBQSX 0(SI)(DX*1), SI + LEAQ 0(SI)(AX*2), AX + ADDQ $-48, AX + ADDQ $1, DX + MOVQ AX, SI + SHRQ CX, SI + TESTQ SI, SI + JE LBB30_1 + MOVL DX, R11 -LBB33_6: +LBB30_7: MOVL 20(DI), DX - SUBL SI, DX - INCL DX - MOVQ $-1, R8 - SHLQ CX, R8 + SUBL R11, DX + ADDL $1, DX + MOVQ $-1, R9 + SHLQ CX, R9 MOVL DX, 20(DI) - NOTQ R8 + NOTQ R9 XORL R10, R10 - CMPL SI, R9 - JGE LBB33_9 - MOVLQSX SI, R9 + CMPL R11, R8 + JGE LBB30_10 + MOVLQSX R11, R8 MOVQ 0(DI), SI XORL R10, R10 -LBB33_8: +LBB30_9: MOVQ AX, DX SHRQ CX, DX - ANDQ R8, AX + ANDQ R9, AX ADDB $48, DX MOVB DX, 0(SI)(R10*1) - LEAQ 0(AX)(AX*4), AX MOVQ 0(DI), SI - LEAQ 0(SI)(R9*1), DX - MOVBQSX 0(R10)(DX*1), DX - LEAQ -48(DX)(AX*2), AX - MOVLQSX 16(DI), R11 - LEAQ 1(R9)(R10*1), DX - INCQ R10 - CMPQ DX, R11 - JL LBB33_8 - JMP LBB33_9 + LEAQ 0(SI)(R8*1), DX + MOVBQSX 0(R10)(DX*1), R11 + LEAQ 1(R8)(R10*1), BX + ADDQ $1, R10 + LEAQ 0(AX)(AX*4), AX + LEAQ 0(R11)(AX*2), AX + ADDQ $-48, AX + MOVLQSX 16(DI), DX + CMPQ BX, DX + JL LBB30_9 + JMP LBB30_10 -LBB33_11: +LBB30_12: ADDB $48, SI - MOVQ 0(DI), DX - MOVB SI, 0(DX)(R9*1) - INCL R9 - MOVL R9, R10 + MOVQ 0(DI), BX + MOVB SI, 0(BX)(DX*1) + ADDL $1, DX + MOVL DX, R10 -LBB33_14: +LBB30_15: ADDQ AX, AX LEAQ 0(AX)(AX*4), AX -LBB33_9: +LBB30_10: TESTQ AX, AX - JE LBB33_15 + JE LBB30_16 MOVQ AX, SI SHRQ CX, SI - ANDQ R8, AX - MOVLQSX R10, R9 - CMPQ 8(DI), R9 - JA LBB33_11 + ANDQ R9, AX + MOVLQSX R10, DX + CMPQ 8(DI), DX + JA LBB30_12 TESTQ SI, SI - JE LBB33_14 + JE LBB30_15 MOVL $1, 28(DI) - JMP LBB33_14 + JMP LBB30_15 -LBB33_15: +LBB30_16: MOVL R10, 16(DI) TESTL R10, R10 - JLE LBB33_19 + JLE LBB30_20 MOVQ 0(DI), AX - MOVL R10, R10 + MOVL R10, CX + ADDQ $1, CX + ADDL $-1, R10 -LBB33_17: - CMPB -1(AX)(R10*1), $48 - JNE LBB33_21 - MOVL R10, CX - DECQ R10 - DECL CX - MOVL CX, 16(DI) - LEAQ 1(R10), CX +LBB30_18: + MOVL R10, DX + CMPB 0(AX)(DX*1), $48 + JNE LBB30_22 + MOVL R10, 16(DI) + ADDQ $-1, CX + ADDL $-1, R10 CMPQ CX, $1 - JG LBB33_17 + JG LBB30_18 + JMP LBB30_21 -LBB33_19: - TESTL R10, R10 - JE LBB33_20 +LBB30_2: + TESTQ AX, AX + JE LBB30_23 + MOVQ AX, DX + SHRQ CX, DX + TESTQ DX, DX + JNE LBB30_7 -LBB33_21: +LBB30_4: + ADDQ AX, AX + LEAQ 0(AX)(AX*4), AX + ADDL $1, R11 + MOVQ AX, DX + SHRQ CX, DX + TESTQ DX, DX + JE LBB30_4 + JMP LBB30_7 + +LBB30_20: + JE LBB30_21 + +LBB30_22: + BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB33_2: - TESTQ AX, AX - JE LBB33_22 - MOVQ AX, DX - SHRQ CX, DX - TESTQ DX, DX - JNE LBB33_6 - -LBB33_4: - ADDQ AX, AX - LEAQ 0(AX)(AX*4), AX - INCL SI - MOVQ AX, DX - SHRQ CX, DX - TESTQ DX, DX - JE LBB33_4 - JMP LBB33_6 - -LBB33_20: +LBB30_21: MOVL $0, 20(DI) + BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB33_22: +LBB30_23: MOVL $0, 16(DI) + BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET @@ -8874,9 +8815,6 @@ _POW_TAB: _MASK_USE_NUMBER: LONG $0x00000002 // .long 2 -_MASK_ALLOW_CONTROL: - QUAD $0x0000000080000000 // .quad 2147483648 - _DOUBLE_POW5_INV_SPLIT: QUAD $0x0000000000000001 // .quad 1 QUAD $0x2000000000000000 // .quad 2305843009213693952 @@ -11618,73 +11556,43 @@ _LSHIFT_TAB: LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' _P10_TAB: - QUAD $0x3ff0000000000000 // .quad 4607182418800017408 - QUAD $0x4024000000000000 // .quad 4621819117588971520 - QUAD $0x4059000000000000 // .quad 4636737291354636288 - QUAD $0x408f400000000000 // .quad 4652007308841189376 - QUAD $0x40c3880000000000 // .quad 4666723172467343360 - QUAD $0x40f86a0000000000 // .quad 4681608360884174848 - QUAD $0x412e848000000000 // .quad 4696837146684686336 - QUAD $0x416312d000000000 // .quad 4711630319722168320 - QUAD $0x4197d78400000000 // .quad 4726483295884279808 - QUAD $0x41cdcd6500000000 // .quad 4741671816366391296 - QUAD $0x4202a05f20000000 // .quad 4756540486875873280 - QUAD $0x42374876e8000000 // .quad 4771362005757984768 - QUAD $0x426d1a94a2000000 // .quad 4786511204640096256 - QUAD $0x42a2309ce5400000 // .quad 4801453603149578240 - QUAD $0x42d6bcc41e900000 // .quad 4816244402031689728 - QUAD $0x430c6bf526340000 // .quad 4831355200913801216 - QUAD $0x4341c37937e08000 // .quad 4846369599423283200 - QUAD $0x4376345785d8a000 // .quad 4861130398305394688 - QUAD $0x43abc16d674ec800 // .quad 4876203697187506176 - QUAD $0x43e158e460913d00 // .quad 4891288408196988160 - QUAD $0x4415af1d78b58c40 // .quad 4906019910204099648 - QUAD $0x444b1ae4d6e2ef50 // .quad 4921056587992461136 - QUAD $0x4480f0cf064dd592 // .quad 4936209963552724370 - -_first: - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf1f1f1f1f1f1f1f1; QUAD $0xf1f1f1f1f1f1f1f1 // .ascii 16, '\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1' - QUAD $0xf1f1f1f1f1f1f1f1; QUAD $0xf1f1f1f1f1f1f1f1 // .ascii 16, '\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1' - QUAD $0xf1f1f1f1f1f1f1f1; QUAD $0xf1f1f1f1f1f1f1f1 // .ascii 16, '\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1' - QUAD $0xf1f1f1f1f1f1f1f1; QUAD $0xf1f1f1f1f1f1f1f1 // .ascii 16, '\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1' - QUAD $0x020202020202f1f1; QUAD $0x0202020202020202 // .ascii 16, '\xf1\xf1\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' - QUAD $0x0202020202020202; QUAD $0x0202020202020202 // .ascii 16, '\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' - QUAD $0x0303030303030313; QUAD $0x0303230303030303 // .ascii 16, '\x13\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03#\x03\x03' - QUAD $0xf1f1f14404040434; QUAD $0xf1f1f1f1f1f1f1f1 // .ascii 16, '4\x04\x04\x04D\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1' - -_ranges: - BYTE $0x80 // .byte 128 - BYTE $0xbf // .byte 191 - BYTE $0xa0 // .byte 160 - BYTE $0xbf // .byte 191 - BYTE $0x80 // .byte 128 - BYTE $0x9f // .byte 159 - BYTE $0x90 // .byte 144 - BYTE $0xbf // .byte 191 - BYTE $0x80 // .byte 128 - BYTE $0x8f // .byte 143 + QUAD $0x3ff0000000000000 // .quad 0x3ff0000000000000 + QUAD $0x4024000000000000 // .quad 0x4024000000000000 + QUAD $0x4059000000000000 // .quad 0x4059000000000000 + QUAD $0x408f400000000000 // .quad 0x408f400000000000 + QUAD $0x40c3880000000000 // .quad 0x40c3880000000000 + QUAD $0x40f86a0000000000 // .quad 0x40f86a0000000000 + QUAD $0x412e848000000000 // .quad 0x412e848000000000 + QUAD $0x416312d000000000 // .quad 0x416312d000000000 + QUAD $0x4197d78400000000 // .quad 0x4197d78400000000 + QUAD $0x41cdcd6500000000 // .quad 0x41cdcd6500000000 + QUAD $0x4202a05f20000000 // .quad 0x4202a05f20000000 + QUAD $0x42374876e8000000 // .quad 0x42374876e8000000 + QUAD $0x426d1a94a2000000 // .quad 0x426d1a94a2000000 + QUAD $0x42a2309ce5400000 // .quad 0x42a2309ce5400000 + QUAD $0x42d6bcc41e900000 // .quad 0x42d6bcc41e900000 + QUAD $0x430c6bf526340000 // .quad 0x430c6bf526340000 + QUAD $0x4341c37937e08000 // .quad 0x4341c37937e08000 + QUAD $0x4376345785d8a000 // .quad 0x4376345785d8a000 + QUAD $0x43abc16d674ec800 // .quad 0x43abc16d674ec800 + QUAD $0x43e158e460913d00 // .quad 0x43e158e460913d00 + QUAD $0x4415af1d78b58c40 // .quad 0x4415af1d78b58c40 + QUAD $0x444b1ae4d6e2ef50 // .quad 0x444b1ae4d6e2ef50 + QUAD $0x4480f0cf064dd592 // .quad 0x4480f0cf064dd592 TEXT ·__f64toa(SB), NOSPLIT | NOFRAME, $0 - 24 NO_LOCAL_POINTERS _entry: MOVQ (TLS), R14 - LEAQ -120(SP), R12 + LEAQ -136(SP), R12 CMPQ R12, 16(R14) JBE _stack_grow _f64toa: MOVQ out+0(FP), DI MOVSD val+8(FP), X0 - CALL ·__native_entry__+630(SB) // _f64toa + CALL ·__native_entry__+570(SB) // _f64toa MOVQ AX, ret+16(FP) RET @@ -11697,7 +11605,7 @@ TEXT ·__html_escape(SB), NOSPLIT | NOFRAME, $0 - 40 _entry: MOVQ (TLS), R14 - LEAQ -72(SP), R12 + LEAQ -64(SP), R12 CMPQ R12, 16(R14) JBE _stack_grow @@ -11706,7 +11614,7 @@ _html_escape: MOVQ nb+8(FP), SI MOVQ dp+16(FP), DX MOVQ dn+24(FP), CX - CALL ·__native_entry__+8581(SB) // _html_escape + CALL ·__native_entry__+9062(SB) // _html_escape MOVQ AX, ret+32(FP) RET @@ -11726,7 +11634,7 @@ _entry: _i64toa: MOVQ out+0(FP), DI MOVQ val+8(FP), SI - CALL ·__native_entry__+3642(SB) // _i64toa + CALL ·__native_entry__+3205(SB) // _i64toa MOVQ AX, ret+16(FP) RET @@ -11747,7 +11655,7 @@ _lspace: MOVQ sp+0(FP), DI MOVQ nb+8(FP), SI MOVQ off+16(FP), DX - CALL ·__native_entry__+301(SB) // _lspace + CALL ·__native_entry__+251(SB) // _lspace MOVQ AX, ret+24(FP) RET @@ -11780,7 +11688,7 @@ TEXT ·__quote(SB), NOSPLIT | NOFRAME, $0 - 48 _entry: MOVQ (TLS), R14 - LEAQ -56(SP), R12 + LEAQ -80(SP), R12 CMPQ R12, 16(R14) JBE _stack_grow @@ -11790,7 +11698,7 @@ _quote: MOVQ dp+16(FP), DX MOVQ dn+24(FP), CX MOVQ flags+32(FP), R8 - CALL ·__native_entry__+4955(SB) // _quote + CALL ·__native_entry__+4498(SB) // _quote MOVQ AX, ret+40(FP) RET @@ -11798,7 +11706,7 @@ _stack_grow: CALL runtime·morestack_noctxt<>(SB) JMP _entry -TEXT ·__skip_array(SB), NOSPLIT | NOFRAME, $0 - 32 +TEXT ·__skip_array(SB), NOSPLIT | NOFRAME, $0 - 40 NO_LOCAL_POINTERS _entry: @@ -11811,8 +11719,9 @@ _skip_array: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·__native_entry__+17819(SB) // _skip_array - MOVQ AX, ret+24(FP) + MOVQ flags+24(FP), CX + CALL ·__native_entry__+19852(SB) // _skip_array + MOVQ AX, ret+32(FP) RET _stack_grow: @@ -11824,14 +11733,14 @@ TEXT ·__skip_number(SB), NOSPLIT | NOFRAME, $0 - 24 _entry: MOVQ (TLS), R14 - LEAQ -96(SP), R12 + LEAQ -80(SP), R12 CMPQ R12, 16(R14) JBE _stack_grow _skip_number: MOVQ s+0(FP), DI MOVQ p+8(FP), SI - CALL ·__native_entry__+20937(SB) // _skip_number + CALL ·__native_entry__+21130(SB) // _skip_number MOVQ AX, ret+16(FP) RET @@ -11839,7 +11748,7 @@ _stack_grow: CALL runtime·morestack_noctxt<>(SB) JMP _entry -TEXT ·__skip_object(SB), NOSPLIT | NOFRAME, $0 - 32 +TEXT ·__skip_object(SB), NOSPLIT | NOFRAME, $0 - 40 NO_LOCAL_POINTERS _entry: @@ -11852,15 +11761,16 @@ _skip_object: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·__native_entry__+17856(SB) // _skip_object - MOVQ AX, ret+24(FP) + MOVQ flags+24(FP), CX + CALL ·__native_entry__+19887(SB) // _skip_object + MOVQ AX, ret+32(FP) RET _stack_grow: CALL runtime·morestack_noctxt<>(SB) JMP _entry -TEXT ·__skip_one(SB), NOSPLIT | NOFRAME, $0 - 32 +TEXT ·__skip_one(SB), NOSPLIT | NOFRAME, $0 - 40 NO_LOCAL_POINTERS _entry: @@ -11873,8 +11783,9 @@ _skip_one: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·__native_entry__+16120(SB) // _skip_one - MOVQ AX, ret+24(FP) + MOVQ flags+24(FP), CX + CALL ·__native_entry__+18078(SB) // _skip_one + MOVQ AX, ret+32(FP) RET _stack_grow: @@ -11893,7 +11804,7 @@ _entry: _u64toa: MOVQ out+0(FP), DI MOVQ val+8(FP), SI - CALL ·__native_entry__+3735(SB) // _u64toa + CALL ·__native_entry__+3300(SB) // _u64toa MOVQ AX, ret+16(FP) RET @@ -11906,7 +11817,7 @@ TEXT ·__unquote(SB), NOSPLIT | NOFRAME, $0 - 48 _entry: MOVQ (TLS), R14 - LEAQ -88(SP), R12 + LEAQ -72(SP), R12 CMPQ R12, 16(R14) JBE _stack_grow @@ -11916,7 +11827,7 @@ _unquote: MOVQ dp+16(FP), DX MOVQ ep+24(FP), CX MOVQ flags+32(FP), R8 - CALL ·__native_entry__+6426(SB) // _unquote + CALL ·__native_entry__+6037(SB) // _unquote MOVQ AX, ret+40(FP) RET @@ -11937,7 +11848,7 @@ _validate_one: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·__native_entry__+21054(SB) // _validate_one + CALL ·__native_entry__+21247(SB) // _validate_one MOVQ AX, ret+24(FP) RET @@ -11959,8 +11870,8 @@ _value: MOVQ n+8(FP), SI MOVQ p+16(FP), DX MOVQ v+24(FP), CX - MOVQ allow_control+32(FP), R8 - CALL ·__native_entry__+11301(SB) // _value + MOVQ flags+32(FP), R8 + CALL ·__native_entry__+11651(SB) // _value MOVQ AX, ret+40(FP) RET @@ -11981,7 +11892,7 @@ _vnumber: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·__native_entry__+14278(SB), AX // _vnumber + LEAQ ·__native_entry__+16191(SB), AX // _vnumber JMP AX _stack_grow: @@ -12001,19 +11912,19 @@ _vsigned: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·__native_entry__+15592(SB), AX // _vsigned + LEAQ ·__native_entry__+17496(SB), AX // _vsigned JMP AX _stack_grow: CALL runtime·morestack_noctxt<>(SB) JMP _entry -TEXT ·__vstring(SB), NOSPLIT | NOFRAME, $0 - 24 +TEXT ·__vstring(SB), NOSPLIT | NOFRAME, $0 - 32 NO_LOCAL_POINTERS _entry: MOVQ (TLS), R14 - LEAQ -128(SP), R12 + LEAQ -136(SP), R12 CMPQ R12, 16(R14) JBE _stack_grow @@ -12021,7 +11932,8 @@ _vstring: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·__native_entry__+13243(SB), AX // _vstring + MOVQ flags+24(FP), CX + LEAQ ·__native_entry__+13546(SB), AX // _vstring JMP AX _stack_grow: @@ -12033,7 +11945,7 @@ TEXT ·__vunsigned(SB), NOSPLIT | NOFRAME, $0 - 24 _entry: MOVQ (TLS), R14 - LEAQ -8(SP), R12 + LEAQ -24(SP), R12 CMPQ R12, 16(R14) JBE _stack_grow @@ -12041,7 +11953,7 @@ _vunsigned: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·__native_entry__+15851(SB), AX // _vunsigned + LEAQ ·__native_entry__+17776(SB), AX // _vunsigned JMP AX _stack_grow: diff --git a/internal/native/avx/native_amd64_test.go b/internal/native/avx/native_amd64_test.go index 211016f..be75e2c 100644 --- a/internal/native/avx/native_amd64_test.go +++ b/internal/native/avx/native_amd64_test.go @@ -237,21 +237,39 @@ func TestNative_Vstring(t *testing.T) { var v types.JsonState i := 0 s := `test"test\n2"` - __vstring(&s, &i, &v) + __vstring(&s, &i, &v, 0) assert.Equal(t, 5, i) assert.Equal(t, -1, v.Ep) assert.Equal(t, int64(0), v.Iv) - __vstring(&s, &i, &v) + __vstring(&s, &i, &v, 0) assert.Equal(t, 13, i) assert.Equal(t, 9, v.Ep) assert.Equal(t, int64(5), v.Iv) } +func TestNative_Vstring_ValidUnescapedChars(t *testing.T) { + var v types.JsonState + valid := uint64(types.F_VALIDATE_STRING) + i := 0 + s := "test\x1f\"" + __vstring(&s, &i, &v, valid) + assert.Equal(t, -int(types.ERR_INVALID_CHAR), int(v.Vt)) +} + +func TestNative_Vstring_ValidUtf8(t *testing.T) { + var v types.JsonState + valid := uint64(types.F_VALIDATE_STRING) + i := 0 + s := "test\xff\"" + __vstring(&s, &i, &v, valid) + assert.Equal(t, -int(types.ERR_INVALID_CHAR), int(v.Vt)) +} + func TestNative_VstringEscapeEOF(t *testing.T) { var v types.JsonState i := 0 s := `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"x` - __vstring(&s, &i, &v) + __vstring(&s, &i, &v, 0) assert.Equal(t, 95, i) assert.Equal(t, 63, v.Ep) assert.Equal(t, int64(0), v.Iv) @@ -312,7 +330,7 @@ func TestNative_VstringHangUpOnRandomData(t *testing.T) { p := 1 s := rt.Mem2Str(v) var js types.JsonState - __vstring(&s, &p, &js) + __vstring(&s, &p, &js, 0) fmt.Printf("js: %s\n", spew.Sdump(js)) } @@ -506,36 +524,36 @@ func TestNative_Vunsigned(t *testing.T) { func TestNative_SkipOne(t *testing.T) { p := 0 s := ` {"asdf": [null, true, false, 1, 2.0, -3]}, 1234.5` - q := __skip_one(&s, &p, &types.StateMachine{}) + q := __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 42, p) assert.Equal(t, 1, q) p = 0 s = `1 2.5 -3 "asdf\nqwer" true false null {} []` - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 1, p) assert.Equal(t, 0, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 5, p) assert.Equal(t, 2, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 8, p) assert.Equal(t, 6, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 21, p) assert.Equal(t, 9, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 26, p) assert.Equal(t, 22, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 32, p) assert.Equal(t, 27, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 37, p) assert.Equal(t, 33, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 40, p) assert.Equal(t, 38, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 43, p) assert.Equal(t, 41, q) } @@ -547,7 +565,7 @@ func TestNative_SkipOne_Error(t *testing.T) { `"asdf`, `"\\\"`, }) { p := 0 - q := __skip_one(&s, &p, &types.StateMachine{}) + q := __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.True(t, q < 0) } } @@ -555,14 +573,14 @@ func TestNative_SkipOne_Error(t *testing.T) { func TestNative_SkipArray(t *testing.T) { p := 0 s := `null, true, false, 1, 2.0, -3, {"asdf": "wqer"}],` - __skip_array(&s, &p, &types.StateMachine{}) + __skip_array(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, p, 48) } func TestNative_SkipObject(t *testing.T) { p := 0 s := `"asdf": "wqer"},` - __skip_object(&s, &p, &types.StateMachine{}) + __skip_object(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, p, 15) } diff --git a/internal/native/avx/native_subr_amd64.go b/internal/native/avx/native_subr_amd64.go index 18f8e87..95ef579 100644 --- a/internal/native/avx/native_subr_amd64.go +++ b/internal/native/avx/native_subr_amd64.go @@ -9,45 +9,45 @@ package avx func __native_entry__() uintptr var ( - _subr__f64toa = __native_entry__() + 630 - _subr__html_escape = __native_entry__() + 8581 - _subr__i64toa = __native_entry__() + 3642 - _subr__lspace = __native_entry__() + 301 + _subr__f64toa = __native_entry__() + 570 + _subr__html_escape = __native_entry__() + 9062 + _subr__i64toa = __native_entry__() + 3205 + _subr__lspace = __native_entry__() + 251 _subr__lzero = __native_entry__() + 13 - _subr__quote = __native_entry__() + 4955 - _subr__skip_array = __native_entry__() + 17819 - _subr__skip_number = __native_entry__() + 20937 - _subr__skip_object = __native_entry__() + 17856 - _subr__skip_one = __native_entry__() + 16120 - _subr__u64toa = __native_entry__() + 3735 - _subr__unquote = __native_entry__() + 6426 - _subr__validate_one = __native_entry__() + 21054 - _subr__value = __native_entry__() + 11301 - _subr__vnumber = __native_entry__() + 14278 - _subr__vsigned = __native_entry__() + 15592 - _subr__vstring = __native_entry__() + 13243 - _subr__vunsigned = __native_entry__() + 15851 + _subr__quote = __native_entry__() + 4498 + _subr__skip_array = __native_entry__() + 19852 + _subr__skip_number = __native_entry__() + 21130 + _subr__skip_object = __native_entry__() + 19887 + _subr__skip_one = __native_entry__() + 18078 + _subr__u64toa = __native_entry__() + 3300 + _subr__unquote = __native_entry__() + 6037 + _subr__validate_one = __native_entry__() + 21247 + _subr__value = __native_entry__() + 11651 + _subr__vnumber = __native_entry__() + 16191 + _subr__vsigned = __native_entry__() + 17496 + _subr__vstring = __native_entry__() + 13546 + _subr__vunsigned = __native_entry__() + 17776 ) const ( - _stack__f64toa = 120 - _stack__html_escape = 72 + _stack__f64toa = 136 + _stack__html_escape = 64 _stack__i64toa = 24 _stack__lspace = 8 _stack__lzero = 8 - _stack__quote = 56 + _stack__quote = 80 _stack__skip_array = 144 - _stack__skip_number = 96 + _stack__skip_number = 80 _stack__skip_object = 144 _stack__skip_one = 144 _stack__u64toa = 8 - _stack__unquote = 88 + _stack__unquote = 72 _stack__validate_one = 144 _stack__value = 416 _stack__vnumber = 312 _stack__vsigned = 16 - _stack__vstring = 128 - _stack__vunsigned = 8 + _stack__vstring = 136 + _stack__vunsigned = 24 ) var ( diff --git a/internal/native/avx2/native_amd64.go b/internal/native/avx2/native_amd64.go index cb3ba1d..d37e89b 100644 --- a/internal/native/avx2/native_amd64.go +++ b/internal/native/avx2/native_amd64.go @@ -67,12 +67,12 @@ func __unquote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __value(s unsafe.Pointer, n int, p int, v *types.JsonState, allow_control int) (ret int) +func __value(s unsafe.Pointer, n int, p int, v *types.JsonState, flags uint64) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __vstring(s *string, p *int, v *types.JsonState) +func __vstring(s *string, p *int, v *types.JsonState, flags uint64) //go:nosplit //go:noescape @@ -92,17 +92,17 @@ func __vunsigned(s *string, p *int, v *types.JsonState) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __skip_one(s *string, p *int, m *types.StateMachine) (ret int) +func __skip_one(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __skip_array(s *string, p *int, m *types.StateMachine) (ret int) +func __skip_array(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __skip_object(s *string, p *int, m *types.StateMachine) (ret int) +func __skip_object(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) //go:nosplit //go:noescape diff --git a/internal/native/avx2/native_amd64.s b/internal/native/avx2/native_amd64.s index 1fd7243..f5a1ab7 100644 --- a/internal/native/avx2/native_amd64.s +++ b/internal/native/avx2/native_amd64.s @@ -15,89 +15,75 @@ _lzero: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp CMPQ SI, $32 - JB LBB0_5 - LEAQ -32(SI), AX - MOVQ AX, CX - ANDQ $-32, CX - LEAQ 32(CX)(DI*1), CX - ANDL $31, AX + JB LBB0_3 -LBB0_2: +LBB0_1: LONG $0x076ffec5 // vmovdqu (%rdi), %ymm0 LONG $0x177de2c4; BYTE $0xc0 // vptest %ymm0, %ymm0 - JNE LBB0_13 + JNE LBB0_9 ADDQ $32, DI ADDQ $-32, SI CMPQ SI, $31 - JA LBB0_2 - MOVQ AX, SI - MOVQ CX, DI + JA LBB0_1 -LBB0_5: +LBB0_3: WORD $0xf8c5; BYTE $0x77 // vzeroupper CMPQ SI, $16 - JB LBB0_10 - LEAQ -16(SI), AX - MOVQ AX, CX - ANDQ $-16, CX - LEAQ 16(CX)(DI*1), CX - ANDL $15, AX + JB LBB0_6 -LBB0_7: +LBB0_4: LONG $0x076ffac5 // vmovdqu (%rdi), %xmm0 LONG $0x1779e2c4; BYTE $0xc0 // vptest %xmm0, %xmm0 - JNE LBB0_14 + JNE LBB0_10 ADDQ $16, DI ADDQ $-16, SI CMPQ SI, $15 - JA LBB0_7 - MOVQ AX, SI - MOVQ CX, DI + JA LBB0_4 -LBB0_10: +LBB0_6: CMPQ SI, $8 - JB LBB0_16 + JB LBB0_12 MOVL $1, AX CMPQ 0(DI), $0 - JNE LBB0_12 + JNE LBB0_8 ADDQ $8, DI ADDQ $-8, SI -LBB0_16: +LBB0_12: CMPQ SI, $4 - JB LBB0_19 + JB LBB0_15 MOVL $1, AX CMPL 0(DI), $0 - JNE LBB0_12 + JNE LBB0_8 ADDQ $4, DI ADDQ $-4, SI -LBB0_19: +LBB0_15: CMPQ SI, $2 - JB LBB0_22 + JB LBB0_18 MOVL $1, AX CMPW 0(DI), $0 - JNE LBB0_12 + JNE LBB0_8 ADDQ $2, DI ADDQ $-2, SI -LBB0_22: +LBB0_18: XORL AX, AX TESTQ SI, SI - JE LBB0_12 + JE LBB0_8 CMPB 0(DI), $0 SETNE AX BYTE $0x5d // popq %rbp RET -LBB0_12: +LBB0_8: BYTE $0x5d // popq %rbp RET -LBB0_13: +LBB0_9: WORD $0xf8c5; BYTE $0x77 // vzeroupper -LBB0_14: +LBB0_10: MOVL $1, AX BYTE $0x5d // popq %rbp RET @@ -133,154 +119,143 @@ LCPI1_7: _lspace: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - LEAQ 0(DI)(DX*1), AX - SUBQ DX, SI + MOVQ DX, AX + LEAQ 0(DI)(DX*1), R10 + MOVQ SI, DX + SUBQ AX, DX JE LBB1_7 - MOVL AX, CX + MOVL R10, CX ANDL $31, CX TESTQ CX, CX JE LBB1_7 - LEAQ -1(SI), R9 - XORL DX, DX + LEAQ 1(DI), R9 + LEAQ -1(SI), CX MOVQ $4294977024, R8 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 + MOVBLSX 0(DI)(AX*1), DX + CMPL DX, $32 + JA LBB1_27 + BTQ DX, R8 + JAE LBB1_27 + LEAQ 1(AX), DX + CMPQ CX, AX JE LBB1_6 - LEAQ 1(AX)(DX*1), CX - ANDL $31, CX - MOVQ R10, DX - TESTQ CX, CX + ADDL R9, AX + ANDL $31, AX + TESTQ AX, AX + MOVQ DX, AX JNE LBB1_3 LBB1_6: - ADDQ R10, AX - SUBQ R10, SI + LEAQ 0(DI)(DX*1), R10 + SUBQ DX, SI + MOVQ SI, DX LBB1_7: - CMPQ SI, $32 - JB LBB1_15 - LEAQ -32(SI), CX - MOVQ CX, DX - ANDQ $-32, DX - LEAQ 32(DX)(AX*1), R8 - ANDL $31, CX - QUAD $0xfffffec2056ffec5 // vmovdqu $-318(%rip), %ymm0 /* LCPI1_0(%rip) */ - QUAD $0xfffffeda0d6ffec5 // vmovdqu $-294(%rip), %ymm1 /* LCPI1_1(%rip) */ - QUAD $0xfffffef2156ffec5 // vmovdqu $-270(%rip), %ymm2 /* LCPI1_2(%rip) */ - QUAD $0xffffff0a1d6ffec5 // vmovdqu $-246(%rip), %ymm3 /* LCPI1_3(%rip) */ + CMPQ DX, $32 + JB LBB1_13 + MOVQ DI, SI + SUBQ R10, SI + QUAD $0xfffffec4056ffec5 // vmovdqu $-316(%rip), %ymm0 /* LCPI1_0(%rip) */ + QUAD $0xfffffedc0d6ffec5 // vmovdqu $-292(%rip), %ymm1 /* LCPI1_1(%rip) */ + QUAD $0xfffffef4156ffec5 // vmovdqu $-268(%rip), %ymm2 /* LCPI1_2(%rip) */ + QUAD $0xffffff0c1d6ffec5 // vmovdqu $-244(%rip), %ymm3 /* LCPI1_3(%rip) */ 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 $0xd4d7fdc5 // vpmovmskb %ymm4, %edx - CMPL DX, $-1 + LONG $0x6f7dc1c4; BYTE $0x22 // vmovdqa (%r10), %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 LBB1_10 - ADDQ $32, AX + ADDQ $32, R10 + ADDQ $-32, DX ADDQ $-32, SI - CMPQ SI, $31 + CMPQ DX, $31 JA LBB1_9 - MOVQ CX, SI - MOVQ R8, AX + +LBB1_13: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + CMPQ DX, $16 + JB LBB1_18 + MOVQ DI, SI + SUBQ R10, SI + QUAD $0xfffffed5056ffac5 // vmovdqu $-299(%rip), %xmm0 /* LCPI1_4(%rip) */ + QUAD $0xfffffedd0d6ffac5 // vmovdqu $-291(%rip), %xmm1 /* LCPI1_5(%rip) */ + QUAD $0xfffffee5156ffac5 // vmovdqu $-283(%rip), %xmm2 /* LCPI1_6(%rip) */ + QUAD $0xfffffeed1d6ffac5 // vmovdqu $-275(%rip), %xmm3 /* LCPI1_7(%rip) */ LBB1_15: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - CMPQ SI, $16 - JB LBB1_19 - LEAQ -16(SI), CX - MOVQ CX, DX - ANDQ $-16, DX - LEAQ 16(DX)(AX*1), R8 - ANDL $15, CX - QUAD $0xfffffec5056ffac5 // vmovdqu $-315(%rip), %xmm0 /* LCPI1_4(%rip) */ - QUAD $0xfffffecd0d6ffac5 // vmovdqu $-307(%rip), %xmm1 /* LCPI1_5(%rip) */ - QUAD $0xfffffed5156ffac5 // vmovdqu $-299(%rip), %xmm2 /* LCPI1_6(%rip) */ - QUAD $0xfffffedd1d6ffac5 // vmovdqu $-291(%rip), %xmm3 /* LCPI1_7(%rip) */ - -LBB1_17: - 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 $0xd4d7f9c5 // vpmovmskb %xmm4, %edx - CMPW DX, $-1 - JNE LBB1_18 - ADDQ $16, AX + LONG $0x6f79c1c4; BYTE $0x22 // vmovdqa (%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 $0xc4d7f9c5 // vpmovmskb %xmm4, %eax + CMPW AX, $-1 + JNE LBB1_16 + ADDQ $16, R10 + ADDQ $-16, DX ADDQ $-16, SI - CMPQ SI, $15 - JA LBB1_17 - MOVQ CX, SI - MOVQ R8, AX - -LBB1_19: - TESTQ SI, SI - JE LBB1_28 - 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_28 - -LBB1_10: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - SUBQ DI, AX - NOTL DX - MOVLQSX DX, CX - BSFQ CX, CX - ADDQ CX, AX - BYTE $0x5d // popq %rbp - RET - -LBB1_5: - ADDQ DX, AX - -LBB1_28: - SUBQ DI, AX - BYTE $0x5d // popq %rbp - RET + CMPQ DX, $15 + JA LBB1_15 LBB1_18: - MOVWLZX DX, CX - SUBQ DI, AX - NOTL CX - BSFL CX, CX - ADDQ CX, AX - BYTE $0x5d // popq %rbp + TESTQ DX, DX + JE LBB1_25 + LEAQ 0(R10)(DX*1), R8 + XORL AX, AX + MOVQ $4294977024, R9 + +LBB1_20: + MOVBLSX 0(R10)(AX*1), SI + CMPL SI, $32 + JA LBB1_22 + BTQ SI, R9 + JAE LBB1_22 + ADDQ $1, AX + CMPQ DX, AX + JNE LBB1_20 + MOVQ R8, R10 + +LBB1_25: + SUBQ DI, R10 + +LBB1_26: + MOVQ R10, AX + +LBB1_27: + BYTE $0x5d // popq %rbp RET -LBB1_23: - NOTQ DI - ADDQ DI, AX +LBB1_10: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + +LBB1_11: + NOTL AX + BSFL AX, AX + SUBQ SI, AX BYTE $0x5d // popq %rbp RET +LBB1_16: + MOVWLZX AX, AX + JMP LBB1_11 + +LBB1_22: + SUBQ DI, R10 + ADDQ AX, R10 + JMP LBB1_26 + LCPI2_0: QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' QUAD $0x3030303030303030; QUAD $0x3030303030303030 // .space 16, '0000000000000000' @@ -293,585 +268,570 @@ _f64toa: WORD $0x5541 // pushq %r13 WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx - SUBQ $40, SP - MOVQ DI, R13 + SUBQ $56, SP + MOVQ DI, R12 LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax XORL R9, R9 TESTQ AX, AX - JS LBB2_108 + JS LBB2_1 TESTQ AX, AX - JE LBB2_109 + JE LBB2_3 -LBB2_2: +LBB2_4: MOVQ AX, DX SHRQ $52, DX XORL BX, BX CMPL DX, $2047 - JE LBB2_107 + JE LBB2_105 MOVQ $4503599627370495, DI ANDQ DI, AX - INCQ DI + ADDQ $1, DI ORQ AX, DI LEAL -1023(DX), CX CMPL CX, $52 MOVL R9, -44(BP) - MOVQ R13, -64(BP) - JA LBB2_5 + MOVQ R12, -56(BP) + JA LBB2_8 MOVL $1075, CX SUBQ DX, CX MOVQ $-1, SI SHLQ CX, SI NOTQ SI TESTQ SI, DI - JE LBB2_14 + JE LBB2_7 -LBB2_5: +LBB2_8: TESTL DX, DX LONG $0xf8440f48 // cmoveq %rax, %rdi LEAL -1077(DX), CX - MOVL $-1076, R11 - LONG $0xd9450f44 // cmovnel %ecx, %r11d - MOVQ DI, -72(BP) - LEAQ 0(DI*4), R8 + MOVL $-1076, BX + WORD $0x450f; BYTE $0xd9 // cmovnel %ecx, %ebx + MOVQ DI, -64(BP) + LEAQ 0(DI*4), R10 TESTQ AX, AX SETNE AX CMPL DX, $2 SETCS R13 ORB AX, R13 - MOVBLZX R13, R9 - TESTL R11, R11 - JS LBB2_12 - LONG $0x41e36945; WORD $0x0134; BYTE $0x00 // imull $78913, %r11d, %r12d - SHRL $18, R12 + MOVBLZX R13, R15 + TESTL BX, BX + JS LBB2_22 + LONG $0x41eb6944; WORD $0x0134; BYTE $0x00 // imull $78913, %ebx, %r13d + SHRL $18, R13 XORL AX, AX - CMPL R11, $3 - SETGT AX - SUBL AX, R12 - LONG $0x4fdc6941; WORD $0x1293; BYTE $0x00 // imull $1217359, %r12d, %ebx - MOVQ R12, AX + CMPL BX, $4 + SETGE AX + SUBL AX, R13 + LONG $0x4ff56941; WORD $0x1293; BYTE $0x00 // imull $1217359, %r13d, %esi + MOVQ R13, AX SHLQ $4, AX - LONG $0x580d8d48; WORD $0x0090; BYTE $0x00 // leaq $36952(%rip), %rcx /* _DOUBLE_POW5_INV_SPLIT(%rip) */ - MOVQ R8, DI - ORQ $2, DI - MOVQ 0(AX)(CX*1), R10 + LONG $0x0c0d8d48; WORD $0x008d; BYTE $0x00 // leaq $36108(%rip), %rcx /* _DOUBLE_POW5_INV_SPLIT(%rip) */ + MOVQ R10, R12 + ORQ $2, R12 + MOVQ 0(AX)(CX*1), R11 MOVQ 8(AX)(CX*1), R14 - MOVQ R10, AX - MULQ DI + MOVQ R11, AX + MULQ R12 MOVQ DX, CX MOVQ R14, AX - MOVQ R14, -56(BP) - MULQ DI - MOVQ AX, R13 - MOVQ DX, SI - SHRL $19, BX - ADDQ CX, R13 - ADCQ $0, SI - MOVL R12, CX - SUBL R11, CX - ADDL BX, CX + MULQ R12 + MOVQ AX, R8 + MOVQ DX, DI + SHRL $19, SI + ADDQ CX, R8 + ADCQ $0, DI + MOVL R13, CX + SUBL BX, CX + ADDL SI, CX ADDB $61, CX - LONG $0xf5ad0f49 // shrdq %cl, %rsi, %r13 - SHRQ CX, SI - NOTQ R9 - ADDQ R8, R9 - MOVQ R10, AX - MULQ R9 - MOVQ DX, R15 + LONG $0xf8ad0f49 // shrdq %cl, %rdi, %r8 + SHRQ CX, DI + NOTQ R15 + ADDQ R10, R15 + MOVQ R11, AX + MULQ R15 + MOVQ DX, BX MOVQ R14, AX - MULQ R9 - MOVQ DX, R14 - MOVQ AX, BX - ADDQ R15, BX - ADCQ $0, R14 - LONG $0xf3ad0f4c // shrdq %cl, %r14, %rbx - SHRQ CX, R14 - MOVQ R10, AX - MULQ R8 + MULQ R15 + MOVQ DX, R9 + MOVQ AX, SI + ADDQ BX, SI + ADCQ $0, R9 + LONG $0xcead0f4c // shrdq %cl, %r9, %rsi + SHRQ CX, R9 + MOVQ R11, AX + MULQ R10 MOVQ DX, R11 - MOVQ -56(BP), AX - MULQ R8 - MOVQ DX, R10 + MOVQ R14, AX + MULQ R10 + MOVQ DX, R14 ADDQ R11, AX - ADCQ $0, R10 - LONG $0xd0ad0f4c // shrdq %cl, %r10, %rax - SHRQ CX, R10 + ADCQ $0, R14 + LONG $0xf0ad0f4c // shrdq %cl, %r14, %rax + SHRQ CX, R14 TESTB $64, CX - LONG $0xf5440f49 // cmoveq %r13, %rsi - LONG $0xf3440f4c // cmoveq %rbx, %r14 - LONG $0xd0440f4c // cmoveq %rax, %r10 - CMPL R12, $21 - JA LBB2_23 + LONG $0xf8440f49 // cmoveq %r8, %rdi + LONG $0xce440f4c // cmoveq %rsi, %r9 + LONG $0xf0440f4c // cmoveq %rax, %r14 + CMPL R13, $21 + JA LBB2_10 MOVQ $-3689348814741910323, AX MOVQ $3689348814741910323, CX - MOVQ R8, DX + MOVQ R10, DX IMULQ AX, DX CMPQ DX, CX - JBE LBB2_17 - TESTB $1, -72(BP) - JNE LBB2_20 + JBE LBB2_12 + TESTB $1, -64(BP) + JNE LBB2_16 MOVL $-1, DX -LBB2_10: - IMULQ AX, R9 - INCL DX - CMPQ R9, CX - JBE LBB2_10 - CMPL DX, R12 - SETCC R13 +LBB2_20: + IMULQ AX, R15 + ADDL $1, DX + CMPQ R15, CX + JBE LBB2_20 + CMPL DX, R13 + SETCC R11 XORL R15, R15 - TESTB R15, R15 - JE LBB2_26 - JMP LBB2_29 + TESTB R11, R11 + JE LBB2_29 + JMP LBB2_30 -LBB2_12: - LONG $0x05e36945; WORD $0xf4d1; BYTE $0xff // imull $-732923, %r11d, %r12d - SHRL $20, R12 +LBB2_22: + LONG $0x05c36944; WORD $0xf4d1; BYTE $0xff // imull $-732923, %ebx, %r8d + SHRL $20, R8 XORL AX, AX - CMPL R11, $-1 + CMPL BX, $-1 SETNE AX - SUBL AX, R12 - ADDL R12, R11 - MOVL R11, AX + SUBL AX, R8 + ADDL R8, BX + MOVL BX, AX NEGL AX - LONG $0xb1db6941; WORD $0xed6c; BYTE $0xff // imull $-1217359, %r11d, %ebx - SHRL $19, BX - MOVLQSX AX, SI - SHLQ $4, SI - LONG $0x83158d4c; WORD $0x00a4; BYTE $0x00 // leaq $42115(%rip), %r10 /* _DOUBLE_POW5_SPLIT(%rip) */ - MOVQ R8, DI - ORQ $2, DI - MOVQ 0(SI)(R10*1), R14 - MOVQ R14, AX - MOVQ R14, -56(BP) - MULQ DI - MOVQ DX, CX - MOVQ 8(SI)(R10*1), R10 - MOVQ R10, AX - MULQ DI - MOVQ DX, DI - MOVQ AX, SI - ADDQ CX, SI - ADCQ $0, DI - MOVL R12, CX - SUBL BX, CX - ADDB $60, CX - LONG $0xfead0f48 // shrdq %cl, %rdi, %rsi - SHRQ CX, DI - NOTQ R9 - ADDQ R8, R9 - MOVQ R14, AX - MULQ R9 - MOVQ DX, R15 - MOVQ R10, AX - MULQ R9 + LONG $0x6cb1f369; WORD $0xffed // imull $-1217359, %ebx, %esi + SHRL $19, SI + MOVLQSX AX, DI + SHLQ $4, DI + LONG $0x3f1d8d4c; WORD $0x00a1; BYTE $0x00 // leaq $41279(%rip), %r11 /* _DOUBLE_POW5_SPLIT(%rip) */ + MOVQ R10, CX + ORQ $2, CX + MOVQ 0(DI)(R11*1), R9 + MOVQ R9, AX + MOVQ R9, -80(BP) + MULQ CX MOVQ DX, R14 - MOVQ AX, BX - ADDQ R15, BX - ADCQ $0, R14 - LONG $0xf3ad0f4c // shrdq %cl, %r14, %rbx - SHRQ CX, R14 - MOVQ -56(BP), AX - MULQ R8 + MOVQ 8(DI)(R11*1), AX + MOVQ AX, -88(BP) + MULQ CX + MOVQ DX, DI + MOVQ AX, R11 + ADDQ R14, R11 + ADCQ $0, DI + MOVL R8, CX + SUBL SI, CX + ADDB $60, CX + LONG $0xfbad0f49 // shrdq %cl, %rdi, %r11 + SHRQ CX, DI + NOTQ R15 + ADDQ R10, R15 + MOVQ R9, AX + MULQ R15 + MOVQ DX, -72(BP) + MOVQ -88(BP), R14 + MOVQ R14, AX + MULQ R15 + MOVQ DX, R9 + MOVQ AX, SI + ADDQ -72(BP), SI + ADCQ $0, R9 + LONG $0xcead0f4c // shrdq %cl, %r9, %rsi + SHRQ CX, R9 + MOVQ -80(BP), AX + MULQ R10 MOVQ DX, R15 - MOVQ R10, AX - MULQ R8 - MOVQ DX, R10 + MOVQ R14, AX + MULQ R10 + MOVQ DX, R14 ADDQ R15, AX - ADCQ $0, R10 - LONG $0xd0ad0f4c // shrdq %cl, %r10, %rax - SHRQ CX, R10 + ADCQ $0, R14 + LONG $0xf0ad0f4c // shrdq %cl, %r14, %rax + SHRQ CX, R14 TESTB $64, CX - LONG $0xfe440f48 // cmoveq %rsi, %rdi - MOVQ DI, SI - LONG $0xf3440f4c // cmoveq %rbx, %r14 - LONG $0xd0440f4c // cmoveq %rax, %r10 - CMPL R12, $1 - JA LBB2_15 - MOVQ -72(BP), AX + LONG $0xfb440f49 // cmoveq %r11, %rdi + LONG $0xce440f4c // cmoveq %rsi, %r9 + LONG $0xf0440f4c // cmoveq %rax, %r14 + CMPL R8, $1 + JA LBB2_24 + MOVQ -64(BP), AX ANDL $1, AX TESTQ AX, AX - SETEQ CX - ANDB CX, R13 - SUBQ AX, SI + SETEQ R11 + ANDB R13, R11 + SUBQ AX, DI MOVB $1, R15 - MOVL R11, AX - MOVQ AX, -56(BP) + MOVL BX, R13 JMP LBB2_30 -LBB2_14: +LBB2_7: MOVL CX, CX SHRQ CX, DI - XORL R12, R12 + XORL R13, R13 MOVL $1, R15 CMPQ DI, $10 - JAE LBB2_46 - JMP LBB2_61 - -LBB2_15: - CMPL R12, $62 - JA LBB2_24 - MOVQ $-1, AX - MOVL R12, CX - SHLQ CX, AX - NOTQ AX - TESTQ AX, R8 - SETEQ R15 - JMP LBB2_25 - -LBB2_17: - MOVL $-1, DX - -LBB2_18: - IMULQ AX, R8 - INCL DX - CMPQ R8, CX - JBE LBB2_18 - CMPL DX, R12 - SETCC R15 - XORL R13, R13 - TESTB R15, R15 - JE LBB2_26 - JMP LBB2_29 - -LBB2_20: - MOVL $-1, DX - -LBB2_21: - IMULQ AX, DI - INCL DX - CMPQ DI, CX - JBE LBB2_21 - XORL AX, AX - CMPL DX, R12 - SETCC AX - SUBQ AX, SI - -LBB2_23: - XORL R15, R15 - XORL R13, R13 - TESTB R15, R15 - JE LBB2_26 - JMP LBB2_29 + JAE LBB2_52 + JMP LBB2_67 LBB2_24: - XORL R15, R15 + CMPL R8, $62 + JA LBB2_25 + MOVQ $-1, AX + MOVL R8, CX + SHLQ CX, AX + NOTQ AX + TESTQ AX, R10 + SETEQ R15 + JMP LBB2_27 + +LBB2_12: + MOVL $-1, DX + +LBB2_13: + IMULQ AX, R10 + ADDL $1, DX + CMPQ R10, CX + JBE LBB2_13 + CMPL DX, R13 + SETCC R15 + XORL R11, R11 + TESTB R11, R11 + JE LBB2_29 + JMP LBB2_30 + +LBB2_16: + MOVL $-1, DX + +LBB2_17: + IMULQ AX, R12 + ADDL $1, DX + CMPQ R12, CX + JBE LBB2_17 + CMPL DX, R13 + ADCQ $-1, DI + +LBB2_10: + XORL R15, R15 + XORL R11, R11 + TESTB R11, R11 + JE LBB2_29 + JMP LBB2_30 LBB2_25: - XORL R13, R13 - MOVL R11, R12 - TESTB R15, R15 - JNE LBB2_29 + XORL R15, R15 -LBB2_26: - TESTB R13, R13 - JNE LBB2_29 - MOVQ SI, BX - SHRQ $2, SI - MOVQ $2951479051793528259, DI - MOVQ SI, AX - MULQ DI - MOVQ DX, CX - SHRQ $2, CX - MOVQ R14, AX +LBB2_27: + XORL R11, R11 + MOVL BX, R13 + TESTB R11, R11 + JNE LBB2_30 + +LBB2_29: + TESTB R15, R15 + JNE LBB2_30 + MOVQ DI, AX SHRQ $2, AX + MOVQ DI, BX + MOVQ $2951479051793528259, DI MULQ DI MOVQ DX, SI + MOVQ R9, AX + SHRQ $2, AX + MULQ DI + MOVQ DX, CX SHRQ $2, SI - CMPQ CX, SI - JBE LBB2_39 - MOVQ R10, AX + SHRQ $2, CX + XORL R8, R8 + CMPQ SI, CX + JBE LBB2_44 + MOVQ R14, AX SHRQ $2, AX MULQ DI SHRQ $2, DX WORD $0xc26b; BYTE $0x9c // imull $-100, %edx, %eax - ADDL R10, AX - XORL DI, DI - CMPL AX, $49 - SETHI DI - MOVL $2, R11 - MOVQ SI, R14 - MOVQ CX, AX - MOVQ DX, R10 - MOVQ -64(BP), R13 - JMP LBB2_40 - -LBB2_29: - MOVQ R12, -56(BP) + ADDL R14, AX + CMPL AX, $50 + SETCC DI + MOVL $2, R8 + MOVQ DX, R14 + JMP LBB2_46 LBB2_30: - MOVQ $-3689348814741910323, BX - MOVQ SI, AX - MULQ BX - MOVQ DX, R12 - MOVQ R14, AX - MULQ BX - SHRQ $3, R12 + MOVQ $-3689348814741910323, R12 + MOVQ DI, AX + MULQ R12 + MOVQ DX, DI + MOVQ R9, AX + MULQ R12 + SHRQ $3, DI SHRQ $3, DX - XORL SI, SI - XORL R11, R11 - CMPQ R12, DX - JBE LBB2_37 XORL CX, CX + XORL R8, R8 + CMPQ DI, DX + JBE LBB2_31 + XORL BX, BX -LBB2_32: - MOVQ DX, R8 - LEAL 0(DX)(DX*1), DI - MOVQ R10, AX - MULQ BX - MOVQ DX, R9 - LEAL 0(DI)(DI*4), AX - SHRQ $3, R9 - LEAL 0(R9)(R9*1), DX - LEAL 0(DX)(DX*4), SI - NEGL SI - ADDB R10, SI - CMPL R14, AX +LBB2_33: + MOVQ DX, R10 + LEAL 0(DX)(DX*1), CX + MOVQ R14, AX + MULQ R12 + MOVQ DX, SI + LEAL 0(CX)(CX*4), AX + SHRQ $3, SI + LEAL 0(SI)(SI*1), CX + LEAL 0(CX)(CX*4), CX + NEGL CX + ADDB R14, CX + CMPL AX, R9 SETEQ AX - ANDB AX, R13 + ANDB AX, R11 + TESTB BX, BX + SETEQ AX + ANDB AX, R15 + ADDL $1, R8 + MOVQ DI, AX + MULQ R12 + MOVQ DX, DI + SHRQ $3, DI + MOVQ R10, AX + MULQ R12 + SHRQ $3, DX + MOVQ SI, R14 + MOVQ R10, R9 + MOVL CX, BX + CMPQ DI, DX + JA LBB2_33 + TESTB R11, R11 + JNE LBB2_36 + JMP LBB2_35 + +LBB2_31: + MOVQ R9, R10 + MOVQ R14, SI + TESTB R11, R11 + JE LBB2_35 + +LBB2_36: + MOVQ R10, AX + MULQ R12 + MOVQ DX, DI + SHRQ $3, DI + LEAL 0(DI)(DI*1), AX + LEAL 0(AX)(AX*4), AX + CMPL AX, R10 + JNE LBB2_35 + +LBB2_37: + MOVQ SI, AX + MULQ R12 + MOVQ DX, R9 + MOVQ DI, R10 + SHRQ $3, R9 + LEAL 0(R9)(R9*1), AX + LEAL 0(AX)(AX*4), BX + NEGL BX + ADDB SI, BX TESTB CX, CX SETEQ AX ANDB AX, R15 - INCL R11 - MOVQ R12, AX - MULQ BX - MOVQ DX, R12 - SHRQ $3, R12 - MOVQ R8, AX - MULQ BX - SHRQ $3, DX - MOVQ R9, R10 - MOVQ R8, R14 - MOVL SI, CX - CMPQ R12, DX - JA LBB2_32 - TESTB R13, R13 - JE LBB2_38 - -LBB2_34: - MOVQ R8, AX - MULQ BX - MOVQ DX, CX - SHRQ $3, CX - LEAL 0(CX)(CX*1), AX - LEAL 0(AX)(AX*4), AX - CMPL R8, AX - MOVQ -72(BP), DI - MOVQ -56(BP), R12 - JNE LBB2_44 - MOVQ BX, R14 - -LBB2_36: - MOVQ R9, AX - MULQ R14 - MOVQ DX, R10 - MOVQ CX, R8 - SHRQ $3, R10 - LEAL 0(R10)(R10*1), AX - LEAL 0(AX)(AX*4), BX - NEGL BX - ADDB R9, BX - TESTB SI, SI - SETEQ AX - ANDB AX, R15 - INCL R11 - MOVQ CX, AX - MULQ R14 - MOVQ DX, CX - SHRQ $3, CX - LEAL 0(CX)(CX*1), AX + ADDL $1, R8 + MOVQ DI, AX + MULQ R12 + MOVQ DX, DI + SHRQ $3, DI + LEAL 0(DI)(DI*1), AX LEAL 0(AX)(AX*4), AX - MOVQ R10, R9 - MOVL BX, SI - CMPL R8, AX - JE LBB2_36 - JMP LBB2_45 + MOVQ R9, SI + MOVL BX, CX + CMPL AX, R10 + JE LBB2_37 + JMP LBB2_38 -LBB2_37: - MOVQ R14, R8 - MOVQ R10, R9 - TESTB R13, R13 - JNE LBB2_34 +LBB2_35: + MOVL CX, BX + MOVQ SI, R9 LBB2_38: - MOVL SI, BX - MOVQ R9, R10 - MOVQ -72(BP), DI - MOVQ -56(BP), R12 - JMP LBB2_45 - -LBB2_39: - XORL R11, R11 - XORL DI, DI - MOVQ -64(BP), R13 - MOVQ BX, AX - -LBB2_40: - MOVQ $-3689348814741910323, BX - MULQ BX - MOVQ DX, CX - SHRQ $3, CX - MOVQ R14, AX - MULQ BX - SHRQ $3, DX - CMPQ CX, DX - JBE LBB2_43 + TESTB R15, R15 + SETEQ CX + CMPB BX, $5 + SETNE AX + CMPQ R9, R10 + MOVQ -56(BP), R12 + JNE LBB2_41 + MOVL $1, DI + TESTB $1, -64(BP) + JNE LBB2_42 + TESTB R11, R11 + JE LBB2_42 LBB2_41: - MOVQ R10, SI - MOVQ DX, R14 - MOVQ R10, AX - MULQ BX - MOVQ DX, R10 - SHRQ $3, R10 - INCL R11 - MOVQ CX, AX - MULQ BX - MOVQ DX, CX - SHRQ $3, CX - MOVQ R14, AX - MULQ BX - SHRQ $3, DX - CMPQ CX, DX - JA LBB2_41 - LEAL 0(R10)(R10*1), AX - LEAL 0(AX)(AX*4), AX - SUBL AX, SI - XORL DI, DI - CMPL SI, $4 - SETHI DI + MOVL R9, DX + ANDB $1, DX + ORB DX, CX + ORB CX, AX + CMPB BX, $5 + SETCC CX + ANDB AX, CX + MOVBLZX CX, DI -LBB2_43: - XORL AX, AX - CMPQ R10, R14 - SETEQ AX - ORQ DI, AX - ADDQ R10, AX - MOVQ AX, DI - ADDL R11, R12 - MOVL $1, R15 - CMPQ DI, $10 - JAE LBB2_46 - JMP LBB2_61 +LBB2_42: + ADDQ R9, DI + JMP LBB2_50 LBB2_44: - MOVL SI, BX - MOVQ R9, R10 - -LBB2_45: - TESTB R13, R13 - SETEQ SI - TESTB R15, R15 - SETNE AX - CMPB BX, $5 - SETEQ DX - TESTB $1, R10 - SETEQ CX - ANDB AX, CX - ANDB DX, CX - CMPQ R10, R8 - SETEQ DX - ORB SI, DI - CMPB BX, $4 - SETHI AX - XORB CX, AX - ANDB DX, DI - ORB AX, DI - MOVBLZX DI, DI - ADDQ R10, DI - MOVQ -64(BP), R13 - ADDL R11, R12 - MOVL $1, R15 - CMPQ DI, $10 - JB LBB2_61 + XORL DI, DI + MOVQ R9, CX + MOVQ BX, SI LBB2_46: + MOVQ -56(BP), R12 + MOVQ $-3689348814741910323, R9 + MOVQ SI, AX + MULQ R9 + MOVQ DX, SI + SHRQ $3, SI + MOVQ CX, AX + MULQ R9 + SHRQ $3, DX + CMPQ SI, DX + JBE LBB2_49 + +LBB2_47: + MOVQ R14, DI + MOVQ DX, CX + MOVQ R14, AX + MULQ R9 + MOVQ DX, R14 + SHRQ $3, R14 + ADDL $1, R8 + MOVQ SI, AX + MULQ R9 + MOVQ DX, SI + SHRQ $3, SI + MOVQ CX, AX + MULQ R9 + SHRQ $3, DX + CMPQ SI, DX + JA LBB2_47 + LEAL 0(R14)(R14*1), AX + LEAL 0(AX)(AX*4), AX + SUBL AX, DI + CMPL DI, $5 + SETCC DI + +LBB2_49: + CMPQ R14, CX + SETEQ AX + TESTB DI, DI + SETNE CX + ORB AX, CX + MOVBLZX CX, DI + ADDQ R14, DI + +LBB2_50: + ADDL R8, R13 + MOVL $1, R15 + CMPQ DI, $10 + JB LBB2_67 + +LBB2_52: MOVL $2, R15 CMPQ DI, $100 - JB LBB2_61 + JB LBB2_67 MOVL $3, R15 CMPQ DI, $1000 - JB LBB2_61 + JB LBB2_67 MOVL $4, R15 CMPQ DI, $10000 - JB LBB2_61 + JB LBB2_67 MOVL $5, R15 CMPQ DI, $100000 - JB LBB2_61 + JB LBB2_67 MOVL $6, R15 CMPQ DI, $1000000 - JB LBB2_61 + JB LBB2_67 MOVL $7, R15 CMPQ DI, $10000000 - JB LBB2_61 + JB LBB2_67 MOVL $8, R15 CMPQ DI, $100000000 - JB LBB2_61 + JB LBB2_67 MOVL $9, R15 CMPQ DI, $1000000000 - JB LBB2_61 + JB LBB2_67 MOVQ $8589934464, AX ADDQ $1410065536, AX MOVL $10, R15 CMPQ DI, AX - JB LBB2_61 + JB LBB2_67 MOVQ DI, AX SHRQ $11, AX MOVL $11, R15 CMPQ AX, $48828125 - JB LBB2_61 + JB LBB2_67 MOVQ DI, AX SHRQ $12, AX MOVL $12, R15 CMPQ AX, $244140625 - JB LBB2_61 + JB LBB2_67 MOVQ DI, AX SHRQ $13, AX MOVL $13, R15 CMPQ AX, $1220703125 - JB LBB2_61 + JB LBB2_67 MOVL $14, R15 MOVQ $100000000000000, AX CMPQ DI, AX - JB LBB2_61 + JB LBB2_67 MOVL $15, R15 MOVQ $1000000000000000, AX CMPQ DI, AX - JB LBB2_61 + JB LBB2_67 MOVQ $10000000000000000, AX CMPQ DI, AX MOVL $17, R15 SBBL $0, R15 -LBB2_61: - LEAL 0(R15)(R12*1), R14 - LEAL 5(R15)(R12*1), AX +LBB2_67: + LEAL 0(R15)(R13*1), R14 + LEAL 0(R15)(R13*1), AX + ADDL $5, AX CMPL AX, $27 - JB LBB2_67 - LEAQ 1(R13), BX + JB LBB2_78 + LEAQ 1(R12), BX MOVQ BX, SI MOVL R15, DX - LONG $0x0059eae8; BYTE $0x00 // callq _print_mantissa - MOVB 1(R13), AX - MOVB AX, 0(R13) + LONG $0x00569ae8; BYTE $0x00 // callq _print_mantissa + MOVB 1(R12), AX + MOVB AX, 0(R12) MOVL $1, AX CMPL R15, $2 - JB LBB2_64 + JB LBB2_70 MOVB $46, 0(BX) - INCL R15 + ADDL $1, R15 MOVL R15, AX -LBB2_64: +LBB2_70: MOVL AX, BX - MOVB $101, 0(R13)(BX*1) - INCQ BX + MOVB $101, 0(R12)(BX*1) + ADDQ $1, BX TESTL R14, R14 - JLE LBB2_69 - DECL R14 + JLE LBB2_72 + ADDL $-1, R14 MOVL -44(BP), R9 CMPL R14, $100 - JL LBB2_70 + JL LBB2_75 -LBB2_66: +LBB2_74: MOVL R14, AX MOVL $3435973837, CX IMULQ AX, CX @@ -879,293 +839,230 @@ LBB2_66: LEAL 0(CX)(CX*1), AX LEAL 0(AX)(AX*4), AX SUBL AX, R14 - LONG $0x55058d48; WORD $0x00b3; BYTE $0x00 // leaq $45909(%rip), %rax /* _Digits(%rip) */ + LONG $0x4f058d48; WORD $0x00b0; BYTE $0x00 // leaq $45135(%rip), %rax /* _Digits(%rip) */ MOVWLZX 0(AX)(CX*2), AX MOVL BX, CX - MOVW AX, 0(R13)(CX*1) + MOVW AX, 0(R12)(CX*1) ORB $48, R14 - MOVLQSX BX, AX - MOVB R14, 2(AX)(R13*1) + MOVB R14, 2(R12)(CX*1) ADDL $3, BX - JMP LBB2_107 + JMP LBB2_105 -LBB2_67: +LBB2_78: TESTL R14, R14 - JLE LBB2_72 - MOVL R12, R13 - SARL $31, R13 - ANDL R14, R13 + JLE LBB2_82 + MOVL R13, R12 + SARL $31, R12 + ANDL R14, R12 XORL BX, BX - TESTL R12, R12 - LONG $0xe3480f44 // cmovsl %ebx, %r12d - JMP LBB2_74 + TESTL R13, R13 + LONG $0xeb480f44 // cmovsl %ebx, %r13d + JMP LBB2_80 -LBB2_69: +LBB2_72: ADDL $2, AX - MOVB $45, 0(R13)(BX*1) + MOVB $45, 0(R12)(BX*1) MOVL $1, CX SUBL R14, CX MOVL CX, R14 MOVL AX, BX MOVL -44(BP), R9 CMPL R14, $100 - JGE LBB2_66 + JGE LBB2_74 -LBB2_70: +LBB2_75: CMPL R14, $10 - JL LBB2_85 + JL LBB2_77 MOVLQSX R14, AX - LONG $0xe70d8d48; WORD $0x00b2; BYTE $0x00 // leaq $45799(%rip), %rcx /* _Digits(%rip) */ + LONG $0xe60d8d48; WORD $0x00af; BYTE $0x00 // leaq $45030(%rip), %rcx /* _Digits(%rip) */ MOVWLZX 0(CX)(AX*2), AX MOVL BX, CX - MOVW AX, 0(R13)(CX*1) + MOVW AX, 0(R12)(CX*1) ADDL $2, BX - JMP LBB2_107 + JMP LBB2_105 -LBB2_72: - MOVW $11824, 0(R13) +LBB2_82: + MOVW $11824, 0(R12) TESTL R14, R14 - JS LBB2_86 - XORL R13, R13 - MOVL $2, BX + JS LBB2_84 XORL R12, R12 - -LBB2_74: - MOVL BX, SI - ADDQ -64(BP), SI - MOVL R15, DX - LONG $0x0058e6e8; BYTE $0x00 // callq _print_mantissa - TESTL R13, R13 - JE LBB2_78 - LEAL 0(R13)(BX*1), AX - CMPL R13, R15 - JGE LBB2_80 - LEAL 0(BX)(R15*1), CX - MOVL AX, AX - MOVQ -64(BP), R10 - -LBB2_77: - MOVBLZX -1(R10)(CX*1), DX - MOVB DX, 0(R10)(CX*1) - DECQ CX - CMPQ CX, AX - JG LBB2_77 - JMP LBB2_81 - -LBB2_78: - MOVQ -64(BP), R10 - ADDL R15, BX - TESTL R12, R12 - JNE LBB2_82 - JMP LBB2_106 + MOVL $2, BX + XORL R13, R13 LBB2_80: - MOVL AX, AX - MOVQ -64(BP), R10 + MOVL BX, SI + ADDQ -56(BP), SI + MOVL R15, DX + LONG $0x005599e8; BYTE $0x00 // callq _print_mantissa + TESTL R12, R12 + JE LBB2_81 + LEAL 0(R12)(BX*1), AX + CMPL R12, R15 + JGE LBB2_88 + LEAL 0(BX)(R15*1), CX + MOVL AX, AX + MOVQ -56(BP), R10 + +LBB2_90: + MOVBLZX -1(R10)(CX*1), DX + MOVB DX, 0(R10)(CX*1) + LEAQ -1(CX), DX + MOVQ DX, CX + CMPQ DX, AX + JG LBB2_90 + JMP LBB2_91 LBB2_81: + MOVQ -56(BP), R10 + ADDL R15, BX + TESTL R13, R13 + JNE LBB2_94 + +LBB2_93: + MOVL -44(BP), R9 + JMP LBB2_105 + +LBB2_88: + MOVL AX, AX + MOVQ -56(BP), R10 + +LBB2_91: MOVB $46, 0(R10)(AX*1) ORL $1, BX ADDL R15, BX - TESTL R12, R12 - JE LBB2_106 + TESTL R13, R13 + JE LBB2_93 -LBB2_82: +LBB2_94: MOVLQSX BX, BX - LEAL -1(R12), R8 + LEAL -1(R13), R8 XORL AX, AX CMPL R8, $127 MOVL -44(BP), R9 - JB LBB2_95 - INCQ R8 + JB LBB2_103 + ADDQ $1, R8 MOVQ R8, AX ANDQ $-128, AX - LEAQ -128(AX), DX - MOVQ DX, SI + LEAQ -128(AX), CX + MOVQ CX, SI SHRQ $7, SI - INCQ SI - MOVL SI, CX - ANDL $3, CX - CMPQ DX, $384 - JAE LBB2_89 - XORL SI, SI - JMP LBB2_91 + ADDQ $1, SI + MOVL SI, DX + ANDL $3, DX + CMPQ CX, $384 + JAE LBB2_97 + XORL DI, DI + JMP LBB2_99 -LBB2_85: +LBB2_77: ADDB $48, R14 MOVL BX, AX - INCL BX - MOVB R14, 0(R13)(AX*1) - JMP LBB2_107 + ADDL $1, BX + MOVB R14, 0(R12)(AX*1) + JMP LBB2_105 -LBB2_86: +LBB2_84: MOVL $2, BX SUBL R14, BX - LEAQ -2(BX), R8 MOVL $2, AX - CMPQ R8, $128 - JB LBB2_104 - MOVQ R8, AX - ANDQ $-128, AX - LEAQ -128(AX), DX - MOVQ DX, SI - SHRQ $7, SI - INCQ SI - MOVL SI, CX - ANDL $3, CX - CMPQ DX, $384 - JAE LBB2_97 - XORL SI, SI - JMP LBB2_99 -LBB2_89: - LEAQ 480(BX)(R10*1), DI - MOVQ CX, DX - SUBQ SI, DX - XORL SI, SI - QUAD $0xfffff66d056ffec5 // vmovdqu $-2451(%rip), %ymm0 /* LCPI2_0(%rip) */ - -LBB2_90: - QUAD $0xfffe2037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-480(%rdi,%rsi) - QUAD $0xfffe4037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-448(%rdi,%rsi) - QUAD $0xfffe6037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-416(%rdi,%rsi) - QUAD $0xfffe8037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-384(%rdi,%rsi) - QUAD $0xfffea037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-352(%rdi,%rsi) - QUAD $0xfffec037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-320(%rdi,%rsi) - QUAD $0xfffee037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-288(%rdi,%rsi) - QUAD $0xffff0037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-256(%rdi,%rsi) - QUAD $0xffff2037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-224(%rdi,%rsi) - QUAD $0xffff4037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-192(%rdi,%rsi) - QUAD $0xffff6037847ffec5; BYTE $0xff // vmovdqu %ymm0, $-160(%rdi,%rsi) - LONG $0x447ffec5; WORD $0x8037 // vmovdqu %ymm0, $-128(%rdi,%rsi) - LONG $0x447ffec5; WORD $0xa037 // vmovdqu %ymm0, $-96(%rdi,%rsi) - LONG $0x447ffec5; WORD $0xc037 // vmovdqu %ymm0, $-64(%rdi,%rsi) - LONG $0x447ffec5; WORD $0xe037 // vmovdqu %ymm0, $-32(%rdi,%rsi) - LONG $0x047ffec5; BYTE $0x37 // vmovdqu %ymm0, (%rdi,%rsi) - ADDQ $512, SI - ADDQ $4, DX - JNE LBB2_90 - -LBB2_91: - TESTQ CX, CX - JE LBB2_94 - ADDQ BX, SI - LEAQ 96(R10)(SI*1), DX - NEGQ CX - QUAD $0xfffff5c4056ffec5 // vmovdqu $-2620(%rip), %ymm0 /* LCPI2_0(%rip) */ - -LBB2_93: - LONG $0x427ffec5; BYTE $0xa0 // vmovdqu %ymm0, $-96(%rdx) - LONG $0x427ffec5; BYTE $0xc0 // vmovdqu %ymm0, $-64(%rdx) - LONG $0x427ffec5; BYTE $0xe0 // vmovdqu %ymm0, $-32(%rdx) - LONG $0x027ffec5 // vmovdqu %ymm0, (%rdx) - SUBQ $-128, DX - INCQ CX - JNE LBB2_93 - -LBB2_94: - ADDQ AX, BX - CMPQ R8, AX - JE LBB2_107 - -LBB2_95: - SUBL AX, R12 - -LBB2_96: - MOVB $48, 0(R10)(BX*1) - INCQ BX - DECL R12 - JNE LBB2_96 - JMP LBB2_107 +LBB2_85: + MOVB $48, 0(R12)(AX*1) + ADDQ $1, AX + CMPQ BX, AX + JNE LBB2_85 + ADDQ BX, R12 + MOVQ R12, SI + MOVL R15, DX + LONG $0x0054bde8; BYTE $0x00 // callq _print_mantissa + ADDL BX, R15 + MOVL R15, BX + MOVL -44(BP), R9 + JMP LBB2_105 LBB2_97: - MOVQ CX, DX - SUBQ SI, DX - XORL SI, SI - QUAD $0xfffff577056ffec5 // vmovdqu $-2697(%rip), %ymm0 /* LCPI2_0(%rip) */ + LEAQ 0(BX)(R10*1), CX + ADDQ $480, CX + ANDQ $-4, SI + NEGQ SI + XORL DI, DI + QUAD $0xfffff6c8056ffec5 // vmovdqu $-2360(%rip), %ymm0 /* LCPI2_0(%rip) */ LBB2_98: - LONG $0x7f7ec1c4; WORD $0x3544; BYTE $0x02 // vmovdqu %ymm0, $2(%r13,%rsi) - LONG $0x7f7ec1c4; WORD $0x3544; BYTE $0x22 // vmovdqu %ymm0, $34(%r13,%rsi) - LONG $0x7f7ec1c4; WORD $0x3544; BYTE $0x42 // vmovdqu %ymm0, $66(%r13,%rsi) - LONG $0x7f7ec1c4; WORD $0x3544; BYTE $0x62 // vmovdqu %ymm0, $98(%r13,%rsi) - QUAD $0x008235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $130(%r13,%rsi) - QUAD $0x00a235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $162(%r13,%rsi) - QUAD $0x00c235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $194(%r13,%rsi) - QUAD $0x00e235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $226(%r13,%rsi) - QUAD $0x010235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $258(%r13,%rsi) - QUAD $0x012235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $290(%r13,%rsi) - QUAD $0x014235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $322(%r13,%rsi) - QUAD $0x016235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $354(%r13,%rsi) - QUAD $0x018235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $386(%r13,%rsi) - QUAD $0x01a235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $418(%r13,%rsi) - QUAD $0x01c235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $450(%r13,%rsi) - QUAD $0x01e235847f7ec1c4; WORD $0x0000 // vmovdqu %ymm0, $482(%r13,%rsi) - ADDQ $512, SI - ADDQ $4, DX + QUAD $0xfffe2039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-480(%rcx,%rdi) + QUAD $0xfffe4039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-448(%rcx,%rdi) + QUAD $0xfffe6039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-416(%rcx,%rdi) + QUAD $0xfffe8039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-384(%rcx,%rdi) + QUAD $0xfffea039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-352(%rcx,%rdi) + QUAD $0xfffec039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-320(%rcx,%rdi) + QUAD $0xfffee039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-288(%rcx,%rdi) + QUAD $0xffff0039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-256(%rcx,%rdi) + QUAD $0xffff2039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-224(%rcx,%rdi) + QUAD $0xffff4039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-192(%rcx,%rdi) + QUAD $0xffff6039847ffec5; BYTE $0xff // vmovdqu %ymm0, $-160(%rcx,%rdi) + LONG $0x447ffec5; WORD $0x8039 // vmovdqu %ymm0, $-128(%rcx,%rdi) + LONG $0x447ffec5; WORD $0xa039 // vmovdqu %ymm0, $-96(%rcx,%rdi) + LONG $0x447ffec5; WORD $0xc039 // vmovdqu %ymm0, $-64(%rcx,%rdi) + LONG $0x447ffec5; WORD $0xe039 // vmovdqu %ymm0, $-32(%rcx,%rdi) + LONG $0x047ffec5; BYTE $0x39 // vmovdqu %ymm0, (%rcx,%rdi) + ADDQ $512, DI + ADDQ $4, SI JNE LBB2_98 LBB2_99: - TESTQ CX, CX + TESTQ DX, DX JE LBB2_102 - NEGQ CX - QUAD $0xfffff4c2056ffec5 // vmovdqu $-2878(%rip), %ymm0 /* LCPI2_0(%rip) */ + ADDQ BX, DI + LEAQ 0(R10)(DI*1), CX + ADDQ $96, CX + SHLQ $7, DX + XORL SI, SI + QUAD $0xfffff619056ffec5 // vmovdqu $-2535(%rip), %ymm0 /* LCPI2_0(%rip) */ LBB2_101: - MOVQ SI, DX - ORQ $2, DX - LONG $0x7f7ec1c4; WORD $0x1544; BYTE $0x00 // vmovdqu %ymm0, (%r13,%rdx) - LONG $0x7f7ec1c4; WORD $0x1544; BYTE $0x20 // vmovdqu %ymm0, $32(%r13,%rdx) - LONG $0x7f7ec1c4; WORD $0x1544; BYTE $0x40 // vmovdqu %ymm0, $64(%r13,%rdx) - LONG $0x7f7ec1c4; WORD $0x1544; BYTE $0x60 // vmovdqu %ymm0, $96(%r13,%rdx) + LONG $0x447ffec5; WORD $0xa031 // vmovdqu %ymm0, $-96(%rcx,%rsi) + LONG $0x447ffec5; WORD $0xc031 // vmovdqu %ymm0, $-64(%rcx,%rsi) + LONG $0x447ffec5; WORD $0xe031 // vmovdqu %ymm0, $-32(%rcx,%rsi) + LONG $0x047ffec5; BYTE $0x31 // vmovdqu %ymm0, (%rcx,%rsi) SUBQ $-128, SI - INCQ CX + CMPQ DX, SI JNE LBB2_101 LBB2_102: + ADDQ AX, BX CMPQ R8, AX JE LBB2_105 - ORQ $2, AX + +LBB2_103: + SUBL AX, R13 LBB2_104: - MOVB $48, 0(R13)(AX*1) - INCQ AX - CMPQ BX, AX + MOVB $48, 0(R10)(BX*1) + ADDQ $1, BX + ADDL $-1, R13 JNE LBB2_104 LBB2_105: - ADDQ BX, R13 - MOVQ R13, SI - MOVL R15, DX - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x0055d4e8; BYTE $0x00 // callq _print_mantissa - ADDL BX, R15 - MOVL R15, BX - -LBB2_106: - MOVL -44(BP), R9 - -LBB2_107: ADDL R9, BX - JMP LBB2_110 + JMP LBB2_106 -LBB2_108: +LBB2_1: MOVQ $9223372036854775807, CX ANDQ CX, AX - MOVB $45, 0(R13) - INCQ R13 + MOVB $45, 0(R12) + ADDQ $1, R12 MOVL $1, R9 TESTQ AX, AX - JNE LBB2_2 + JNE LBB2_4 -LBB2_109: - MOVB $48, 0(R13) - INCL R9 +LBB2_3: + MOVB $48, 0(R12) + ADDL $1, R9 MOVL R9, BX -LBB2_110: +LBB2_106: MOVL BX, AX - ADDQ $40, SP + ADDQ $56, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 WORD $0x5d41 // popq %r13 @@ -1184,10 +1081,10 @@ LBB3_1: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp MOVB $45, 0(DI) - INCQ DI + ADDQ $1, DI NEGQ SI - LONG $0x000044e8; BYTE $0x00 // callq _u64toa - INCL AX + LONG $0x000045e8; BYTE $0x00 // callq _u64toa + ADDL $1, AX BYTE $0x5d // popq %rbp RET @@ -1231,7 +1128,7 @@ _u64toa: ADDQ AX, AX CMPL SI, $1000 JB LBB4_3 - LONG $0xa90d8d48; WORD $0x00ae; BYTE $0x00 // leaq $44713(%rip), %rcx /* _Digits(%rip) */ + LONG $0xd10d8d48; WORD $0x00ac; BYTE $0x00 // leaq $44241(%rip), %rcx /* _Digits(%rip) */ MOVB 0(DX)(CX*1), CX MOVB CX, 0(DI) MOVL $1, CX @@ -1245,26 +1142,26 @@ LBB4_3: LBB4_4: MOVWLZX DX, DX ORQ $1, DX - LONG $0x88358d48; WORD $0x00ae; BYTE $0x00 // leaq $44680(%rip), %rsi /* _Digits(%rip) */ + LONG $0xb0358d48; WORD $0x00ac; BYTE $0x00 // leaq $44208(%rip), %rsi /* _Digits(%rip) */ MOVB 0(DX)(SI*1), DX MOVL CX, SI - INCL CX + ADDL $1, CX MOVB DX, 0(DI)(SI*1) LBB4_6: - LONG $0x77158d48; WORD $0x00ae; BYTE $0x00 // leaq $44663(%rip), %rdx /* _Digits(%rip) */ + LONG $0x9e158d48; WORD $0x00ac; BYTE $0x00 // leaq $44190(%rip), %rdx /* _Digits(%rip) */ MOVB 0(AX)(DX*1), DX MOVL CX, SI - INCL CX + ADDL $1, CX MOVB DX, 0(DI)(SI*1) LBB4_7: MOVWLZX AX, AX ORQ $1, AX - LONG $0x5f158d48; WORD $0x00ae; BYTE $0x00 // leaq $44639(%rip), %rdx /* _Digits(%rip) */ + LONG $0x85158d48; WORD $0x00ac; BYTE $0x00 // leaq $44165(%rip), %rdx /* _Digits(%rip) */ MOVB 0(AX)(DX*1), AX MOVL CX, DX - INCL CX + ADDL $1, CX MOVB AX, 0(DI)(DX*1) MOVL CX, AX BYTE $0x5d // popq %rbp @@ -1308,7 +1205,7 @@ LBB4_8: ADDQ R11, R11 CMPL SI, $10000000 JB LBB4_11 - LONG $0xc8058d48; WORD $0x00ad; BYTE $0x00 // leaq $44488(%rip), %rax /* _Digits(%rip) */ + LONG $0xed058d48; WORD $0x00ab; BYTE $0x00 // leaq $44013(%rip), %rax /* _Digits(%rip) */ MOVB 0(R10)(AX*1), AX MOVB AX, 0(DI) MOVL $1, CX @@ -1322,39 +1219,39 @@ LBB4_11: LBB4_12: MOVL R10, AX ORQ $1, AX - LONG $0xa3358d48; WORD $0x00ad; BYTE $0x00 // leaq $44451(%rip), %rsi /* _Digits(%rip) */ + LONG $0xc8358d48; WORD $0x00ab; BYTE $0x00 // leaq $43976(%rip), %rsi /* _Digits(%rip) */ MOVB 0(AX)(SI*1), AX MOVL CX, SI - INCL CX + ADDL $1, CX MOVB AX, 0(DI)(SI*1) LBB4_14: - LONG $0x92058d48; WORD $0x00ad; BYTE $0x00 // leaq $44434(%rip), %rax /* _Digits(%rip) */ + LONG $0xb6058d48; WORD $0x00ab; BYTE $0x00 // leaq $43958(%rip), %rax /* _Digits(%rip) */ MOVB 0(R9)(AX*1), AX MOVL CX, SI - INCL CX + ADDL $1, CX MOVB AX, 0(DI)(SI*1) LBB4_15: MOVWLZX R9, AX ORQ $1, AX - LONG $0x78358d48; WORD $0x00ad; BYTE $0x00 // leaq $44408(%rip), %rsi /* _Digits(%rip) */ + LONG $0x9b358d48; WORD $0x00ab; BYTE $0x00 // leaq $43931(%rip), %rsi /* _Digits(%rip) */ MOVB 0(AX)(SI*1), AX MOVL CX, DX - MOVB AX, 0(DX)(DI*1) + MOVB AX, 0(DI)(DX*1) MOVB 0(R8)(SI*1), AX - MOVB AX, 1(DX)(DI*1) + MOVB AX, 1(DI)(DX*1) MOVWLZX R8, AX ORQ $1, AX MOVB 0(AX)(SI*1), AX - MOVB AX, 2(DX)(DI*1) + MOVB AX, 2(DI)(DX*1) MOVB 0(R11)(SI*1), AX - MOVB AX, 3(DX)(DI*1) + MOVB AX, 3(DI)(DX*1) MOVWLZX R11, AX ORQ $1, AX MOVB 0(AX)(SI*1), AX ADDL $5, CX - MOVB AX, 4(DX)(DI*1) + MOVB AX, 4(DI)(DX*1) MOVL CX, AX BYTE $0x5d // popq %rbp RET @@ -1376,7 +1273,7 @@ LBB4_16: LONG $0xe100c269; WORD $0x05f5 // imull $100000000, %edx, %eax SUBL AX, SI LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - QUAD $0xfffffdcb0d6ffac5 // vmovdqu $-565(%rip), %xmm1 /* LCPI4_0(%rip) */ + QUAD $0xfffffdc60d6ffac5 // vmovdqu $-570(%rip), %xmm1 /* LCPI4_0(%rip) */ LONG $0xd1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm2 LONG $0xd273e9c5; BYTE $0x2d // vpsrlq $45, %xmm2, %xmm2 MOVL $10000, AX @@ -1387,11 +1284,11 @@ LBB4_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 /* LCPI4_1(%rip) */ - QUAD $0xfffdc3255979e2c4; BYTE $0xff // vpbroadcastq $-573(%rip), %xmm4 /* LCPI4_2(%rip) */ + QUAD $0xfffdbf155979e2c4; BYTE $0xff // vpbroadcastq $-577(%rip), %xmm2 /* LCPI4_1(%rip) */ + QUAD $0xfffdbe255979e2c4; BYTE $0xff // vpbroadcastq $-578(%rip), %xmm4 /* LCPI4_2(%rip) */ LONG $0xc2e4f9c5 // vpmulhuw %xmm2, %xmm0, %xmm0 LONG $0xc4e4f9c5 // vpmulhuw %xmm4, %xmm0, %xmm0 - QUAD $0xfffffd8b2d6ffac5 // vmovdqu $-629(%rip), %xmm5 /* LCPI4_3(%rip) */ + QUAD $0xfffffd862d6ffac5 // vmovdqu $-634(%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 @@ -1410,17 +1307,17 @@ LBB4_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 /* LCPI4_4(%rip) */ + QUAD $0xfffffd400dfcf9c5 // vpaddb $-704(%rip), %xmm0, %xmm1 /* LCPI4_4(%rip) */ LONG $0xd2efe9c5 // vpxor %xmm2, %xmm2, %xmm2 LONG $0xc274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm0 LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax + NOTL AX ORL $32768, AX - XORL $-32769, AX BSFL AX, AX MOVL $16, CX SUBL AX, CX SHLQ $4, AX - LONG $0xeb158d48; WORD $0x00ac; BYTE $0x00 // leaq $44267(%rip), %rdx /* _VecShiftShuffles(%rip) */ + LONG $0x11158d48; WORD $0x00ab; BYTE $0x00 // leaq $43793(%rip), %rdx /* _VecShiftShuffles(%rip) */ LONG $0x0071e2c4; WORD $0x1004 // vpshufb (%rax,%rdx), %xmm1, %xmm0 LONG $0x077ffac5 // vmovdqu %xmm0, (%rdi) MOVL CX, AX @@ -1443,16 +1340,14 @@ LBB4_18: JMP LBB4_25 LBB4_20: - CMPL DX, $99 - JA LBB4_22 - MOVL DX, AX - LONG $0xce0d8d48; WORD $0x00ab; BYTE $0x00 // leaq $43982(%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 LBB4_25 + CMPL DX, $99 + JA LBB4_22 + MOVL DX, AX + LONG $0xf40d8d48; WORD $0x00a9; BYTE $0x00 // leaq $43508(%rip), %rcx /* _Digits(%rip) */ + MOVWLZX 0(CX)(AX*2), AX + MOVW AX, 0(DI) + MOVL $2, CX + JMP LBB4_25 LBB4_22: MOVL DX, AX @@ -1471,11 +1366,9 @@ LBB4_22: WORD $0xc96b; BYTE $0x64 // imull $100, %ecx, %ecx SUBL CX, AX MOVWLZX AX, AX - LONG $0x7d0d8d48; WORD $0x00ab; BYTE $0x00 // leaq $43901(%rip), %rcx /* _Digits(%rip) */ - MOVB 0(CX)(AX*2), DX - MOVB 1(CX)(AX*2), AX - MOVB DX, 1(DI) - MOVB AX, 2(DI) + LONG $0xab0d8d48; WORD $0x00a9; BYTE $0x00 // leaq $43435(%rip), %rcx /* _Digits(%rip) */ + MOVWLZX 0(CX)(AX*2), AX + MOVW AX, 1(DI) MOVL $3, CX JMP LBB4_25 @@ -1483,18 +1376,15 @@ LBB4_24: WORD $0xc86b; BYTE $0x64 // imull $100, %eax, %ecx SUBL CX, DX MOVWLZX AX, AX - LONG $0x5a058d4c; WORD $0x00ab; BYTE $0x00 // leaq $43866(%rip), %r8 /* _Digits(%rip) */ - MOVB 0(R8)(AX*2), CX - MOVB 1(R8)(AX*2), AX - MOVB CX, 0(DI) - MOVB AX, 1(DI) + LONG $0x8d0d8d48; WORD $0x00a9; BYTE $0x00 // leaq $43405(%rip), %rcx /* _Digits(%rip) */ + MOVWLZX 0(CX)(AX*2), AX + MOVW AX, 0(DI) MOVWLZX DX, AX - MOVB 0(R8)(AX*2), CX + MOVB 0(CX)(AX*2), DX ADDQ AX, AX - MOVB CX, 2(DI) - ORL $1, AX + MOVB DX, 2(DI) MOVWLZX AX, AX - MOVB 0(AX)(R8*1), AX + MOVB 1(AX)(CX*1), AX MOVB AX, 3(DI) MOVL $4, CX @@ -1504,7 +1394,7 @@ LBB4_25: MULQ DX SHRQ $26, DX LONG $0xc26ef9c5 // vmovd %edx, %xmm0 - QUAD $0xfffffbe40d6ffac5 // vmovdqu $-1052(%rip), %xmm1 /* LCPI4_0(%rip) */ + QUAD $0xfffffbfa0d6ffac5 // vmovdqu $-1030(%rip), %xmm1 /* LCPI4_0(%rip) */ LONG $0xd1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm2 LONG $0xd273e9c5; BYTE $0x2d // vpsrlq $45, %xmm2, %xmm2 MOVL $10000, AX @@ -1514,12 +1404,12 @@ LBB4_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 /* LCPI4_1(%rip) */ + QUAD $0xfffbf8155979e2c4; BYTE $0xff // vpbroadcastq $-1032(%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 /* LCPI4_2(%rip) */ + QUAD $0xfffbee255979e2c4; BYTE $0xff // vpbroadcastq $-1042(%rip), %xmm4 /* LCPI4_2(%rip) */ LONG $0xc4e4f9c5 // vpmulhuw %xmm4, %xmm0, %xmm0 - QUAD $0xfffffba42d6ffac5 // vmovdqu $-1116(%rip), %xmm5 /* LCPI4_3(%rip) */ + QUAD $0xfffffbba2d6ffac5 // vmovdqu $-1094(%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 @@ -1540,7 +1430,7 @@ LBB4_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 /* LCPI4_4(%rip) */ + QUAD $0xfffffb6c05fcf9c5 // vpaddb $-1172(%rip), %xmm0, %xmm0 /* LCPI4_4(%rip) */ MOVL CX, AX LONG $0x047ffac5; BYTE $0x07 // vmovdqu %xmm0, (%rdi,%rax) ORL $16, CX @@ -1577,722 +1467,752 @@ _quote: WORD $0x5541 // pushq %r13 WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax + SUBQ $24, SP MOVQ CX, R15 MOVQ SI, R14 - MOVQ 0(CX), R9 + MOVQ 0(CX), R10 TESTB $1, R8 - LONG $0xf7058d48; WORD $0x00aa; BYTE $0x00 // leaq $43767(%rip), %rax /* __SingleQuoteTab(%rip) */ - LONG $0xf0058d4c; WORD $0x00ba; BYTE $0x00 // leaq $47856(%rip), %r8 /* __DoubleQuoteTab(%rip) */ + LONG $0x32058d48; WORD $0x00a9; BYTE $0x00 // leaq $43314(%rip), %rax /* __SingleQuoteTab(%rip) */ + LONG $0x2b058d4c; WORD $0x00b9; BYTE $0x00 // leaq $47403(%rip), %r8 /* __DoubleQuoteTab(%rip) */ LONG $0xc0440f4c // cmoveq %rax, %r8 LEAQ 0(SI*8), AX - CMPQ R9, AX - JGE LBB5_86 - MOVQ DX, R12 + CMPQ R10, AX + JGE LBB5_93 + MOVQ DX, R9 MOVQ DI, R11 TESTQ R14, R14 - JE LBB5_118 - QUAD $0xffffff1b256ffec5 // vmovdqu $-229(%rip), %ymm4 /* LCPI5_0(%rip) */ - QUAD $0xffffff332d6ffec5 // vmovdqu $-205(%rip), %ymm5 /* LCPI5_1(%rip) */ - QUAD $0xffffff4b356ffec5 // vmovdqu $-181(%rip), %ymm6 /* LCPI5_2(%rip) */ + JE LBB5_125 + QUAD $0xffffff18256ffec5 // vmovdqu $-232(%rip), %ymm4 /* LCPI5_0(%rip) */ + QUAD $0xffffff302d6ffec5 // vmovdqu $-208(%rip), %ymm5 /* LCPI5_1(%rip) */ + QUAD $0xffffff48356ffec5 // vmovdqu $-184(%rip), %ymm6 /* LCPI5_2(%rip) */ LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 - MOVQ DI, R11 - MOVQ DX, R12 - MOVQ DX, -48(BP) + MOVQ DI, CX + MOVQ DX, -64(BP) + MOVQ DX, R9 LBB5_3: - CMPQ R14, $31 - SETGT CX - MOVQ R9, R10 - MOVQ R12, SI - MOVQ R14, AX - MOVQ R11, R13 - CMPQ R9, $32 - JL LBB5_9 + MOVQ CX, R13 CMPQ R14, $32 - JL LBB5_9 - MOVQ R11, R13 - MOVQ R14, AX - MOVQ R12, SI - MOVQ R9, BX + SETGE CX + MOVQ R13, AX + MOVQ R10, BX + MOVQ R9, R12 + MOVQ R14, R11 + JL LBB5_10 + CMPQ R10, $32 + JL LBB5_10 + XORL R12, R12 + MOVQ R14, SI + MOVQ R10, DX LBB5_6: - LONG $0x6f7ec1c4; WORD $0x0045 // vmovdqu (%r13), %ymm0 + LONG $0x6f7ea1c4; WORD $0x2004 // vmovdqu (%rax,%r12), %ymm0 LONG $0xc864ddc5 // vpcmpgtb %ymm0, %ymm4, %ymm1 LONG $0xd574fdc5 // vpcmpeqb %ymm5, %ymm0, %ymm2 LONG $0xde74fdc5 // vpcmpeqb %ymm6, %ymm0, %ymm3 LONG $0xd2ebe5c5 // vpor %ymm2, %ymm3, %ymm2 - LONG $0x067ffec5 // vmovdqu %ymm0, (%rsi) + LONG $0x7f7e81c4; WORD $0x2104 // vmovdqu %ymm0, (%r9,%r12) LONG $0x647dc1c4; BYTE $0xc0 // vpcmpgtb %ymm8, %ymm0, %ymm0 - LONG $0xc1dbfdc5 // vpand %ymm1, %ymm0, %ymm0 + LONG $0xc0dbf5c5 // vpand %ymm0, %ymm1, %ymm0 LONG $0xc0ebedc5 // vpor %ymm0, %ymm2, %ymm0 LONG $0xc8d7fdc5 // vpmovmskb %ymm0, %ecx TESTL CX, CX - JNE LBB5_19 - ADDQ $32, R13 - ADDQ $32, SI - LEAQ -32(BX), R10 - CMPQ AX, $63 - SETGT CX - CMPQ AX, $64 - LEAQ -32(AX), AX + JNE LBB5_20 + LEAQ -32(SI), R11 + LEAQ -32(DX), BX + ADDQ $32, R12 + CMPQ SI, $64 + SETGE CX JL LBB5_9 - CMPQ BX, $63 - MOVQ R10, BX + MOVQ R11, SI + CMPQ DX, $63 + MOVQ BX, DX JG LBB5_6 LBB5_9: + LEAQ 0(AX)(R12*1), R13 + ADDQ R9, R12 + +LBB5_10: TESTB CX, CX - JE LBB5_13 + JE LBB5_14 + MOVQ R14, SI LONG $0x6f7ec1c4; WORD $0x0045 // vmovdqu (%r13), %ymm0 LONG $0xc864ddc5 // vpcmpgtb %ymm0, %ymm4, %ymm1 LONG $0xd574fdc5 // vpcmpeqb %ymm5, %ymm0, %ymm2 LONG $0xde74fdc5 // vpcmpeqb %ymm6, %ymm0, %ymm3 LONG $0xd2ebe5c5 // vpor %ymm2, %ymm3, %ymm2 LONG $0x647dc1c4; BYTE $0xc0 // vpcmpgtb %ymm8, %ymm0, %ymm0 - LONG $0xc1dbfdc5 // vpand %ymm1, %ymm0, %ymm0 + LONG $0xc0dbf5c5 // vpand %ymm0, %ymm1, %ymm0 LONG $0xc0ebedc5 // vpor %ymm0, %ymm2, %ymm0 - LONG $0xc0d7fdc5 // vpmovmskb %ymm0, %eax - MOVQ $4294967296, CX - ORQ CX, AX - BSFQ AX, CX + LONG $0xc8d7fdc5 // vpmovmskb %ymm0, %ecx + MOVQ $4294967296, DX + ORQ DX, CX + BSFQ CX, R14 LONG $0x6f7ac1c4; WORD $0x0045 // vmovdqu (%r13), %xmm0 - LONG $0x16f9e3c4; WORD $0x01c0 // vpextrq $1, %xmm0, %rax - LONG $0x7ef9e1c4; BYTE $0xc3 // vmovq %xmm0, %rbx - CMPQ CX, R10 - JLE LBB5_20 - CMPQ R10, $16 - JB LBB5_23 - MOVQ BX, 0(SI) - MOVQ AX, 8(SI) + LONG $0x16f9e3c4; WORD $0x01c1 // vpextrq $1, %xmm0, %rcx + LONG $0x7ef9e1c4; BYTE $0xc2 // vmovq %xmm0, %rdx + CMPQ R14, BX + JLE LBB5_21 + CMPQ BX, $16 + MOVQ AX, R11 + JB LBB5_24 + MOVQ DX, 0(R12) + MOVQ CX, 8(R12) LEAQ 16(R13), CX - ADDQ $16, SI - LEAQ -16(R10), AX - CMPQ AX, $8 - JAE LBB5_24 - JMP LBB5_25 + ADDQ $16, R12 + LEAQ -16(BX), DX + MOVQ SI, R14 + CMPQ DX, $8 + JAE LBB5_25 + JMP LBB5_26 -LBB5_13: - MOVQ R15, DX +LBB5_14: WORD $0xf8c5; BYTE $0x77 // vzeroupper - CMPQ AX, $15 - SETGT R15 - CMPQ R10, $16 - JL LBB5_30 - CMPQ AX, $16 - QUAD $0xfffffe323d6ffac5 // vmovdqu $-462(%rip), %xmm7 /* LCPI5_3(%rip) */ - QUAD $0xfffffe3a0d6f7ac5 // vmovdqu $-454(%rip), %xmm9 /* LCPI5_4(%rip) */ - QUAD $0xfffffe42156f7ac5 // vmovdqu $-446(%rip), %xmm10 /* LCPI5_5(%rip) */ + CMPQ R11, $16 + SETGE DX + MOVQ R15, -56(BP) + MOVQ R14, -48(BP) + JL LBB5_31 + CMPQ BX, $16 + QUAD $0xfffffe203d6ffac5 // vmovdqu $-480(%rip), %xmm7 /* LCPI5_3(%rip) */ + QUAD $0xfffffe280d6f7ac5 // vmovdqu $-472(%rip), %xmm9 /* LCPI5_4(%rip) */ + QUAD $0xfffffe30156f7ac5 // vmovdqu $-464(%rip), %xmm10 /* LCPI5_5(%rip) */ LONG $0x762141c4; BYTE $0xdb // vpcmpeqd %xmm11, %xmm11, %xmm11 - JL LBB5_35 - QUAD $0xfffffdaf256ffec5 // vmovdqu $-593(%rip), %ymm4 /* LCPI5_0(%rip) */ - QUAD $0xfffffdc72d6ffec5 // vmovdqu $-569(%rip), %ymm5 /* LCPI5_1(%rip) */ - QUAD $0xfffffddf356ffec5 // vmovdqu $-545(%rip), %ymm6 /* LCPI5_2(%rip) */ + JL LBB5_36 + MOVQ AX, CX + SUBQ R13, CX + QUAD $0xfffffd97256ffec5 // vmovdqu $-617(%rip), %ymm4 /* LCPI5_0(%rip) */ + QUAD $0xfffffdaf2d6ffec5 // vmovdqu $-593(%rip), %ymm5 /* LCPI5_1(%rip) */ + QUAD $0xfffffdc7356ffec5 // vmovdqu $-569(%rip), %ymm6 /* LCPI5_2(%rip) */ LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 -LBB5_16: +LBB5_17: LONG $0x6f7ac1c4; WORD $0x0045 // vmovdqu (%r13), %xmm0 LONG $0xc864c1c5 // vpcmpgtb %xmm0, %xmm7, %xmm1 LONG $0xd074b1c5 // vpcmpeqb %xmm0, %xmm9, %xmm2 LONG $0xd874a9c5 // vpcmpeqb %xmm0, %xmm10, %xmm3 LONG $0xd2ebe1c5 // vpor %xmm2, %xmm3, %xmm2 - LONG $0x067ffac5 // vmovdqu %xmm0, (%rsi) + LONG $0x7f7ac1c4; WORD $0x2404 // vmovdqu %xmm0, (%r12) LONG $0x6479c1c4; BYTE $0xc3 // vpcmpgtb %xmm11, %xmm0, %xmm0 - LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 + LONG $0xc0dbf1c5 // vpand %xmm0, %xmm1, %xmm0 LONG $0xc0ebe9c5 // vpor %xmm0, %xmm2, %xmm0 - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - TESTW CX, CX - JNE LBB5_22 + LONG $0xd0d7f9c5 // vpmovmskb %xmm0, %edx + TESTL DX, DX + JNE LBB5_23 ADDQ $16, R13 - ADDQ $16, SI - LEAQ -16(R10), CX - CMPQ AX, $31 - SETGT R15 - CMPQ AX, $32 - LEAQ -16(AX), AX - JL LBB5_31 - CMPQ R10, $31 - MOVQ CX, R10 - JG LBB5_16 - -LBB5_31: - TESTB R15, R15 - JE LBB5_36 + ADDQ $16, R12 + LEAQ -16(R11), R15 + LEAQ -16(BX), R14 + CMPQ R11, $32 + SETGE DX + JL LBB5_32 + ADDQ $-16, CX + MOVQ R15, R11 + CMPQ BX, $31 + MOVQ R14, BX + JG LBB5_17 LBB5_32: + TESTB DX, DX + JE LBB5_37 + +LBB5_33: LONG $0x6f7ac1c4; WORD $0x0045 // vmovdqu (%r13), %xmm0 LONG $0xc864c1c5 // vpcmpgtb %xmm0, %xmm7, %xmm1 LONG $0xd074b1c5 // vpcmpeqb %xmm0, %xmm9, %xmm2 LONG $0xd874a9c5 // vpcmpeqb %xmm0, %xmm10, %xmm3 LONG $0xd2ebe1c5 // vpor %xmm2, %xmm3, %xmm2 LONG $0x6479c1c4; BYTE $0xdb // vpcmpgtb %xmm11, %xmm0, %xmm3 - LONG $0xc9dbe1c5 // vpand %xmm1, %xmm3, %xmm1 + LONG $0xcbdbf1c5 // vpand %xmm3, %xmm1, %xmm1 LONG $0xc9ebe9c5 // vpor %xmm1, %xmm2, %xmm1 - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - ORL $65536, AX - BSFL AX, BX - LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax - CMPQ CX, BX - MOVQ DX, R15 - JGE LBB5_53 - CMPQ CX, $8 - JB LBB5_56 - MOVQ AX, 0(SI) - LEAQ 8(R13), AX - ADDQ $8, SI - LEAQ -8(CX), BX - JMP LBB5_57 - -LBB5_19: - SUBQ R11, R13 - BSFL CX, R10 - ADDQ R13, R10 - JMP LBB5_69 - -LBB5_20: - CMPL CX, $16 - JB LBB5_42 - MOVQ BX, 0(SI) - MOVQ AX, 8(SI) - LEAQ 16(R13), BX - ADDQ $16, SI - LEAQ -16(CX), AX - CMPQ AX, $8 - JAE LBB5_43 - JMP LBB5_44 - -LBB5_22: - MOVWLZX CX, AX - SUBQ R11, R13 - BSFL AX, R10 - ADDQ R13, R10 - MOVQ DX, R15 - JMP LBB5_69 - -LBB5_23: - MOVQ R13, CX - MOVQ R10, AX - CMPQ AX, $8 - JB LBB5_25 - -LBB5_24: - MOVQ 0(CX), DX - MOVQ DX, 0(SI) - ADDQ $8, CX - ADDQ $8, SI - ADDQ $-8, AX - -LBB5_25: - CMPQ AX, $4 - JB LBB5_26 - MOVL 0(CX), DX - MOVL DX, 0(SI) - ADDQ $4, CX - ADDQ $4, SI - ADDQ $-4, AX - CMPQ AX, $2 - JAE LBB5_50 - -LBB5_27: - TESTQ AX, AX - JE LBB5_29 - -LBB5_28: - MOVB 0(CX), AX - MOVB AX, 0(SI) - -LBB5_29: - SUBQ R11, R10 - ADDQ R13, R10 - NOTQ R10 - JMP LBB5_69 - -LBB5_26: - CMPQ AX, $2 - JB LBB5_27 - -LBB5_50: - MOVWLZX 0(CX), DX - MOVW DX, 0(SI) - ADDQ $2, CX - ADDQ $2, SI - ADDQ $-2, AX - TESTQ AX, AX - JNE LBB5_28 - JMP LBB5_29 - -LBB5_30: - MOVQ R10, CX - QUAD $0xfffffc0e256ffec5 // vmovdqu $-1010(%rip), %ymm4 /* LCPI5_0(%rip) */ - QUAD $0xfffffc262d6ffec5 // vmovdqu $-986(%rip), %ymm5 /* LCPI5_1(%rip) */ - QUAD $0xfffffc3e356ffec5 // vmovdqu $-962(%rip), %ymm6 /* LCPI5_2(%rip) */ - LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 - QUAD $0xfffffc513d6ffac5 // vmovdqu $-943(%rip), %xmm7 /* LCPI5_3(%rip) */ - QUAD $0xfffffc590d6f7ac5 // vmovdqu $-935(%rip), %xmm9 /* LCPI5_4(%rip) */ - QUAD $0xfffffc61156f7ac5 // vmovdqu $-927(%rip), %xmm10 /* LCPI5_5(%rip) */ - LONG $0x762141c4; BYTE $0xdb // vpcmpeqd %xmm11, %xmm11, %xmm11 - TESTB R15, R15 - JE LBB5_36 - JMP LBB5_32 - -LBB5_35: - MOVQ R10, CX - QUAD $0xfffffbc7256ffec5 // vmovdqu $-1081(%rip), %ymm4 /* LCPI5_0(%rip) */ - QUAD $0xfffffbdf2d6ffec5 // vmovdqu $-1057(%rip), %ymm5 /* LCPI5_1(%rip) */ - QUAD $0xfffffbf7356ffec5 // vmovdqu $-1033(%rip), %ymm6 /* LCPI5_2(%rip) */ - LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 - TESTB R15, R15 - JNE LBB5_32 - -LBB5_36: - TESTQ CX, CX - MOVQ DX, R15 - LONG $0x45158d4c; WORD $0x00a7; BYTE $0x00 // leaq $42821(%rip), %r10 /* __SingleQuoteTab(%rip) */ - JLE LBB5_41 - TESTQ AX, AX - JLE LBB5_41 - -LBB5_38: - MOVBLZX 0(R13), BX - MOVQ BX, DX - SHLQ $4, DX - CMPQ 0(DX)(R10*1), $0 - JNE LBB5_55 - INCQ R13 - MOVB BX, 0(SI) - CMPQ AX, $2 - LEAQ -1(AX), AX - JL LBB5_41 - INCQ SI - CMPQ CX, $1 - LEAQ -1(CX), CX - JG LBB5_38 - -LBB5_41: - SUBQ R11, R13 - NEGQ AX - SBBQ R10, R10 - XORQ R13, R10 - JMP LBB5_69 - -LBB5_42: - MOVQ R13, BX - MOVQ CX, AX - CMPQ AX, $8 - JB LBB5_44 - -LBB5_43: - MOVQ 0(BX), DX - MOVQ DX, 0(SI) - ADDQ $8, BX - ADDQ $8, SI - ADDQ $-8, AX - -LBB5_44: - CMPQ AX, $4 - JB LBB5_45 - MOVL 0(BX), DX - MOVL DX, 0(SI) - ADDQ $4, BX - ADDQ $4, SI - ADDQ $-4, AX - CMPQ AX, $2 - JAE LBB5_52 - -LBB5_46: - TESTQ AX, AX - JE LBB5_48 - -LBB5_47: - MOVB 0(BX), AX - MOVB AX, 0(SI) - -LBB5_48: - SUBQ R11, R13 - ADDQ CX, R13 - JMP LBB5_68 - -LBB5_45: - CMPQ AX, $2 - JB LBB5_46 - -LBB5_52: - MOVWLZX 0(BX), DX - MOVW DX, 0(SI) - ADDQ $2, BX - ADDQ $2, SI - ADDQ $-2, AX - TESTQ AX, AX - JNE LBB5_47 - JMP LBB5_48 - -LBB5_53: - CMPL BX, $8 + LONG $0xc9d7f9c5 // vpmovmskb %xmm1, %ecx + ORL $65536, CX + BSFL CX, BX + LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx + CMPQ R14, BX + MOVQ AX, R11 + JGE LBB5_57 + CMPQ R14, $8 + MOVQ -56(BP), R15 JB LBB5_62 - MOVQ AX, 0(SI) - LEAQ 8(R13), R10 - ADDQ $8, SI - LEAQ -8(BX), AX + MOVQ CX, 0(R12) + LEAQ 8(R13), CX + ADDQ $8, R12 + LEAQ -8(R14), DX JMP LBB5_63 -LBB5_55: +LBB5_20: + MOVQ AX, R11 + BSFL CX, R13 + ADDQ R12, R13 + JMP LBB5_75 + +LBB5_21: + CMPL R14, $16 + MOVQ AX, R11 + JB LBB5_46 + MOVQ DX, 0(R12) + MOVQ CX, 8(R12) + LEAQ 16(R13), BX + ADDQ $16, R12 + LEAQ -16(R14), CX + CMPQ CX, $8 + JAE LBB5_47 + JMP LBB5_48 + +LBB5_23: + BSFW DX, DX + MOVWLZX DX, R13 + SUBQ CX, R13 + MOVQ -56(BP), R15 + MOVQ -48(BP), R14 + MOVQ AX, R11 + JMP LBB5_75 + +LBB5_24: + MOVQ R13, CX + MOVQ BX, DX + MOVQ SI, R14 + CMPQ DX, $8 + JB LBB5_26 + +LBB5_25: + MOVQ 0(CX), SI + MOVQ SI, 0(R12) + ADDQ $8, CX + ADDQ $8, R12 + ADDQ $-8, DX + +LBB5_26: + CMPQ DX, $4 + JB LBB5_27 + MOVL 0(CX), SI + MOVL SI, 0(R12) + ADDQ $4, CX + ADDQ $4, R12 + ADDQ $-4, DX + CMPQ DX, $2 + JAE LBB5_54 + +LBB5_28: + TESTQ DX, DX + JE LBB5_30 + +LBB5_29: + MOVB 0(CX), CX + MOVB CX, 0(R12) + +LBB5_30: + ADDQ R13, BX + NOTQ BX + ADDQ R11, BX + MOVQ BX, R13 + JMP LBB5_75 + +LBB5_27: + CMPQ DX, $2 + JB LBB5_28 + +LBB5_54: + MOVWLZX 0(CX), SI + MOVW SI, 0(R12) + ADDQ $2, CX + ADDQ $2, R12 + ADDQ $-2, DX + TESTQ DX, DX + JNE LBB5_29 + JMP LBB5_30 + +LBB5_31: + MOVQ BX, R14 + MOVQ R11, R15 + QUAD $0xfffffbd2256ffec5 // vmovdqu $-1070(%rip), %ymm4 /* LCPI5_0(%rip) */ + QUAD $0xfffffbea2d6ffec5 // vmovdqu $-1046(%rip), %ymm5 /* LCPI5_1(%rip) */ + QUAD $0xfffffc02356ffec5 // vmovdqu $-1022(%rip), %ymm6 /* LCPI5_2(%rip) */ + LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 + QUAD $0xfffffc153d6ffac5 // vmovdqu $-1003(%rip), %xmm7 /* LCPI5_3(%rip) */ + QUAD $0xfffffc1d0d6f7ac5 // vmovdqu $-995(%rip), %xmm9 /* LCPI5_4(%rip) */ + QUAD $0xfffffc25156f7ac5 // vmovdqu $-987(%rip), %xmm10 /* LCPI5_5(%rip) */ + LONG $0x762141c4; BYTE $0xdb // vpcmpeqd %xmm11, %xmm11, %xmm11 + TESTB DX, DX + JE LBB5_37 + JMP LBB5_33 + +LBB5_36: + MOVQ BX, R14 + MOVQ R11, R15 + QUAD $0xfffffb89256ffec5 // vmovdqu $-1143(%rip), %ymm4 /* LCPI5_0(%rip) */ + QUAD $0xfffffba12d6ffec5 // vmovdqu $-1119(%rip), %ymm5 /* LCPI5_1(%rip) */ + QUAD $0xfffffbb9356ffec5 // vmovdqu $-1095(%rip), %ymm6 /* LCPI5_2(%rip) */ + LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 + TESTB DX, DX + JNE LBB5_33 + +LBB5_37: + TESTQ R15, R15 + MOVQ AX, R11 + JLE LBB5_44 + TESTQ R14, R14 + JLE LBB5_44 + XORL DX, DX + XORL CX, CX + +LBB5_40: + MOVBLZX 0(R13)(DX*1), BX + MOVQ BX, SI + SHLQ $4, SI + LONG $0x2e058d48; WORD $0x00a5; BYTE $0x00 // leaq $42286(%rip), %rax /* __SingleQuoteTab(%rip) */ + CMPQ 0(SI)(AX*1), $0 + JNE LBB5_61 + LEAQ 0(R15)(CX*1), AX + MOVB BX, 0(R12)(DX*1) + LEAQ -1(CX), SI + CMPQ AX, $2 + JL LBB5_43 + ADDQ R14, CX + ADDQ $1, DX + CMPQ CX, $1 + MOVQ SI, CX + JG LBB5_40 + +LBB5_43: + SUBQ SI, R13 + ADDQ SI, R15 + +LBB5_44: + TESTQ R15, R15 + MOVQ -48(BP), R14 + MOVQ $12884901889, R12 + JE LBB5_59 + NOTQ R13 + ADDQ R11, R13 + JMP LBB5_60 + +LBB5_46: + MOVQ R13, BX + MOVQ R14, CX + CMPQ CX, $8 + JB LBB5_48 + +LBB5_47: + MOVQ 0(BX), DX + MOVQ DX, 0(R12) + ADDQ $8, BX + ADDQ $8, R12 + ADDQ $-8, CX + +LBB5_48: + CMPQ CX, $4 + JB LBB5_49 + MOVL 0(BX), DX + MOVL DX, 0(R12) + ADDQ $4, BX + ADDQ $4, R12 + ADDQ $-4, CX + CMPQ CX, $2 + JAE LBB5_56 + +LBB5_50: + TESTQ CX, CX + JE LBB5_52 + +LBB5_51: + MOVB 0(BX), CX + MOVB CX, 0(R12) + +LBB5_52: SUBQ R11, R13 - JMP LBB5_68 + ADDQ R14, R13 + MOVQ SI, R14 + JMP LBB5_75 + +LBB5_49: + CMPQ CX, $2 + JB LBB5_50 LBB5_56: - MOVQ R13, AX - MOVQ CX, BX + MOVWLZX 0(BX), DX + MOVW DX, 0(R12) + ADDQ $2, BX + ADDQ $2, R12 + ADDQ $-2, CX + TESTQ CX, CX + JNE LBB5_51 + JMP LBB5_52 LBB5_57: - CMPQ BX, $4 - JB LBB5_58 - MOVL 0(AX), DX - MOVL DX, 0(SI) - ADDQ $4, AX - ADDQ $4, SI - ADDQ $-4, BX - CMPQ BX, $2 - JAE LBB5_83 + CMPL BX, $8 + MOVQ -56(BP), R15 + JB LBB5_69 + MOVQ CX, 0(R12) + LEAQ 8(R13), DX + ADDQ $8, R12 + LEAQ -8(BX), CX + JMP LBB5_70 LBB5_59: - TESTQ BX, BX - JE LBB5_61 + SUBQ R11, R13 LBB5_60: - MOVB 0(AX), AX - MOVB AX, 0(SI) + MOVQ -56(BP), R15 + JMP LBB5_76 LBB5_61: - SUBQ R11, CX - ADDQ R13, CX - NOTQ CX - MOVQ CX, R10 - JMP LBB5_69 - -LBB5_58: - CMPQ BX, $2 - JB LBB5_59 - -LBB5_83: - MOVWLZX 0(AX), DX - MOVW DX, 0(SI) - ADDQ $2, AX - ADDQ $2, SI - ADDQ $-2, BX - TESTQ BX, BX - JNE LBB5_60 - JMP LBB5_61 + SUBQ R11, R13 + SUBQ CX, R13 + MOVQ -56(BP), R15 + JMP LBB5_68 LBB5_62: - MOVQ R13, R10 - MOVQ BX, AX + MOVQ R13, CX + MOVQ R14, DX LBB5_63: - CMPQ AX, $4 + CMPQ DX, $4 JB LBB5_64 - MOVL 0(R10), CX - MOVL CX, 0(SI) - ADDQ $4, R10 - ADDQ $4, SI - ADDQ $-4, AX - CMPQ AX, $2 - JAE LBB5_85 + MOVL 0(CX), SI + MOVL SI, 0(R12) + ADDQ $4, CX + ADDQ $4, R12 + ADDQ $-4, DX + CMPQ DX, $2 + JAE LBB5_90 LBB5_65: - TESTQ AX, AX + TESTQ DX, DX JE LBB5_67 LBB5_66: - MOVB 0(R10), AX - MOVB AX, 0(SI) + MOVB 0(CX), CX + MOVB CX, 0(R12) LBB5_67: - SUBQ R11, R13 - ADDQ BX, R13 + ADDQ R13, R14 + NOTQ R14 + ADDQ R11, R14 + MOVQ R14, R13 LBB5_68: - MOVQ R13, R10 - -LBB5_69: - TESTQ R10, R10 - MOVQ -48(BP), DX - MOVQ $12884901889, R13 - JS LBB5_122 - ADDQ R10, R11 - ADDQ R10, R12 - CMPQ R14, R10 - JE LBB5_118 - SUBQ R10, R9 - SUBQ R14, R10 - JMP LBB5_73 - -LBB5_72: - INCQ R11 - ADDQ AX, R12 - INCQ R10 - JE LBB5_118 - -LBB5_73: - MOVBLZX 0(R11), SI - SHLQ $4, SI - MOVQ 0(R8)(SI*1), BX - TESTL BX, BX - JE LBB5_81 - MOVLQSX BX, AX - SUBQ AX, R9 - JL LBB5_119 - SHLQ $32, BX - LEAQ 8(R8)(SI*1), CX - CMPQ BX, R13 - JL LBB5_77 - MOVL 0(CX), CX - MOVL CX, 0(R12) - LEAQ 12(R8)(SI*1), CX - LEAQ 4(R12), R14 - LEAQ -4(AX), BX - CMPQ BX, $2 - JGE LBB5_78 - JMP LBB5_79 - -LBB5_77: - MOVQ R12, R14 - MOVQ AX, BX - CMPQ BX, $2 - JL LBB5_79 - -LBB5_78: - MOVWLZX 0(CX), SI - MOVW SI, 0(R14) - ADDQ $2, CX - ADDQ $2, R14 - ADDQ $-2, BX - -LBB5_79: - TESTQ BX, BX - JLE LBB5_72 - MOVBLZX 0(CX), CX - MOVB CX, 0(R14) - JMP LBB5_72 - -LBB5_81: - MOVQ R10, R14 - NEGQ R14 - TESTQ R10, R10 - JNE LBB5_3 - JMP LBB5_118 + MOVQ -48(BP), R14 + JMP LBB5_75 LBB5_64: - CMPQ AX, $2 + CMPQ DX, $2 JB LBB5_65 -LBB5_85: - MOVWLZX 0(R10), CX - MOVW CX, 0(SI) - ADDQ $2, R10 - ADDQ $2, SI - ADDQ $-2, AX - TESTQ AX, AX +LBB5_90: + MOVWLZX 0(CX), SI + MOVW SI, 0(R12) + ADDQ $2, CX + ADDQ $2, R12 + ADDQ $-2, DX + TESTQ DX, DX JNE LBB5_66 JMP LBB5_67 -LBB5_86: - LONG $0xe10d8d4c; WORD $0x00c4; BYTE $0x00 // leaq $50401(%rip), %r9 /* __EscTab(%rip) */ - QUAD $0xfffff930156f7ec5 // vmovdqu $-1744(%rip), %ymm10 /* LCPI5_0(%rip) */ - QUAD $0xfffff9480d6f7ec5 // vmovdqu $-1720(%rip), %ymm9 /* LCPI5_1(%rip) */ - QUAD $0xfffff9601d6f7ec5 // vmovdqu $-1696(%rip), %ymm11 /* LCPI5_2(%rip) */ - LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 - MOVQ DX, BX - MOVQ R14, R10 +LBB5_69: + MOVQ R13, DX + MOVQ BX, CX -LBB5_87: - CMPQ R10, $16 - JGE LBB5_88 +LBB5_70: + MOVQ -48(BP), R14 + CMPQ CX, $4 + JB LBB5_71 + MOVL 0(DX), SI + MOVL SI, 0(R12) + ADDQ $4, DX + ADDQ $4, R12 + ADDQ $-4, CX + CMPQ CX, $2 + JAE LBB5_92 + +LBB5_72: + TESTQ CX, CX + JE LBB5_74 + +LBB5_73: + MOVB 0(DX), CX + MOVB CX, 0(R12) + +LBB5_74: + SUBQ R11, R13 + ADDQ BX, R13 + +LBB5_75: + MOVQ $12884901889, R12 + +LBB5_76: + TESTQ R13, R13 + JS LBB5_128 + ADDQ R13, R9 + CMPQ R14, R13 + JE LBB5_124 + SUBQ R13, R10 + JMP LBB5_80 + +LBB5_79: + ADDQ CX, R9 + ADDQ $1, R13 + CMPQ R14, R13 + JE LBB5_124 + +LBB5_80: + MOVBLZX 0(R11)(R13*1), SI + SHLQ $4, SI + MOVQ 0(R8)(SI*1), BX + TESTL BX, BX + JE LBB5_88 + MOVLQSX BX, CX + SUBQ CX, R10 + JL LBB5_126 + SHLQ $32, BX + LEAQ 0(R8)(SI*1), DX + ADDQ $8, DX + CMPQ BX, R12 + JL LBB5_84 + MOVL 0(DX), AX + MOVL AX, 0(R9) + LEAQ 0(R8)(SI*1), DX + ADDQ $12, DX + LEAQ 4(R9), SI + LEAQ -4(CX), BX + CMPQ BX, $2 + JGE LBB5_85 + JMP LBB5_86 + +LBB5_84: + MOVQ R9, SI + MOVQ CX, BX + CMPQ BX, $2 + JL LBB5_86 + +LBB5_85: + MOVWLZX 0(DX), AX + MOVW AX, 0(SI) + ADDQ $2, DX + ADDQ $2, SI + ADDQ $-2, BX + +LBB5_86: + TESTQ BX, BX + JLE LBB5_79 + MOVBLZX 0(DX), AX + MOVB AX, 0(SI) + JMP LBB5_79 + +LBB5_88: + LEAQ 0(R11)(R13*1), CX + SUBQ R13, R14 + JNE LBB5_3 + JMP LBB5_124 + +LBB5_71: + CMPQ CX, $2 + JB LBB5_72 + +LBB5_92: + MOVWLZX 0(DX), SI + MOVW SI, 0(R12) + ADDQ $2, DX + ADDQ $2, R12 + ADDQ $-2, CX + TESTQ CX, CX + JNE LBB5_73 + JMP LBB5_74 LBB5_93: - CMPQ R10, $8 - JL LBB5_97 + LONG $0x940d8d4c; WORD $0x00c2; BYTE $0x00 // leaq $49812(%rip), %r9 /* __EscTab(%rip) */ + QUAD $0xfffff8a5156f7ec5 // vmovdqu $-1883(%rip), %ymm10 /* LCPI5_0(%rip) */ + QUAD $0xfffff8bd0d6f7ec5 // vmovdqu $-1859(%rip), %ymm9 /* LCPI5_1(%rip) */ + QUAD $0xfffff8d51d6f7ec5 // vmovdqu $-1835(%rip), %ymm11 /* LCPI5_2(%rip) */ + LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 + MOVQ DX, BX + MOVQ R14, SI LBB5_94: - MOVBLZX 0(DI), AX - MOVBLZX 0(AX)(R9*1), AX - MOVBLZX 1(DI), CX - MOVBLZX 0(CX)(R9*1), CX - ADDL CX, CX - ORL AX, CX - MOVBLZX 2(DI), AX - MOVBLZX 0(AX)(R9*1), SI - SHLL $2, SI - MOVBLZX 3(DI), AX - MOVBLZX 0(AX)(R9*1), AX - SHLL $3, AX - ORL SI, AX - ORL CX, AX - MOVQ 0(DI), CX - MOVQ CX, 0(BX) - TESTB AX, AX - JNE LBB5_115 - MOVBLZX 4(DI), AX - MOVBLZX 0(AX)(R9*1), AX - MOVBLZX 5(DI), CX - MOVBLZX 0(CX)(R9*1), CX - ADDL CX, CX - ORL AX, CX - MOVBLZX 6(DI), AX - MOVBLZX 0(AX)(R9*1), SI - SHLL $2, SI - MOVBLZX 7(DI), AX - MOVBLZX 0(AX)(R9*1), AX - SHLL $3, AX - ORL SI, AX - ORL CX, AX - TESTB AX, AX - JNE LBB5_116 - ADDQ $8, BX - ADDQ $8, DI - ADDQ $-8, R10 - -LBB5_97: - CMPQ R10, $4 - JL LBB5_100 - MOVBLZX 0(DI), AX - MOVBLZX 0(AX)(R9*1), AX - MOVBLZX 1(DI), CX - MOVBLZX 0(CX)(R9*1), CX - ADDL CX, CX - ORL AX, CX - MOVBLZX 2(DI), AX - MOVBLZX 0(AX)(R9*1), SI - SHLL $2, SI - MOVBLZX 3(DI), AX - MOVBLZX 0(AX)(R9*1), AX - SHLL $3, AX - ORL SI, AX - ORL CX, AX - MOVL 0(DI), CX - MOVL CX, 0(BX) - TESTB AX, AX - JNE LBB5_115 - ADDQ $4, BX - ADDQ $4, DI - ADDQ $-4, R10 + CMPQ SI, $16 + JGE LBB5_95 LBB5_100: - TESTQ R10, R10 - JLE LBB5_117 + CMPQ SI, $8 + JL LBB5_104 LBB5_101: + MOVBLZX 0(DI), AX + MOVBLZX 1(DI), CX + MOVB 0(CX)(R9*1), CX + ADDB CX, CX + ORB 0(AX)(R9*1), CX + MOVBLZX 2(DI), AX + MOVB 0(AX)(R9*1), R10 + SHLB $2, R10 + ORB CX, R10 + MOVBLZX 3(DI), AX + MOVB 0(AX)(R9*1), AX + SHLB $3, AX + ORB R10, AX + MOVQ 0(DI), CX + MOVQ CX, 0(BX) + JNE LBB5_121 + MOVBLZX 4(DI), AX + MOVBLZX 5(DI), CX + MOVB 0(CX)(R9*1), CX + ADDB CX, CX + ORB 0(AX)(R9*1), CX + MOVBLZX 6(DI), AX + MOVB 0(AX)(R9*1), R10 + SHLB $2, R10 + ORB CX, R10 + MOVBLZX 7(DI), AX + MOVB 0(AX)(R9*1), AX + SHLB $3, AX + ORB R10, AX + JNE LBB5_122 + ADDQ $8, BX + ADDQ $8, DI + ADDQ $-8, SI + +LBB5_104: + CMPQ SI, $4 + JL LBB5_107 + MOVBLZX 0(DI), AX + MOVBLZX 1(DI), CX + MOVB 0(CX)(R9*1), CX + ADDB CX, CX + ORB 0(AX)(R9*1), CX + MOVBLZX 2(DI), AX + MOVB 0(AX)(R9*1), R10 + SHLB $2, R10 + ORB CX, R10 + MOVBLZX 3(DI), AX + MOVB 0(AX)(R9*1), AX + SHLB $3, AX + ORB R10, AX + MOVL 0(DI), CX + MOVL CX, 0(BX) + JNE LBB5_121 + ADDQ $4, BX + ADDQ $4, DI + ADDQ $-4, SI + +LBB5_107: + TESTQ SI, SI + JLE LBB5_123 + +LBB5_108: MOVBLZX 0(DI), AX CMPB 0(AX)(R9*1), $0 - JNE LBB5_112 - INCQ DI + JNE LBB5_118 + ADDQ $1, DI MOVB AX, 0(BX) - INCQ BX - CMPQ R10, $1 - LEAQ -1(R10), R10 - JG LBB5_101 - JMP LBB5_117 + ADDQ $1, BX + LEAQ -1(SI), AX + CMPQ SI, $1 + MOVQ AX, SI + JG LBB5_108 + JMP LBB5_123 -LBB5_88: - CMPQ R10, $32 - JL LBB5_103 - LEAQ 32(R10), CX - XORL AX, AX +LBB5_95: + CMPQ SI, $32 + JL LBB5_110 + MOVQ SI, CX -LBB5_90: - LONG $0x046ffec5; BYTE $0x07 // vmovdqu (%rdi,%rax), %ymm0 +LBB5_97: + LONG $0x076ffec5 // vmovdqu (%rdi), %ymm0 LONG $0xc864adc5 // vpcmpgtb %ymm0, %ymm10, %ymm1 LONG $0xd074b5c5 // vpcmpeqb %ymm0, %ymm9, %ymm2 LONG $0xd874a5c5 // vpcmpeqb %ymm0, %ymm11, %ymm3 LONG $0xd2ebe5c5 // vpor %ymm2, %ymm3, %ymm2 - LONG $0x047ffec5; BYTE $0x03 // vmovdqu %ymm0, (%rbx,%rax) + LONG $0x037ffec5 // vmovdqu %ymm0, (%rbx) LONG $0x647dc1c4; BYTE $0xc0 // vpcmpgtb %ymm8, %ymm0, %ymm0 - LONG $0xc1dbfdc5 // vpand %ymm1, %ymm0, %ymm0 + LONG $0xc0dbf5c5 // vpand %ymm0, %ymm1, %ymm0 LONG $0xc0ebedc5 // vpor %ymm0, %ymm2, %ymm0 - LONG $0xf0d7fdc5 // vpmovmskb %ymm0, %esi - TESTL SI, SI - JNE LBB5_109 - ADDQ $32, AX - ADDQ $-32, CX + LONG $0xc0d7fdc5 // vpmovmskb %ymm0, %eax + TESTL AX, AX + JNE LBB5_116 + ADDQ $32, DI + ADDQ $32, BX + LEAQ -32(CX), SI CMPQ CX, $63 - JG LBB5_90 + MOVQ SI, CX + JG LBB5_97 WORD $0xf8c5; BYTE $0x77 // vzeroupper LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 - QUAD $0xfffff7de1d6f7ec5 // vmovdqu $-2082(%rip), %ymm11 /* LCPI5_2(%rip) */ - QUAD $0xfffff7b60d6f7ec5 // vmovdqu $-2122(%rip), %ymm9 /* LCPI5_1(%rip) */ - QUAD $0xfffff78e156f7ec5 // vmovdqu $-2162(%rip), %ymm10 /* LCPI5_0(%rip) */ - ADDQ AX, DI - SUBQ AX, R10 - ADDQ AX, BX - CMPQ CX, $48 - QUAD $0xfffff7d93d6ffac5 // vmovdqu $-2087(%rip), %xmm7 /* LCPI5_3(%rip) */ - QUAD $0xfffff7e12d6ffac5 // vmovdqu $-2079(%rip), %xmm5 /* LCPI5_4(%rip) */ - QUAD $0xfffff7e9256ffac5 // vmovdqu $-2071(%rip), %xmm4 /* LCPI5_5(%rip) */ + QUAD $0xfffff75f1d6f7ec5 // vmovdqu $-2209(%rip), %ymm11 /* LCPI5_2(%rip) */ + QUAD $0xfffff7370d6f7ec5 // vmovdqu $-2249(%rip), %ymm9 /* LCPI5_1(%rip) */ + QUAD $0xfffff70f156f7ec5 // vmovdqu $-2289(%rip), %ymm10 /* LCPI5_0(%rip) */ + LEAQ 32(SI), AX + CMPQ AX, $48 + QUAD $0xfffff75f3d6ffac5 // vmovdqu $-2209(%rip), %xmm7 /* LCPI5_3(%rip) */ + QUAD $0xfffff7672d6ffac5 // vmovdqu $-2201(%rip), %xmm5 /* LCPI5_4(%rip) */ + QUAD $0xfffff76f256ffac5 // vmovdqu $-2193(%rip), %xmm4 /* LCPI5_5(%rip) */ LONG $0xf676c9c5 // vpcmpeqd %xmm6, %xmm6, %xmm6 - JGE LBB5_104 - JMP LBB5_93 - -LBB5_103: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 - QUAD $0xfffff78e1d6f7ec5 // vmovdqu $-2162(%rip), %ymm11 /* LCPI5_2(%rip) */ - QUAD $0xfffff7660d6f7ec5 // vmovdqu $-2202(%rip), %ymm9 /* LCPI5_1(%rip) */ - QUAD $0xfffff73e156f7ec5 // vmovdqu $-2242(%rip), %ymm10 /* LCPI5_0(%rip) */ - QUAD $0xfffff7963d6ffac5 // vmovdqu $-2154(%rip), %xmm7 /* LCPI5_3(%rip) */ - QUAD $0xfffff79e2d6ffac5 // vmovdqu $-2146(%rip), %xmm5 /* LCPI5_4(%rip) */ - QUAD $0xfffff7a6256ffac5 // vmovdqu $-2138(%rip), %xmm4 /* LCPI5_5(%rip) */ - LONG $0xf676c9c5 // vpcmpeqd %xmm6, %xmm6, %xmm6 - -LBB5_104: - MOVL $16, CX - XORL AX, AX - -LBB5_105: - LONG $0x046ffac5; BYTE $0x07 // vmovdqu (%rdi,%rax), %xmm0 - LONG $0xc864c1c5 // vpcmpgtb %xmm0, %xmm7, %xmm1 - LONG $0xd574f9c5 // vpcmpeqb %xmm5, %xmm0, %xmm2 - LONG $0xdc74f9c5 // vpcmpeqb %xmm4, %xmm0, %xmm3 - LONG $0xd2ebe1c5 // vpor %xmm2, %xmm3, %xmm2 - LONG $0x047ffac5; BYTE $0x03 // vmovdqu %xmm0, (%rbx,%rax) - LONG $0xc664f9c5 // vpcmpgtb %xmm6, %xmm0, %xmm0 - LONG $0xc1dbf9c5 // vpand %xmm1, %xmm0, %xmm0 - LONG $0xc0ebe9c5 // vpor %xmm0, %xmm2, %xmm0 - LONG $0xf0d7f9c5 // vpmovmskb %xmm0, %esi - TESTW SI, SI - JNE LBB5_108 - ADDQ $16, AX - LEAQ -16(R10)(CX*1), SI - ADDQ $-16, CX - CMPQ SI, $31 - JG LBB5_105 - ADDQ AX, DI - SUBQ AX, R10 - ADDQ AX, BX - CMPQ R10, $8 - JGE LBB5_94 - JMP LBB5_97 - -LBB5_108: - MOVWLZX SI, CX - BSFL CX, CX - JMP LBB5_110 - -LBB5_109: - BSFL SI, CX + JGE LBB5_111 + JMP LBB5_100 LBB5_110: - ADDQ CX, DI - ADDQ AX, DI - SUBQ CX, R10 - SUBQ AX, R10 - ADDQ CX, BX + WORD $0xf8c5; BYTE $0x77 // vzeroupper + LONG $0x763d41c4; BYTE $0xc0 // vpcmpeqd %ymm8, %ymm8, %ymm8 + QUAD $0xfffff7141d6f7ec5 // vmovdqu $-2284(%rip), %ymm11 /* LCPI5_2(%rip) */ + QUAD $0xfffff6ec0d6f7ec5 // vmovdqu $-2324(%rip), %ymm9 /* LCPI5_1(%rip) */ + QUAD $0xfffff6c4156f7ec5 // vmovdqu $-2364(%rip), %ymm10 /* LCPI5_0(%rip) */ + QUAD $0xfffff71c3d6ffac5 // vmovdqu $-2276(%rip), %xmm7 /* LCPI5_3(%rip) */ + QUAD $0xfffff7242d6ffac5 // vmovdqu $-2268(%rip), %xmm5 /* LCPI5_4(%rip) */ + QUAD $0xfffff72c256ffac5 // vmovdqu $-2260(%rip), %xmm4 /* LCPI5_5(%rip) */ + LONG $0xf676c9c5 // vpcmpeqd %xmm6, %xmm6, %xmm6 LBB5_111: - ADDQ AX, BX + MOVQ SI, CX + NEGQ CX + ADDQ $16, SI LBB5_112: + LONG $0x076ffac5 // vmovdqu (%rdi), %xmm0 + LONG $0xc864c1c5 // vpcmpgtb %xmm0, %xmm7, %xmm1 + LONG $0xd574f9c5 // vpcmpeqb %xmm5, %xmm0, %xmm2 + LONG $0xdc74f9c5 // vpcmpeqb %xmm4, %xmm0, %xmm3 + LONG $0xd2ebe1c5 // vpor %xmm2, %xmm3, %xmm2 + LONG $0x037ffac5 // vmovdqu %xmm0, (%rbx) + LONG $0xc664f9c5 // vpcmpgtb %xmm6, %xmm0, %xmm0 + LONG $0xc0dbf1c5 // vpand %xmm0, %xmm1, %xmm0 + LONG $0xc0ebe9c5 // vpor %xmm0, %xmm2, %xmm0 + LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax + TESTL AX, AX + JNE LBB5_115 + ADDQ $16, DI + ADDQ $16, BX + ADDQ $16, CX + ADDQ $-16, SI + CMPQ SI, $31 + JG LBB5_112 + NEGQ CX + MOVQ CX, SI + CMPQ SI, $8 + JGE LBB5_101 + JMP LBB5_104 + +LBB5_115: + BSFW AX, AX + MOVWLZX AX, AX + ADDQ AX, DI + ADDQ AX, CX + NEGQ CX + JMP LBB5_117 + +LBB5_116: + BSFL AX, AX + ADDQ AX, DI + SUBQ AX, CX + +LBB5_117: + ADDQ AX, BX + MOVQ CX, SI + +LBB5_118: MOVB 0(DI), AX -LBB5_113: +LBB5_119: MOVQ BX, CX MOVBLZX AX, AX SHLQ $4, AX @@ -2300,52 +2220,61 @@ LBB5_113: MOVQ 8(R8)(AX*1), AX MOVQ AX, 0(CX) ADDQ CX, BX - CMPQ R10, $2 - JL LBB5_117 - DECQ R10 + CMPQ SI, $2 + JL LBB5_123 MOVBLZX 1(DI), AX - INCQ DI + ADDQ $1, DI + ADDQ $-1, SI CMPB 0(AX)(R9*1), $0 - JNE LBB5_113 - JMP LBB5_87 - -LBB5_115: - BSFL AX, AX - ADDQ AX, DI - SUBQ AX, R10 - JMP LBB5_111 - -LBB5_116: - BSFL AX, AX - LEAQ 4(AX), CX - LEAQ 4(DI)(AX*1), DI - SUBQ CX, R10 - LEAQ 4(BX)(AX*1), BX - JMP LBB5_112 - -LBB5_117: - SUBQ DX, BX - MOVQ BX, 0(R15) - JMP LBB5_121 - -LBB5_118: - SUBQ DX, R12 - MOVQ R12, 0(R15) - SUBQ DI, R11 - JMP LBB5_120 - -LBB5_119: - SUBQ DX, R12 - MOVQ R12, 0(R15) - NOTQ R11 - ADDQ DI, R11 - -LBB5_120: - MOVQ R11, R14 + JNE LBB5_119 + JMP LBB5_94 LBB5_121: + MOVBLZX AX, AX + BSFL AX, AX + ADDQ AX, DI + SUBQ AX, SI + ADDQ AX, BX + JMP LBB5_118 + +LBB5_122: + MOVBLZX AX, AX + BSFL AX, AX + LEAQ 4(AX), CX + ADDQ AX, DI + ADDQ $4, DI + SUBQ CX, SI + ADDQ AX, BX + ADDQ $4, BX + JMP LBB5_118 + +LBB5_123: + SUBQ DX, BX + MOVQ BX, 0(R15) + JMP LBB5_127 + +LBB5_124: + ADDQ R13, R11 + MOVQ -64(BP), DX + +LBB5_125: + SUBQ DX, R9 + MOVQ R9, 0(R15) + SUBQ DI, R11 + MOVQ R11, R14 + JMP LBB5_127 + +LBB5_126: + SUBQ -64(BP), R9 + MOVQ R9, 0(R15) + SUBQ R11, DI + NOTQ R13 + ADDQ DI, R13 + MOVQ R13, R14 + +LBB5_127: MOVQ R14, AX - ADDQ $8, SP + ADDQ $24, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 WORD $0x5d41 // popq %r13 @@ -2355,15 +2284,16 @@ LBB5_121: WORD $0xf8c5; BYTE $0x77 // vzeroupper RET -LBB5_122: - SUBQ DX, R12 - NOTQ R10 - ADDQ R10, R12 - MOVQ R12, 0(R15) - SUBQ DI, R11 - ADDQ R10, R11 - NOTQ R11 - JMP LBB5_120 +LBB5_128: + MOVQ -64(BP), AX + ADDQ R13, AX + NOTQ AX + ADDQ R9, AX + MOVQ AX, 0(R15) + SUBQ R11, DI + ADDQ R13, DI + MOVQ DI, R14 + JMP LBB5_127 LCPI6_0: QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' @@ -2382,26 +2312,670 @@ _unquote: BYTE $0x53 // pushq %rbx SUBQ $24, SP TESTQ SI, SI - JE LBB6_2 + JE LBB6_125 MOVQ CX, -48(BP) - MOVL R8, R10 - ANDL $1, R10 - QUAD $0xffffffa70d6ffec5 // vmovdqu $-89(%rip), %ymm1 /* LCPI6_0(%rip) */ - QUAD $0xffffffbf156ffac5 // vmovdqu $-65(%rip), %xmm2 /* LCPI6_1(%rip) */ - MOVQ DI, R9 + MOVQ R8, AX + MOVQ R8, -64(BP) + MOVL R8, R9 + ANDL $1, R9 + QUAD $0xffffff9c0d6ffec5 // vmovdqu $-100(%rip), %ymm1 /* LCPI6_0(%rip) */ + QUAD $0xffffffb4156ffac5 // vmovdqu $-76(%rip), %xmm2 /* LCPI6_1(%rip) */ + MOVQ DI, R11 MOVQ SI, R13 - MOVQ DX, AX - JMP LBB6_8 + MOVQ DX, R8 + +LBB6_22: + CMPB 0(R11), $92 + JNE LBB6_24 + XORL R14, R14 + JMP LBB6_41 + +LBB6_24: + MOVQ R13, R15 + MOVQ R8, AX + MOVQ R11, R14 + CMPQ R13, $32 + JL LBB6_29 + XORL AX, AX + MOVQ R13, BX + +LBB6_26: + LONG $0x6f7ec1c4; WORD $0x0304 // vmovdqu (%r11,%rax), %ymm0 + LONG $0x7f7ec1c4; WORD $0x0004 // vmovdqu %ymm0, (%r8,%rax) + LONG $0xc174fdc5 // vpcmpeqb %ymm1, %ymm0, %ymm0 + LONG $0xc8d7fdc5 // vpmovmskb %ymm0, %ecx + TESTL CX, CX + JNE LBB6_39 + LEAQ -32(BX), R15 + ADDQ $32, AX + CMPQ BX, $63 + MOVQ R15, BX + JG LBB6_26 + LEAQ 0(R11)(AX*1), R14 + ADDQ R8, AX + +LBB6_29: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + CMPQ R15, $16 + JL LBB6_33 + MOVQ R11, R12 + SUBQ R14, R12 + QUAD $0xffffff1e0d6ffec5 // vmovdqu $-226(%rip), %ymm1 /* LCPI6_0(%rip) */ + QUAD $0xffffff36156ffac5 // vmovdqu $-202(%rip), %xmm2 /* LCPI6_1(%rip) */ + +LBB6_31: + LONG $0x6f7ac1c4; BYTE $0x06 // vmovdqu (%r14), %xmm0 + LONG $0x007ffac5 // vmovdqu %xmm0, (%rax) + LONG $0xc274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm0 + LONG $0xd8d7f9c5 // vpmovmskb %xmm0, %ebx + TESTL BX, BX + JNE LBB6_40 + ADDQ $16, R14 + ADDQ $16, AX + LEAQ -16(R15), R10 + ADDQ $-16, R12 + CMPQ R15, $31 + MOVQ R10, R15 + JG LBB6_31 + JMP LBB6_34 + +LBB6_33: + MOVQ R15, R10 + QUAD $0xfffffedb0d6ffec5 // vmovdqu $-293(%rip), %ymm1 /* LCPI6_0(%rip) */ + QUAD $0xfffffef3156ffac5 // vmovdqu $-269(%rip), %xmm2 /* LCPI6_1(%rip) */ + +LBB6_34: + TESTQ R10, R10 + JE LBB6_126 + XORL BX, BX + +LBB6_36: + MOVBLZX 0(R14)(BX*1), CX + CMPB CX, $92 + JE LBB6_38 + MOVB CX, 0(AX)(BX*1) + ADDQ $1, BX + CMPQ R10, BX + JNE LBB6_36 + JMP LBB6_126 + +LBB6_38: + SUBQ R11, R14 + ADDQ BX, R14 + CMPQ R14, $-1 + JNE LBB6_41 + JMP LBB6_126 + +LBB6_39: + BSFL CX, R14 + ADDQ AX, R14 + CMPQ R14, $-1 + JNE LBB6_41 + JMP LBB6_126 + +LBB6_40: + BSFW BX, AX + MOVWLZX AX, R14 + SUBQ R12, R14 + CMPQ R14, $-1 + JE LBB6_126 + +LBB6_41: + LEAQ 2(R14), AX + SUBQ AX, R13 + JS LBB6_164 + ADDQ R14, R11 + ADDQ $2, R11 + TESTQ R9, R9 + JNE LBB6_55 + +LBB6_43: + ADDQ R14, R8 + MOVBLZX -1(R11), AX + LONG $0x8f0d8d48; WORD $0x00be; BYTE $0x00 // leaq $48783(%rip), %rcx /* __UnquoteTab(%rip) */ + MOVB 0(AX)(CX*1), AX + CMPB AX, $-1 + JE LBB6_46 + TESTB AX, AX + JE LBB6_142 + MOVB AX, 0(R8) + ADDQ $1, R8 + TESTQ R13, R13 + JNE LBB6_22 + JMP LBB6_141 + +LBB6_46: + CMPQ R13, $3 + JLE LBB6_164 + MOVL 0(R11), R14 + MOVL R14, BX + NOTL BX + LEAL -808464432(R14), AX + ANDL $-2139062144, BX + TESTL AX, BX + JNE LBB6_128 + LEAL 421075225(R14), AX + ORL R14, AX + TESTL $-2139062144, AX + JNE LBB6_128 + MOVL R14, AX + ANDL $2139062143, AX + MOVL $-1061109568, CX + SUBL AX, CX + MOVQ DX, R15 + LEAL 1179010630(AX), DX + ANDL BX, CX + TESTL DX, CX + JNE LBB6_128 + MOVL $-522133280, CX + SUBL AX, CX + ADDL $960051513, AX + ANDL CX, BX + TESTL AX, BX + JNE LBB6_128 + MOVQ R15, DX + BSWAPL R14 + MOVL R14, AX + SHRL $4, AX + NOTL AX + ANDL $16843009, AX + LEAL 0(AX)(AX*8), AX + ANDL $252645135, R14 + ADDL AX, R14 + MOVL R14, R10 + SHRL $4, R10 + ORL R14, R10 + MOVL R10, AX + SHRL $8, AX + ANDL $65280, AX + MOVBLZX R10, R14 + ORL AX, R14 + LEAQ 4(R11), R12 + LEAQ -4(R13), CX + CMPL R14, $128 + JB LBB6_63 + TESTQ R9, R9 + JNE LBB6_65 + TESTB $2, -64(BP) + JE LBB6_86 + XORL BX, BX LBB6_2: + CMPL R14, $2048 + JB LBB6_84 + MOVL R14, AX + ANDL $-2048, AX + CMPL AX, $55296 + JNE LBB6_81 + CMPQ CX, $6 + JL LBB6_15 + CMPL R14, $56319 + JA LBB6_15 + CMPB 4(R11)(BX*1), $92 + JNE LBB6_15 + CMPB 5(R11)(BX*1), $117 + JNE LBB6_15 + MOVL 6(R11)(BX*1), R12 + MOVL R12, R10 + NOTL R10 + LEAL -808464432(R12), AX + ANDL $-2139062144, R10 + TESTL AX, R10 + JNE LBB6_143 + LEAL 421075225(R12), AX + ORL R12, AX + TESTL $-2139062144, AX + JNE LBB6_143 + MOVL R12, AX + ANDL $2139062143, AX + MOVL $-1061109568, DX + SUBL AX, DX + MOVL DX, -52(BP) + LEAL 1179010630(AX), DX + MOVL DX, -56(BP) + MOVL -52(BP), DX + ANDL R10, DX + TESTL DX, -56(BP) + JNE LBB6_143 + MOVL $-522133280, DX + SUBL AX, DX + ADDL $960051513, AX + ANDL DX, R10 + TESTL AX, R10 + JNE LBB6_143 + BSWAPL R12 + MOVL R12, AX + SHRL $4, AX + NOTL AX + ANDL $16843009, AX + LEAL 0(AX)(AX*8), AX + ANDL $252645135, R12 + ADDL AX, R12 + MOVL R12, AX + SHRL $4, AX + ORL R12, AX + MOVL AX, DX + SHRL $8, DX + ANDL $65280, DX + MOVBLZX AX, R10 + ORL DX, R10 + ANDL $16515072, AX + CMPL AX, $14417920 + JE LBB6_18 + MOVQ R15, DX + MOVW $-16401, 0(R8) + MOVB $-67, 2(R8) + ADDQ $3, R8 + ADDQ $6, BX + ADDQ $-6, CX + MOVL R10, R14 + CMPL R10, $127 + JA LBB6_2 + +LBB6_14: + LEAQ 0(R11)(BX*1), R12 + ADDQ $4, R12 + JMP LBB6_64 + +LBB6_55: + TESTL R13, R13 + JE LBB6_164 + CMPB -1(R11), $92 + JNE LBB6_156 + CMPB 0(R11), $92 + JNE LBB6_62 + CMPL R13, $1 + JLE LBB6_164 + MOVB 1(R11), AX + CMPB AX, $34 + JE LBB6_61 + CMPB AX, $92 + JNE LBB6_158 + +LBB6_61: + ADDQ $1, R11 + ADDQ $-1, R13 + +LBB6_62: + ADDQ $1, R11 + ADDQ $-1, R13 + JMP LBB6_43 + +LBB6_63: + MOVL R14, R10 + +LBB6_64: + MOVB R10, 0(R8) + ADDQ $1, R8 + MOVQ CX, R13 + MOVQ R12, R11 + TESTQ R13, R13 + JNE LBB6_22 + JMP LBB6_141 + +LBB6_65: + TESTB $2, -64(BP) + JE LBB6_98 + XORL BX, BX + +LBB6_67: + CMPL R14, $2048 + JB LBB6_84 + MOVL R14, AX + ANDL $-2048, AX + CMPL AX, $55296 + JNE LBB6_81 + TESTQ CX, CX + JLE LBB6_162 + CMPB 4(R11)(BX*1), $92 + JNE LBB6_107 + CMPQ CX, $7 + JL LBB6_105 + CMPL R14, $56319 + JA LBB6_105 + CMPB 5(R11)(BX*1), $92 + JNE LBB6_105 + CMPB 6(R11)(BX*1), $117 + JNE LBB6_105 + MOVL 7(R11)(BX*1), R12 + MOVL R12, R10 + NOTL R10 + LEAL -808464432(R12), AX + ANDL $-2139062144, R10 + TESTL AX, R10 + JNE LBB6_159 + LEAL 421075225(R12), AX + ORL R12, AX + TESTL $-2139062144, AX + JNE LBB6_159 + MOVL R12, AX + ANDL $2139062143, AX + MOVL $-1061109568, DX + SUBL AX, DX + MOVL DX, -52(BP) + LEAL 1179010630(AX), DX + MOVL DX, -56(BP) + MOVL -52(BP), DX + ANDL R10, DX + TESTL DX, -56(BP) + JNE LBB6_159 + MOVL $-522133280, DX + SUBL AX, DX + ADDL $960051513, AX + ANDL DX, R10 + TESTL AX, R10 + JNE LBB6_159 + BSWAPL R12 + MOVL R12, AX + SHRL $4, AX + NOTL AX + ANDL $16843009, AX + LEAL 0(AX)(AX*8), AX + ANDL $252645135, R12 + ADDL AX, R12 + MOVL R12, AX + SHRL $4, AX + ORL R12, AX + MOVL AX, DX + SHRL $8, DX + ANDL $65280, DX + MOVBLZX AX, R10 + ORL DX, R10 + ANDL $16515072, AX + CMPL AX, $14417920 + JE LBB6_108 + MOVW $-16401, 0(R8) + MOVB $-67, 2(R8) + ADDQ $3, R8 + ADDQ $7, BX + ADDQ $-7, CX + MOVL R10, R14 + CMPL R10, $128 + MOVQ R15, DX + JAE LBB6_67 + JMP LBB6_14 + +LBB6_81: + LEAQ 0(R11)(BX*1), R12 + ADDQ $4, R12 + +LBB6_82: + MOVL R14, AX + SHRL $12, AX + ORB $-32, AX + MOVB AX, 0(R8) + MOVL R14, AX + SHRL $6, AX + ANDB $63, AX + ORB $-128, AX + MOVB AX, 1(R8) + ANDB $63, R14 + ORB $-128, R14 + MOVB R14, 2(R8) + ADDQ $3, R8 + MOVQ CX, R13 + MOVQ R12, R11 + TESTQ R13, R13 + JNE LBB6_22 + JMP LBB6_141 + +LBB6_84: + LEAQ 0(R11)(BX*1), R12 + ADDQ $4, R12 + +LBB6_85: + MOVL R14, AX + SHRL $6, AX + ORB $-64, AX + MOVB AX, 0(R8) + ANDB $63, R14 + ORB $-128, R14 + MOVB R14, 1(R8) + ADDQ $2, R8 + MOVQ CX, R13 + MOVQ R12, R11 + TESTQ R13, R13 + JNE LBB6_22 + JMP LBB6_141 + +LBB6_86: + CMPL R14, $2048 + JB LBB6_85 + ANDL $16252928, R10 + CMPL R10, $14155776 + JNE LBB6_82 + CMPQ R13, $10 + JL LBB6_101 + CMPL R14, $56319 + JA LBB6_101 + CMPB 0(R12), $92 + JNE LBB6_101 + CMPB 5(R11), $117 + JNE LBB6_101 + MOVL 6(R11), R10 + MOVL R10, BX + NOTL BX + LEAL -808464432(R10), AX + ANDL $-2139062144, BX + TESTL AX, BX + JNE LBB6_144 + LEAL 421075225(R10), AX + ORL R10, AX + TESTL $-2139062144, AX + JNE LBB6_144 + MOVL R10, AX + ANDL $2139062143, AX + MOVL $-1061109568, CX + SUBL AX, CX + LEAL 1179010630(AX), DX + ANDL BX, CX + TESTL DX, CX + JNE LBB6_144 + MOVL $-522133280, CX + SUBL AX, CX + ADDL $960051513, AX + ANDL CX, BX + TESTL AX, BX + JNE LBB6_144 + BSWAPL R10 + MOVL R10, AX + SHRL $4, AX + NOTL AX + ANDL $16843009, AX + LEAL 0(AX)(AX*8), AX + ANDL $252645135, R10 + ADDL AX, R10 + MOVL R10, AX + SHRL $4, AX + ORL R10, AX + ADDQ $10, R11 + MOVL AX, CX + ANDL $16515072, CX + CMPL CX, $14417920 + JNE LBB6_124 + MOVL AX, CX + SHRL $8, CX + ANDL $65280, CX + MOVBLZX AX, R10 + ORL CX, R10 + JMP LBB6_19 + +LBB6_15: + ADDQ BX, R11 + ADDQ $4, R11 + +LBB6_16: + TESTB $2, -64(BP) + JE LBB6_160 + +LBB6_17: + MOVW $-16401, 0(R8) + MOVB $-67, 2(R8) + ADDQ $3, R8 + MOVQ CX, R13 + JMP LBB6_21 + +LBB6_18: + ADDQ BX, R11 + ADDQ $10, R11 + SUBQ BX, R13 + +LBB6_19: + ADDQ $-10, R13 + +LBB6_20: + SHLL $10, R14 + MOVL R10, AX + ADDL R14, AX + LEAL 0(R10)(R14*1), CX + ADDL $-56613888, CX + MOVL CX, DX + SHRL $18, DX + ORB $-16, DX + MOVB DX, 0(R8) + MOVL CX, DX + SHRL $12, DX + ANDB $63, DX + ORB $-128, DX + MOVB DX, 1(R8) + SHRL $6, CX + ANDB $63, CX + ORB $-128, CX + MOVB CX, 2(R8) + ANDB $63, AX + ORB $-128, AX + MOVB AX, 3(R8) + ADDQ $4, R8 + +LBB6_21: + MOVQ R15, DX + TESTQ R13, R13 + JNE LBB6_22 + JMP LBB6_141 + +LBB6_98: + CMPL R14, $2048 + JB LBB6_110 + ANDL $16252928, R10 + CMPL R10, $14155776 + JE LBB6_111 + MOVQ R15, DX + JMP LBB6_82 + +LBB6_101: + MOVQ R12, R11 + JMP LBB6_16 + +LBB6_105: + LEAQ 0(R11)(BX*1), R12 + ADDQ $5, R12 + +LBB6_106: + ADDQ $-1, CX + MOVQ R12, R11 + JMP LBB6_16 + +LBB6_107: + ADDQ BX, R11 + ADDQ $4, R11 + TESTB $2, -64(BP) + JNE LBB6_17 + JMP LBB6_124 + +LBB6_108: + ADDQ BX, R11 + ADDQ $11, R11 + SUBQ BX, R13 + +LBB6_109: + ADDQ $-11, R13 + JMP LBB6_20 + +LBB6_110: + MOVQ R15, DX + JMP LBB6_85 + +LBB6_111: + CMPQ R13, $5 + JL LBB6_162 + CMPB 0(R12), $92 + JNE LBB6_123 + LEAQ 5(R11), R12 + CMPQ R13, $11 + JL LBB6_106 + CMPL R14, $56319 + JA LBB6_106 + CMPB 0(R12), $92 + JNE LBB6_106 + CMPB 6(R11), $117 + JNE LBB6_106 + MOVL 7(R11), R10 + MOVL R10, BX + NOTL BX + LEAL -808464432(R10), AX + ANDL $-2139062144, BX + TESTL AX, BX + JNE LBB6_144 + LEAL 421075225(R10), AX + ORL R10, AX + TESTL $-2139062144, AX + JNE LBB6_144 + MOVL R10, AX + ANDL $2139062143, AX + MOVL $-1061109568, CX + SUBL AX, CX + LEAL 1179010630(AX), DX + ANDL BX, CX + TESTL DX, CX + JNE LBB6_144 + MOVL $-522133280, CX + SUBL AX, CX + ADDL $960051513, AX + ANDL CX, BX + TESTL AX, BX + JNE LBB6_144 + BSWAPL R10 + MOVL R10, AX + SHRL $4, AX + NOTL AX + ANDL $16843009, AX + LEAL 0(AX)(AX*8), AX + ANDL $252645135, R10 + ADDL AX, R10 + MOVL R10, AX + SHRL $4, AX + ORL R10, AX + ADDQ $11, R11 + MOVL AX, CX + ANDL $16515072, CX + CMPL CX, $14417920 + JNE LBB6_124 + MOVL AX, CX + SHRL $8, CX + ANDL $65280, CX + MOVBLZX AX, R10 + ORL CX, R10 + JMP LBB6_109 + +LBB6_123: + MOVQ R12, R11 + TESTB $2, -64(BP) + JNE LBB6_17 + +LBB6_124: + SUBQ DI, R11 + JMP LBB6_161 + +LBB6_125: XORL R13, R13 - MOVQ DX, AX + MOVQ DX, R8 -LBB6_3: - ADDQ R13, AX - SUBQ DX, AX +LBB6_126: + ADDQ R13, R8 + SUBQ DX, R8 -LBB6_4: +LBB6_127: + MOVQ R8, AX ADDQ $24, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 @@ -2412,663 +2986,212 @@ LBB6_4: WORD $0xf8c5; BYTE $0x77 // vzeroupper RET -LBB6_5: - LEAQ 4(R9)(R12*1), R9 - MOVL R15, CX - SHRL $6, CX - ORB $-64, CX - MOVB CX, 0(AX) - ANDB $63, R15 - ORB $-128, R15 - MOVB R15, 1(AX) - ADDQ $2, AX +LBB6_128: + MOVQ R11, AX + SUBQ DI, AX + MOVQ -48(BP), SI + MOVQ AX, 0(SI) + MOVB 0(R11), CX + LEAL -48(CX), DX + CMPB DX, $10 + JB LBB6_131 + MOVQ $-2, R8 + ADDB $-65, CX + CMPB CX, $37 + JA LBB6_127 + MOVBLZX CX, CX + MOVQ $270582939711, DX + BTQ CX, DX + JAE LBB6_127 -LBB6_6: - MOVQ R14, R13 +LBB6_131: + LEAQ 1(AX), CX + MOVQ CX, 0(SI) + MOVB 1(R11), CX + LEAL -48(CX), DX + CMPB DX, $9 + JBE LBB6_134 + MOVQ $-2, R8 + ADDB $-65, CX + CMPB CX, $37 + JA LBB6_127 + MOVBLZX CX, CX + MOVQ $270582939711, DX + BTQ CX, DX + JAE LBB6_127 -LBB6_7: - TESTQ R13, R13 - JE LBB6_101 +LBB6_134: + LEAQ 2(AX), CX + MOVQ CX, 0(SI) + MOVB 2(R11), CX + LEAL -48(CX), DX + CMPB DX, $10 + JB LBB6_137 + MOVQ $-2, R8 + ADDB $-65, CX + CMPB CX, $37 + JA LBB6_127 + MOVBLZX CX, CX + MOVQ $270582939711, DX + BTQ CX, DX + JAE LBB6_127 -LBB6_8: - CMPB 0(R9), $92 - JNE LBB6_10 - XORL BX, BX - JMP LBB6_24 +LBB6_137: + LEAQ 3(AX), CX + MOVQ CX, 0(SI) + MOVB 3(R11), CX + LEAL -48(CX), DX + CMPB DX, $10 + JB LBB6_140 + MOVQ $-2, R8 + ADDB $-65, CX + CMPB CX, $37 + JA LBB6_127 + MOVBLZX CX, CX + MOVQ $270582939711, DX + BTQ CX, DX + JAE LBB6_127 -LBB6_10: - MOVQ R13, R12 - MOVQ AX, R15 - MOVQ R9, R14 - CMPQ R13, $32 - JL LBB6_14 - MOVQ R9, R14 - MOVQ AX, R15 - MOVQ R13, R12 - -LBB6_12: - LONG $0x6f7ec1c4; BYTE $0x06 // vmovdqu (%r14), %ymm0 - LONG $0x7f7ec1c4; BYTE $0x07 // vmovdqu %ymm0, (%r15) - LONG $0xc174fdc5 // vpcmpeqb %ymm1, %ymm0, %ymm0 - LONG $0xd8d7fdc5 // vpmovmskb %ymm0, %ebx - TESTL BX, BX - JNE LBB6_22 - ADDQ $32, R14 - ADDQ $32, R15 - CMPQ R12, $63 - LEAQ -32(R12), R12 - JG LBB6_12 - -LBB6_14: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - QUAD $0xffffff0d156ffac5 // vmovdqu $-243(%rip), %xmm2 /* LCPI6_1(%rip) */ - CMPQ R12, $16 - JL LBB6_17 - -LBB6_15: - LONG $0x6f7ac1c4; BYTE $0x06 // vmovdqu (%r14), %xmm0 - LONG $0x7f7ac1c4; BYTE $0x07 // vmovdqu %xmm0, (%r15) - LONG $0xc274f9c5 // vpcmpeqb %xmm2, %xmm0, %xmm0 - LONG $0xd8d7f9c5 // vpmovmskb %xmm0, %ebx - TESTW BX, BX - JNE LBB6_23 - ADDQ $16, R14 - ADDQ $16, R15 - CMPQ R12, $31 - LEAQ -16(R12), R12 - JG LBB6_15 - -LBB6_17: - TESTQ R12, R12 - JE LBB6_3 - XORL BX, BX - QUAD $0xfffffeaa0d6ffec5 // vmovdqu $-342(%rip), %ymm1 /* LCPI6_0(%rip) */ - -LBB6_19: - MOVBLZX 0(R14)(BX*1), R11 - CMPB R11, $92 - JE LBB6_21 - MOVB R11, 0(R15)(BX*1) - INCQ BX - CMPQ R12, BX - JNE LBB6_19 - JMP LBB6_3 - -LBB6_21: - ADDQ BX, R14 - SUBQ R9, R14 - MOVQ R14, BX - CMPQ BX, $-1 - JNE LBB6_24 - JMP LBB6_3 - -LBB6_22: - MOVLQSX BX, BX - SUBQ R9, R14 - BSFQ BX, BX - ADDQ R14, BX - CMPQ BX, $-1 - JNE LBB6_24 - JMP LBB6_3 - -LBB6_23: - MOVWLZX BX, BX - SUBQ R9, R14 - BSFQ BX, BX - ADDQ R14, BX - QUAD $0xfffffe4d0d6ffec5 // vmovdqu $-435(%rip), %ymm1 /* LCPI6_0(%rip) */ - CMPQ BX, $-1 - JE LBB6_3 - -LBB6_24: - LEAQ 2(BX), CX - SUBQ CX, R13 - JS LBB6_99 - LEAQ 2(R9)(BX*1), R9 - TESTQ R10, R10 - JNE LBB6_67 - -LBB6_26: - ADDQ BX, AX - MOVBLZX -1(R9), CX - LONG $0xc01d8d48; WORD $0x00c0; BYTE $0x00 // leaq $49344(%rip), %rbx /* __UnquoteTab(%rip) */ - MOVB 0(CX)(BX*1), BX - CMPB BX, $-1 - JE LBB6_29 - TESTB BX, BX - JE LBB6_100 - MOVB BX, 0(AX) - INCQ AX - JMP LBB6_7 - -LBB6_29: - CMPQ R13, $3 - JLE LBB6_99 - MOVL 0(R9), R14 - MOVL R14, R15 - NOTL R15 - LEAL -808464432(R14), CX - ANDL $-2139062144, R15 - TESTL CX, R15 - JNE LBB6_90 - LEAL 421075225(R14), CX - ORL R14, CX - TESTL $-2139062144, CX - JNE LBB6_90 - MOVL R14, BX - ANDL $2139062143, BX - MOVL $-1061109568, CX - SUBL BX, CX - LEAL 1179010630(BX), R11 - ANDL R15, CX - TESTL R11, CX - JNE LBB6_90 - MOVL $-522133280, CX - SUBL BX, CX - ADDL $960051513, BX - ANDL CX, R15 - TESTL BX, R15 - JNE LBB6_90 - BSWAPL R14 - MOVL R14, CX - SHRL $4, CX - NOTL CX - ANDL $16843009, CX - LEAL 0(CX)(CX*8), CX - ANDL $252645135, R14 - ADDL CX, R14 - MOVL R14, CX - SHRL $4, CX - ORL R14, CX - MOVBLZX CX, R15 - SHRL $8, CX - ANDL $65280, CX - ORL CX, R15 - LEAQ -4(R13), R14 - CMPL R15, $128 - JB LBB6_75 - XORL R12, R12 - TESTQ R10, R10 - JE LBB6_51 - -LBB6_36: - CMPL R15, $2048 - JB LBB6_5 - MOVL R15, CX - ANDL $-2048, CX - CMPL CX, $55296 - JNE LBB6_65 - TESTQ R14, R14 - JLE LBB6_80 - CMPB 4(R9)(R12*1), $92 - JNE LBB6_81 - CMPL R15, $56319 - JA LBB6_78 - CMPQ R14, $7 - JL LBB6_78 - CMPB 5(R9)(R12*1), $92 - JNE LBB6_78 - CMPB 6(R9)(R12*1), $117 - JNE LBB6_78 - MOVL 7(R9)(R12*1), R11 - MOVL R11, BX - NOTL BX - LEAL -808464432(R11), CX - ANDL $-2139062144, BX - MOVL BX, -52(BP) - TESTL CX, BX - JNE LBB6_104 - LEAL 421075225(R11), CX - ORL R11, CX - TESTL $-2139062144, CX - JNE LBB6_104 - MOVL R11, BX - ANDL $2139062143, BX - MOVL $-1061109568, CX - SUBL BX, CX - MOVQ R11, -64(BP) - LEAL 1179010630(BX), R11 - ANDL -52(BP), CX - TESTL R11, CX - MOVQ -64(BP), R11 - JNE LBB6_104 - MOVL $-522133280, CX - SUBL BX, CX - MOVL CX, -56(BP) - ADDL $960051513, BX - MOVL -52(BP), CX - ANDL -56(BP), CX - TESTL BX, CX - JNE LBB6_104 - BSWAPL R11 - MOVL R11, CX - SHRL $4, CX - NOTL CX - ANDL $16843009, CX - LEAL 0(CX)(CX*8), CX - ANDL $252645135, R11 - ADDL CX, R11 - MOVL R11, CX - SHRL $4, CX - ORL R11, CX - MOVL CX, BX - SHRL $8, BX - ANDL $65280, BX - MOVBLZX CX, R11 - ORL BX, R11 - ANDL $16515072, CX - CMPL CX, $14417920 - JE LBB6_85 - TESTB $2, R8 - JE LBB6_119 - ADDQ $-7, R14 - MOVW $-16401, 0(AX) - MOVB $-67, 2(AX) - ADDQ $3, AX - ADDQ $7, R12 - MOVL R11, R15 - CMPL R11, $127 - JA LBB6_36 - JMP LBB6_64 - -LBB6_51: - CMPL R15, $2048 - JB LBB6_5 - MOVL R15, CX - ANDL $-2048, CX - CMPL CX, $55296 - JNE LBB6_65 - CMPL R15, $56319 - JA LBB6_77 - CMPQ R14, $6 - JL LBB6_77 - CMPB 4(R9)(R12*1), $92 - JNE LBB6_77 - CMPB 5(R9)(R12*1), $117 - JNE LBB6_77 - MOVL 6(R9)(R12*1), R11 - MOVL R11, BX - NOTL BX - LEAL -808464432(R11), CX - ANDL $-2139062144, BX - MOVL BX, -52(BP) - TESTL CX, BX - JNE LBB6_103 - LEAL 421075225(R11), CX - ORL R11, CX - TESTL $-2139062144, CX - JNE LBB6_103 - MOVL R11, BX - ANDL $2139062143, BX - MOVL $-1061109568, CX - SUBL BX, CX - MOVQ R11, -64(BP) - LEAL 1179010630(BX), R11 - ANDL -52(BP), CX - TESTL R11, CX - MOVQ -64(BP), R11 - JNE LBB6_103 - MOVL $-522133280, CX - SUBL BX, CX - MOVL CX, -56(BP) - ADDL $960051513, BX - MOVL -52(BP), CX - ANDL -56(BP), CX - TESTL BX, CX - JNE LBB6_103 - BSWAPL R11 - MOVL R11, CX - SHRL $4, CX - NOTL CX - ANDL $16843009, CX - LEAL 0(CX)(CX*8), CX - ANDL $252645135, R11 - ADDL CX, R11 - MOVL R11, CX - SHRL $4, CX - ORL R11, CX - MOVL CX, BX - SHRL $8, BX - ANDL $65280, BX - MOVBLZX CX, R11 - ORL BX, R11 - ANDL $16515072, CX - CMPL CX, $14417920 - JE LBB6_84 - TESTB $2, R8 - JE LBB6_118 - ADDQ $-6, R14 - MOVW $-16401, 0(AX) - MOVB $-67, 2(AX) - ADDQ $3, AX - ADDQ $6, R12 - MOVL R11, R15 - CMPL R11, $128 - JAE LBB6_51 - -LBB6_64: - LEAQ 4(R9)(R12*1), R9 - MOVL R11, R15 - JMP LBB6_76 - -LBB6_65: - LEAQ 4(R9)(R12*1), R9 - MOVL R15, CX - SHRL $12, CX - ORB $-32, CX - MOVB CX, 0(AX) - MOVL R15, CX - SHRL $6, CX - ANDB $63, CX - ORB $-128, CX - MOVB CX, 1(AX) - ANDB $63, R15 - ORB $-128, R15 - MOVB R15, 2(AX) - -LBB6_66: - ADDQ $3, AX - JMP LBB6_6 - -LBB6_67: - TESTL R13, R13 - JE LBB6_99 - CMPB -1(R9), $92 - JNE LBB6_102 - CMPB 0(R9), $92 - JNE LBB6_74 - CMPL R13, $1 - JLE LBB6_99 - MOVB 1(R9), R11 - CMPB R11, $34 - JE LBB6_73 - CMPB R11, $92 - JNE LBB6_114 - -LBB6_73: - INCQ R9 - DECQ R13 - -LBB6_74: - INCQ R9 - DECQ R13 - JMP LBB6_26 - -LBB6_75: - ADDQ $4, R9 - -LBB6_76: - MOVB R15, 0(AX) - INCQ AX - JMP LBB6_6 - -LBB6_77: - LEAQ 4(R9)(R12*1), R9 - JMP LBB6_79 - -LBB6_78: - LEAQ 5(R9)(R12*1), R9 - SUBQ R12, R13 - ADDQ $-5, R13 - MOVQ R13, R14 - -LBB6_79: - TESTB $2, R8 - JNE LBB6_83 - JMP LBB6_121 - -LBB6_80: - TESTB $2, R8 - JNE LBB6_82 - JMP LBB6_99 - -LBB6_81: - TESTB $2, R8 - JE LBB6_122 - -LBB6_82: - LEAQ 4(R9)(R12*1), R9 - -LBB6_83: - MOVW $-16401, 0(AX) - MOVB $-67, 2(AX) - JMP LBB6_66 - -LBB6_84: - LEAQ 10(R9)(R12*1), R9 - SUBQ R12, R13 - ADDQ $-10, R13 - JMP LBB6_86 - -LBB6_85: - LEAQ 11(R9)(R12*1), R9 - SUBQ R12, R13 - ADDQ $-11, R13 - -LBB6_86: - SHLL $10, R15 - LEAL -56613888(R15)(R11*1), BX - CMPL BX, $1114112 - JB LBB6_89 - TESTB $2, R8 - JE LBB6_116 - MOVW $-16401, 0(AX) - MOVB $-67, 2(AX) - ADDQ $3, AX - JMP LBB6_7 - -LBB6_89: - MOVL BX, CX - SHRL $18, CX - ORB $-16, CX - MOVB CX, 0(AX) - MOVL BX, CX - SHRL $12, CX - ANDB $63, CX - ORB $-128, CX - MOVB CX, 1(AX) - MOVL BX, CX - SHRL $6, CX - ANDB $63, CX - ORB $-128, CX - MOVB CX, 2(AX) - ANDB $63, BX - ORB $-128, BX - MOVB BX, 3(AX) +LBB6_140: ADDQ $4, AX - JMP LBB6_7 + MOVQ AX, 0(SI) + MOVQ $-2, R8 + JMP LBB6_127 -LBB6_90: - MOVQ R9, DX - SUBQ DI, DX - MOVQ -48(BP), DI - MOVQ DX, 0(DI) - MOVB 0(R9), SI - LEAL -48(SI), CX - MOVQ $-2, AX - CMPB CX, $10 - JB LBB6_92 - ANDB $-33, SI - ADDB $-65, SI - CMPB SI, $5 - JA LBB6_4 +LBB6_141: + XORL R13, R13 + JMP LBB6_126 -LBB6_92: - LEAQ 1(DX), CX - MOVQ CX, 0(DI) - MOVB 1(R9), SI - LEAL -48(SI), CX - CMPB CX, $10 - JB LBB6_94 - ANDB $-33, SI - ADDB $-65, SI - CMPB SI, $5 - JA LBB6_4 +LBB6_142: + NOTQ DI + ADDQ DI, R11 + MOVQ -48(BP), AX + MOVQ R11, 0(AX) + MOVQ $-3, R8 + JMP LBB6_127 -LBB6_94: - LEAQ 2(DX), CX - MOVQ CX, 0(DI) - MOVB 2(R9), SI - LEAL -48(SI), CX - CMPB CX, $10 - JB LBB6_96 - ANDB $-33, SI - ADDB $-65, SI - CMPB SI, $5 - JA LBB6_4 +LBB6_143: + LEAQ 0(R11)(BX*1), R12 + ADDQ $4, R12 -LBB6_96: - LEAQ 3(DX), CX - MOVQ CX, 0(DI) - MOVB 3(R9), SI - LEAL -48(SI), CX - CMPB CX, $10 - JB LBB6_98 - ANDB $-33, SI - ADDB $-65, SI - CMPB SI, $5 - JA LBB6_4 +LBB6_144: + MOVQ R12, AX + SUBQ DI, AX + ADDQ $2, AX + MOVQ -48(BP), SI + MOVQ AX, 0(SI) + MOVB 2(R12), CX + LEAL -48(CX), DX + CMPB DX, $10 + JB LBB6_147 + MOVQ $-2, R8 + ADDB $-65, CX + CMPB CX, $37 + JA LBB6_127 + MOVBLZX CX, CX + MOVQ $270582939711, DX + BTQ CX, DX + MOVQ -48(BP), SI + JAE LBB6_127 -LBB6_98: - ADDQ $4, DX - MOVQ DX, 0(DI) - JMP LBB6_4 +LBB6_147: + LEAQ 1(AX), CX + MOVQ CX, 0(SI) + MOVB 3(R12), CX + LEAL -48(CX), DX + CMPB DX, $9 + JBE LBB6_150 + MOVQ $-2, R8 + ADDB $-65, CX + CMPB CX, $37 + JA LBB6_127 + MOVBLZX CX, CX + MOVQ $270582939711, DX + BTQ CX, DX + MOVQ -48(BP), SI + JAE LBB6_127 -LBB6_99: +LBB6_150: + LEAQ 2(AX), CX + MOVQ CX, 0(SI) + MOVB 4(R12), CX + LEAL -48(CX), DX + CMPB DX, $10 + JB LBB6_153 + MOVQ $-2, R8 + ADDB $-65, CX + CMPB CX, $37 + JA LBB6_127 + MOVBLZX CX, CX + MOVQ $270582939711, DX + BTQ CX, DX + MOVQ -48(BP), SI + JAE LBB6_127 + +LBB6_153: + LEAQ 3(AX), CX + MOVQ CX, 0(SI) + MOVB 5(R12), CX + LEAL -48(CX), DX + CMPB DX, $10 + JB LBB6_140 + MOVQ $-2, R8 + ADDB $-65, CX + CMPB CX, $37 + JA LBB6_127 + MOVBLZX CX, CX + MOVQ $270582939711, DX + BTQ CX, DX + MOVQ -48(BP), SI + JB LBB6_140 + JMP LBB6_127 + +LBB6_156: + NOTQ DI + ADDQ DI, R11 + +LBB6_157: + MOVQ -48(BP), AX + MOVQ R11, 0(AX) + MOVQ $-2, R8 + JMP LBB6_127 + +LBB6_158: + SUBQ DI, R11 + ADDQ $1, R11 + JMP LBB6_157 + +LBB6_159: + LEAQ 0(R11)(BX*1), R12 + ADDQ $5, R12 + JMP LBB6_144 + +LBB6_160: + ADDQ DI, R9 + SUBQ R9, R11 + +LBB6_161: + ADDQ $-4, R11 + MOVQ -48(BP), AX + MOVQ R11, 0(AX) + MOVQ $-4, R8 + JMP LBB6_127 + +LBB6_162: + TESTB $2, -64(BP) + JE LBB6_164 + MOVW $-16401, 0(R8) + MOVB $-67, 2(R8) + ADDQ $3, R8 + XORL R13, R13 + MOVQ R15, DX + JMP LBB6_126 + +LBB6_164: MOVQ -48(BP), AX MOVQ SI, 0(AX) - MOVQ $-1, AX - JMP LBB6_4 - -LBB6_100: - NOTQ DI - ADDQ DI, R9 - MOVQ -48(BP), AX - MOVQ R9, 0(AX) - MOVQ $-3, AX - JMP LBB6_4 - -LBB6_101: - XORL R13, R13 - JMP LBB6_3 - -LBB6_102: - NOTQ DI - ADDQ DI, R9 - JMP LBB6_115 - -LBB6_103: - LEAQ 4(R9)(R12*1), SI - JMP LBB6_105 - -LBB6_104: - LEAQ 5(R9)(R12*1), SI - -LBB6_105: - MOVQ SI, DX - SUBQ DI, DX - ADDQ $2, DX - MOVQ -48(BP), AX - MOVQ DX, 0(AX) - MOVB 2(SI), DI - LEAL -48(DI), CX - MOVQ $-2, AX - CMPB CX, $10 - JB LBB6_107 - ANDB $-33, DI - ADDB $-65, DI - CMPB DI, $5 - JA LBB6_4 - -LBB6_107: - LEAQ 1(DX), CX - MOVQ -48(BP), DI - MOVQ CX, 0(DI) - MOVB 3(SI), DI - LEAL -48(DI), CX - CMPB CX, $10 - JB LBB6_109 - ANDB $-33, DI - ADDB $-65, DI - CMPB DI, $5 - JA LBB6_4 - -LBB6_109: - LEAQ 2(DX), CX - MOVQ -48(BP), DI - MOVQ CX, 0(DI) - MOVB 4(SI), DI - LEAL -48(DI), CX - CMPB CX, $10 - JB LBB6_111 - ANDB $-33, DI - ADDB $-65, DI - CMPB DI, $5 - JA LBB6_4 - -LBB6_111: - LEAQ 3(DX), CX - MOVQ -48(BP), DI - MOVQ CX, 0(DI) - MOVB 5(SI), SI - LEAL -48(SI), CX - CMPB CX, $10 - JB LBB6_113 - ANDB $-33, SI - ADDB $-65, SI - CMPB SI, $5 - JA LBB6_4 - -LBB6_113: - ADDQ $4, DX - MOVQ -48(BP), CX - MOVQ DX, 0(CX) - JMP LBB6_4 - -LBB6_114: - SUBQ DI, R9 - INCQ R9 - -LBB6_115: - MOVQ -48(BP), AX - MOVQ R9, 0(AX) - MOVQ $-2, AX - JMP LBB6_4 - -LBB6_116: - SUBQ DI, R9 - ADDQ $-4, R9 - -LBB6_117: - MOVQ -48(BP), AX - MOVQ R9, 0(AX) - MOVQ $-4, AX - JMP LBB6_4 - -LBB6_118: - LEAQ 10(R9)(R12*1), AX - JMP LBB6_120 - -LBB6_119: - LEAQ 11(R9)(R12*1), AX - -LBB6_120: - SUBQ DI, AX - ADDQ $-4, AX - MOVQ -48(BP), CX - MOVQ AX, 0(CX) - MOVQ $-4, AX - JMP LBB6_4 - -LBB6_121: - LEAQ 4(R10)(DI*1), AX - SUBQ AX, R9 - JMP LBB6_117 - -LBB6_122: - ADDQ R12, R9 - SUBQ DI, R9 - JMP LBB6_117 + MOVQ $-1, R8 + JMP LBB6_127 LCPI7_0: QUAD $0x2626262626262626; QUAD $0x2626262626262626 // .space 16, '&&&&&&&&&&&&&&&&' @@ -3079,12 +3202,12 @@ LCPI7_1: QUAD $0xe2e2e2e2e2e2e2e2; QUAD $0xe2e2e2e2e2e2e2e2 // .space 16, '\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2' LCPI7_2: - QUAD $0x0202020202020202; QUAD $0x0202020202020202 // .space 16, '\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' - QUAD $0x0202020202020202; QUAD $0x0202020202020202 // .space 16, '\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' + QUAD $0xfdfdfdfdfdfdfdfd; QUAD $0xfdfdfdfdfdfdfdfd // .space 16, '\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd' + QUAD $0xfdfdfdfdfdfdfdfd; QUAD $0xfdfdfdfdfdfdfdfd // .space 16, '\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd' LCPI7_3: - QUAD $0x3e3e3e3e3e3e3e3e; QUAD $0x3e3e3e3e3e3e3e3e // .space 16, '>>>>>>>>>>>>>>>>' - QUAD $0x3e3e3e3e3e3e3e3e; QUAD $0x3e3e3e3e3e3e3e3e // .space 16, '>>>>>>>>>>>>>>>>' + QUAD $0x3c3c3c3c3c3c3c3c; QUAD $0x3c3c3c3c3c3c3c3c // .space 16, '<<<<<<<<<<<<<<<<' + QUAD $0x3c3c3c3c3c3c3c3c; QUAD $0x3c3c3c3c3c3c3c3c // .space 16, '<<<<<<<<<<<<<<<<' LCPI7_4: QUAD $0x2626262626262626; QUAD $0x2626262626262626 // .space 16, '&&&&&&&&&&&&&&&&' @@ -3093,10 +3216,10 @@ LCPI7_5: QUAD $0xe2e2e2e2e2e2e2e2; QUAD $0xe2e2e2e2e2e2e2e2 // .space 16, '\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2\xe2' LCPI7_6: - QUAD $0x0202020202020202; QUAD $0x0202020202020202 // .space 16, '\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' + QUAD $0xfdfdfdfdfdfdfdfd; QUAD $0xfdfdfdfdfdfdfdfd // .space 16, '\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd\xfd' LCPI7_7: - QUAD $0x3e3e3e3e3e3e3e3e; QUAD $0x3e3e3e3e3e3e3e3e // .space 16, '>>>>>>>>>>>>>>>>' + QUAD $0x3c3c3c3c3c3c3c3c; QUAD $0x3c3c3c3c3c3c3c3c // .space 16, '<<<<<<<<<<<<<<<<' _html_escape: BYTE $0x55 // pushq %rbp @@ -3113,586 +3236,577 @@ _html_escape: MOVQ DI, -48(BP) MOVQ DI, AX TESTQ SI, SI - JLE LBB7_94 - MOVQ SI, R10 + JLE LBB7_106 MOVQ -64(BP), AX MOVQ 0(AX), R9 - QUAD $0xffffff021d6ffec5 // vmovdqu $-254(%rip), %ymm3 /* LCPI7_0(%rip) */ - QUAD $0xffffff1a256ffec5 // vmovdqu $-230(%rip), %ymm4 /* LCPI7_1(%rip) */ - QUAD $0xffffff322d6ffec5 // vmovdqu $-206(%rip), %ymm5 /* LCPI7_2(%rip) */ - QUAD $0xffffff4a356ffec5 // vmovdqu $-182(%rip), %ymm6 /* LCPI7_3(%rip) */ - LONG $0x83358d4c; WORD $0x00b9; BYTE $0x00 // leaq $47491(%rip), %r14 /* __HtmlQuoteTab(%rip) */ - MOVQ $12884901889, DI - MOVQ -48(BP), R12 + QUAD $0xffffff051d6ffec5 // vmovdqu $-251(%rip), %ymm3 /* LCPI7_0(%rip) */ + QUAD $0xffffff1d256ffec5 // vmovdqu $-227(%rip), %ymm4 /* LCPI7_1(%rip) */ + QUAD $0xffffff352d6ffec5 // vmovdqu $-203(%rip), %ymm5 /* LCPI7_2(%rip) */ + QUAD $0xffffff4d356ffec5 // vmovdqu $-179(%rip), %ymm6 /* LCPI7_3(%rip) */ + LONG $0x0a358d4c; WORD $0x00b4; BYTE $0x00 // leaq $46090(%rip), %r14 /* __HtmlQuoteTab(%rip) */ + MOVQ -48(BP), R11 MOVQ -56(BP), R15 LBB7_2: TESTQ R9, R9 - JLE LBB7_96 - CMPQ R10, $31 - SETGT BX + JLE LBB7_3 + CMPQ SI, $32 + SETGE CX MOVQ R9, AX MOVQ R15, R8 - MOVQ R10, SI - MOVQ R12, R13 + MOVQ SI, R10 + MOVQ R11, R12 + JL LBB7_12 CMPQ R9, $32 - JL LBB7_9 - CMPQ R10, $32 - JL LBB7_9 - MOVQ R12, R13 - MOVQ R10, SI - MOVQ R15, R8 - MOVQ R9, DX + JL LBB7_12 + XORL R8, R8 + MOVQ SI, BX + MOVQ R9, DI -LBB7_6: - LONG $0x6f7ec1c4; WORD $0x0045 // vmovdqu (%r13), %ymm0 +LBB7_7: + LONG $0x6f7e81c4; WORD $0x0304 // vmovdqu (%r11,%r8), %ymm0 LONG $0xcb74fdc5 // vpcmpeqb %ymm3, %ymm0, %ymm1 LONG $0xd474fdc5 // vpcmpeqb %ymm4, %ymm0, %ymm2 LONG $0xc9ebedc5 // vpor %ymm1, %ymm2, %ymm1 - LONG $0xd5ebfdc5 // vpor %ymm5, %ymm0, %ymm2 + LONG $0xd5dbfdc5 // vpand %ymm5, %ymm0, %ymm2 LONG $0xd674edc5 // vpcmpeqb %ymm6, %ymm2, %ymm2 LONG $0xcaebf5c5 // vpor %ymm2, %ymm1, %ymm1 - LONG $0x7f7ec1c4; BYTE $0x00 // vmovdqu %ymm0, (%r8) + LONG $0x7f7e81c4; WORD $0x0704 // vmovdqu %ymm0, (%r15,%r8) LONG $0xc1d7fdc5 // vpmovmskb %ymm1, %eax TESTL AX, AX - JNE LBB7_19 - ADDQ $32, R13 + JNE LBB7_8 + LEAQ -32(BX), R10 + LEAQ -32(DI), AX ADDQ $32, R8 - LEAQ -32(DX), AX - CMPQ SI, $63 - SETGT BX - CMPQ SI, $64 - LEAQ -32(SI), SI - JL LBB7_9 - CMPQ DX, $63 - MOVQ AX, DX - JG LBB7_6 + CMPQ BX, $64 + SETGE CX + JL LBB7_11 + MOVQ R10, BX + CMPQ DI, $63 + MOVQ AX, DI + JG LBB7_7 -LBB7_9: - TESTB BX, BX - JE LBB7_13 - LONG $0x6f7ec1c4; WORD $0x0045 // vmovdqu (%r13), %ymm0 +LBB7_11: + LEAQ 0(R11)(R8*1), R12 + ADDQ R15, R8 + +LBB7_12: + TESTB CX, CX + JE LBB7_38 + LONG $0x6f7ec1c4; WORD $0x2404 // vmovdqu (%r12), %ymm0 LONG $0xcb74fdc5 // vpcmpeqb %ymm3, %ymm0, %ymm1 LONG $0xd474fdc5 // vpcmpeqb %ymm4, %ymm0, %ymm2 LONG $0xc9ebedc5 // vpor %ymm1, %ymm2, %ymm1 - LONG $0xc5ebfdc5 // vpor %ymm5, %ymm0, %ymm0 + LONG $0xc5dbfdc5 // vpand %ymm5, %ymm0, %ymm0 LONG $0xc674fdc5 // vpcmpeqb %ymm6, %ymm0, %ymm0 LONG $0xc0ebf5c5 // vpor %ymm0, %ymm1, %ymm0 LONG $0xc8d7fdc5 // vpmovmskb %ymm0, %ecx MOVQ $4294967296, DX ORQ DX, CX - BSFQ CX, R11 - LONG $0x6f7ac1c4; WORD $0x0045 // vmovdqu (%r13), %xmm0 + BSFQ CX, R13 + LONG $0x6f7ac1c4; WORD $0x2404 // vmovdqu (%r12), %xmm0 LONG $0x16f9e3c4; WORD $0x01c1 // vpextrq $1, %xmm0, %rcx - LONG $0x7ef9e1c4; BYTE $0xc2 // vmovq %xmm0, %rdx - CMPQ R11, AX - JLE LBB7_20 + LONG $0x7ef9e1c4; BYTE $0xc7 // vmovq %xmm0, %rdi + CMPQ R13, AX + JLE LBB7_14 CMPQ AX, $16 - JB LBB7_23 - MOVQ DX, 0(R8) + JB LBB7_27 + MOVQ DI, 0(R8) MOVQ CX, 8(R8) - LEAQ 16(R13), R11 + LEAQ 16(R12), R10 ADDQ $16, R8 - LEAQ -16(AX), SI - CMPQ SI, $8 - JAE LBB7_24 - JMP LBB7_25 + LEAQ -16(AX), R14 + CMPQ R14, $8 + JAE LBB7_30 + JMP LBB7_31 -LBB7_13: - MOVQ R14, DX +LBB7_38: WORD $0xf8c5; BYTE $0x77 // vzeroupper - CMPQ SI, $15 - SETGT R14 + CMPQ R10, $16 + SETGE CX + JL LBB7_39 CMPQ AX, $16 - JL LBB7_30 - CMPQ SI, $16 - QUAD $0xfffffe273d6ffac5 // vmovdqu $-473(%rip), %xmm7 /* LCPI7_4(%rip) */ - QUAD $0xfffffe2f056f7ac5 // vmovdqu $-465(%rip), %xmm8 /* LCPI7_5(%rip) */ - QUAD $0xfffffe370d6f7ac5 // vmovdqu $-457(%rip), %xmm9 /* LCPI7_6(%rip) */ - QUAD $0xfffffe3f156f7ac5 // vmovdqu $-449(%rip), %xmm10 /* LCPI7_7(%rip) */ - JL LBB7_35 - QUAD $0xfffffd811d6ffec5 // vmovdqu $-639(%rip), %ymm3 /* LCPI7_0(%rip) */ - QUAD $0xfffffd99256ffec5 // vmovdqu $-615(%rip), %ymm4 /* LCPI7_1(%rip) */ - QUAD $0xfffffdb12d6ffec5 // vmovdqu $-591(%rip), %ymm5 /* LCPI7_2(%rip) */ - QUAD $0xfffffdc9356ffec5 // vmovdqu $-567(%rip), %ymm6 /* LCPI7_3(%rip) */ + QUAD $0xfffffe3f3d6ffac5 // vmovdqu $-449(%rip), %xmm7 /* LCPI7_4(%rip) */ + QUAD $0xfffffe47056f7ac5 // vmovdqu $-441(%rip), %xmm8 /* LCPI7_5(%rip) */ + QUAD $0xfffffe4f0d6f7ac5 // vmovdqu $-433(%rip), %xmm9 /* LCPI7_6(%rip) */ + QUAD $0xfffffe57156f7ac5 // vmovdqu $-425(%rip), %xmm10 /* LCPI7_7(%rip) */ + JL LBB7_41 + MOVQ R11, DI + SUBQ R12, DI + QUAD $0xfffffd931d6ffec5 // vmovdqu $-621(%rip), %ymm3 /* LCPI7_0(%rip) */ + QUAD $0xfffffdab256ffec5 // vmovdqu $-597(%rip), %ymm4 /* LCPI7_1(%rip) */ + QUAD $0xfffffdc32d6ffec5 // vmovdqu $-573(%rip), %ymm5 /* LCPI7_2(%rip) */ + QUAD $0xfffffddb356ffec5 // vmovdqu $-549(%rip), %ymm6 /* LCPI7_3(%rip) */ -LBB7_16: - LONG $0x6f7ac1c4; WORD $0x0045 // vmovdqu (%r13), %xmm0 +LBB7_43: + LONG $0x6f7ac1c4; WORD $0x2404 // vmovdqu (%r12), %xmm0 LONG $0xcf74f9c5 // vpcmpeqb %xmm7, %xmm0, %xmm1 LONG $0xd074b9c5 // vpcmpeqb %xmm0, %xmm8, %xmm2 LONG $0xc9ebe9c5 // vpor %xmm1, %xmm2, %xmm1 - LONG $0xd0ebb1c5 // vpor %xmm0, %xmm9, %xmm2 + LONG $0xd0dbb1c5 // vpand %xmm0, %xmm9, %xmm2 LONG $0xd274a9c5 // vpcmpeqb %xmm2, %xmm10, %xmm2 LONG $0xcaebf1c5 // vpor %xmm2, %xmm1, %xmm1 LONG $0x7f7ac1c4; BYTE $0x00 // vmovdqu %xmm0, (%r8) LONG $0xc9d7f9c5 // vpmovmskb %xmm1, %ecx - TESTW CX, CX - JNE LBB7_22 - ADDQ $16, R13 + TESTL CX, CX + JNE LBB7_44 + ADDQ $16, R12 ADDQ $16, R8 - LEAQ -16(AX), R11 - CMPQ SI, $31 - SETGT R14 - CMPQ SI, $32 - LEAQ -16(SI), SI - JL LBB7_31 + LEAQ -16(R10), R14 + LEAQ -16(AX), R13 + CMPQ R10, $32 + SETGE CX + JL LBB7_47 + ADDQ $-16, DI + MOVQ R14, R10 CMPQ AX, $31 - MOVQ R11, AX - JG LBB7_16 + MOVQ R13, AX + JG LBB7_43 + JMP LBB7_47 -LBB7_31: - TESTB R14, R14 - JE LBB7_36 +LBB7_8: + BSFL AX, R12 + ADDQ R8, R12 + JMP LBB7_83 -LBB7_32: - LONG $0x6f7ac1c4; WORD $0x0045 // vmovdqu (%r13), %xmm0 - LONG $0xcf74f9c5 // vpcmpeqb %xmm7, %xmm0, %xmm1 - LONG $0xd074b9c5 // vpcmpeqb %xmm0, %xmm8, %xmm2 - LONG $0xc9ebe9c5 // vpor %xmm1, %xmm2, %xmm1 - LONG $0xd0ebb1c5 // vpor %xmm0, %xmm9, %xmm2 - LONG $0xd274a9c5 // vpcmpeqb %xmm2, %xmm10, %xmm2 - LONG $0xcaebf1c5 // vpor %xmm2, %xmm1, %xmm1 - LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax - ORL $65536, AX - BSFL AX, R14 - LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax - CMPQ R11, R14 - JGE LBB7_55 - CMPQ R11, $8 - JB LBB7_58 - MOVQ AX, 0(R8) - LEAQ 8(R13), AX - ADDQ $8, R8 - LEAQ -8(R11), SI - MOVQ DX, R14 - CMPQ SI, $4 - JAE LBB7_59 - JMP LBB7_60 - -LBB7_19: - SUBQ R12, R13 - BSFL AX, AX - ADDQ R13, AX - TESTQ AX, AX - JNS LBB7_72 - JMP LBB7_92 - -LBB7_20: - CMPL R11, $16 - JB LBB7_43 - MOVQ DX, 0(R8) +LBB7_14: + CMPL R13, $16 + JB LBB7_15 + MOVQ DI, 0(R8) MOVQ CX, 8(R8) - LEAQ 16(R13), AX + LEAQ 16(R12), R10 ADDQ $16, R8 - LEAQ -16(R11), SI - CMPQ SI, $8 - JAE LBB7_44 - JMP LBB7_45 - -LBB7_22: - MOVWLZX CX, AX - SUBQ R12, R13 - BSFL AX, AX - ADDQ R13, AX - MOVQ DX, R14 - TESTQ AX, AX - JNS LBB7_72 - JMP LBB7_92 - -LBB7_23: - MOVQ R13, R11 - MOVQ AX, SI - CMPQ SI, $8 - JB LBB7_25 - -LBB7_24: - MOVQ 0(R11), CX - MOVQ CX, 0(R8) - ADDQ $8, R11 - ADDQ $8, R8 - ADDQ $-8, SI - -LBB7_25: - CMPQ SI, $4 - JB LBB7_26 - MOVL 0(R11), CX - MOVL CX, 0(R8) - ADDQ $4, R11 - ADDQ $4, R8 - ADDQ $-4, SI - CMPQ SI, $2 - JAE LBB7_52 - -LBB7_27: - TESTQ SI, SI - JE LBB7_29 - -LBB7_28: - MOVB 0(R11), CX - MOVB CX, 0(R8) - -LBB7_29: - SUBQ R12, AX - ADDQ R13, AX - NOTQ AX - TESTQ AX, AX - JNS LBB7_72 - JMP LBB7_92 - -LBB7_26: - CMPQ SI, $2 - JB LBB7_27 - -LBB7_52: - MOVWLZX 0(R11), CX - MOVW CX, 0(R8) - ADDQ $2, R11 - ADDQ $2, R8 - ADDQ $-2, SI - TESTQ SI, SI - JNE LBB7_28 - JMP LBB7_29 - -LBB7_30: - MOVQ AX, R11 - QUAD $0xfffffbbb1d6ffec5 // vmovdqu $-1093(%rip), %ymm3 /* LCPI7_0(%rip) */ - QUAD $0xfffffbd3256ffec5 // vmovdqu $-1069(%rip), %ymm4 /* LCPI7_1(%rip) */ - QUAD $0xfffffbeb2d6ffec5 // vmovdqu $-1045(%rip), %ymm5 /* LCPI7_2(%rip) */ - QUAD $0xfffffc03356ffec5 // vmovdqu $-1021(%rip), %ymm6 /* LCPI7_3(%rip) */ - QUAD $0xfffffc1b3d6ffac5 // vmovdqu $-997(%rip), %xmm7 /* LCPI7_4(%rip) */ - QUAD $0xfffffc23056f7ac5 // vmovdqu $-989(%rip), %xmm8 /* LCPI7_5(%rip) */ - QUAD $0xfffffc2b0d6f7ac5 // vmovdqu $-981(%rip), %xmm9 /* LCPI7_6(%rip) */ - QUAD $0xfffffc33156f7ac5 // vmovdqu $-973(%rip), %xmm10 /* LCPI7_7(%rip) */ - TESTB R14, R14 - JE LBB7_36 - JMP LBB7_32 - -LBB7_35: - MOVQ AX, R11 - QUAD $0xfffffb6e1d6ffec5 // vmovdqu $-1170(%rip), %ymm3 /* LCPI7_0(%rip) */ - QUAD $0xfffffb86256ffec5 // vmovdqu $-1146(%rip), %ymm4 /* LCPI7_1(%rip) */ - QUAD $0xfffffb9e2d6ffec5 // vmovdqu $-1122(%rip), %ymm5 /* LCPI7_2(%rip) */ - QUAD $0xfffffbb6356ffec5 // vmovdqu $-1098(%rip), %ymm6 /* LCPI7_3(%rip) */ - TESTB R14, R14 - JNE LBB7_32 - -LBB7_36: - TESTQ R11, R11 - JLE LBB7_64 - TESTQ SI, SI - MOVQ DX, R14 - JLE LBB7_65 - -LBB7_38: - MOVBLZX 0(R13), AX - CMPQ AX, $62 - JA LBB7_40 - MOVQ $5764607797912141824, CX - BTQ AX, CX - JB LBB7_57 - -LBB7_40: - CMPB AX, $-30 - JE LBB7_57 - INCQ R13 - MOVB AX, 0(R8) - CMPQ SI, $2 - LEAQ -1(SI), SI - JL LBB7_65 - INCQ R8 - CMPQ R11, $1 - LEAQ -1(R11), R11 - JG LBB7_38 - JMP LBB7_65 - -LBB7_43: - MOVQ R13, AX - MOVQ R11, SI - CMPQ SI, $8 - JB LBB7_45 + LEAQ -16(R13), AX + CMPQ AX, $8 + JAE LBB7_18 + JMP LBB7_19 LBB7_44: - MOVQ 0(AX), CX - MOVQ CX, 0(R8) - ADDQ $8, AX - ADDQ $8, R8 - ADDQ $-8, SI + BSFW CX, AX + MOVWLZX AX, R12 + SUBQ DI, R12 + JMP LBB7_82 -LBB7_45: - CMPQ SI, $4 - JB LBB7_46 - MOVL 0(AX), CX - MOVL CX, 0(R8) - ADDQ $4, AX - ADDQ $4, R8 - ADDQ $-4, SI - CMPQ SI, $2 - JAE LBB7_54 +LBB7_27: + MOVQ R12, R10 + MOVQ AX, R14 + CMPQ R14, $8 + JB LBB7_31 + +LBB7_30: + MOVQ 0(R10), CX + MOVQ CX, 0(R8) + ADDQ $8, R10 + ADDQ $8, R8 + ADDQ $-8, R14 + +LBB7_31: + CMPQ R14, $4 + JAE LBB7_32 + CMPQ R14, $2 + JAE LBB7_34 + +LBB7_35: + TESTQ R14, R14 + JE LBB7_37 + +LBB7_36: + MOVB 0(R10), CX + MOVB CX, 0(R8) + +LBB7_37: + ADDQ R12, AX + NOTQ AX + ADDQ R11, AX + MOVQ AX, R12 + JMP LBB7_82 + +LBB7_39: + MOVQ AX, R13 + MOVQ R10, R14 + QUAD $0xfffffc791d6ffec5 // vmovdqu $-903(%rip), %ymm3 /* LCPI7_0(%rip) */ + QUAD $0xfffffc91256ffec5 // vmovdqu $-879(%rip), %ymm4 /* LCPI7_1(%rip) */ + QUAD $0xfffffca92d6ffec5 // vmovdqu $-855(%rip), %ymm5 /* LCPI7_2(%rip) */ + QUAD $0xfffffcc1356ffec5 // vmovdqu $-831(%rip), %ymm6 /* LCPI7_3(%rip) */ + QUAD $0xfffffcd93d6ffac5 // vmovdqu $-807(%rip), %xmm7 /* LCPI7_4(%rip) */ + QUAD $0xfffffce1056f7ac5 // vmovdqu $-799(%rip), %xmm8 /* LCPI7_5(%rip) */ + QUAD $0xfffffce90d6f7ac5 // vmovdqu $-791(%rip), %xmm9 /* LCPI7_6(%rip) */ + QUAD $0xfffffcf1156f7ac5 // vmovdqu $-783(%rip), %xmm10 /* LCPI7_7(%rip) */ LBB7_47: - TESTQ SI, SI - JE LBB7_49 - -LBB7_48: - MOVB 0(AX), AX - MOVB AX, 0(R8) - -LBB7_49: - SUBQ R12, R13 - ADDQ R11, R13 - MOVQ R13, AX - TESTQ AX, AX - JNS LBB7_72 - JMP LBB7_92 - -LBB7_46: - CMPQ SI, $2 - JB LBB7_47 - -LBB7_54: - MOVWLZX 0(AX), CX - MOVW CX, 0(R8) - ADDQ $2, AX - ADDQ $2, R8 - ADDQ $-2, SI - TESTQ SI, SI - JNE LBB7_48 - JMP LBB7_49 - -LBB7_55: - CMPL R14, $8 - JB LBB7_66 - MOVQ AX, 0(R8) - LEAQ 8(R13), SI - ADDQ $8, R8 - LEAQ -8(R14), AX - CMPQ AX, $4 - JAE LBB7_67 - JMP LBB7_68 - -LBB7_57: - SUBQ R12, R13 - MOVQ R13, AX - TESTQ AX, AX - JNS LBB7_72 - JMP LBB7_92 + TESTB CX, CX + JE LBB7_48 LBB7_58: + LONG $0x6f7ac1c4; WORD $0x2404 // vmovdqu (%r12), %xmm0 + LONG $0xcf74f9c5 // vpcmpeqb %xmm7, %xmm0, %xmm1 + LONG $0xd074b9c5 // vpcmpeqb %xmm0, %xmm8, %xmm2 + LONG $0xc9ebe9c5 // vpor %xmm1, %xmm2, %xmm1 + LONG $0xd0dbb1c5 // vpand %xmm0, %xmm9, %xmm2 + LONG $0xd274a9c5 // vpcmpeqb %xmm2, %xmm10, %xmm2 + LONG $0xcaebf1c5 // vpor %xmm2, %xmm1, %xmm1 + LONG $0xc1d7f9c5 // vpmovmskb %xmm1, %eax + ORL $65536, AX + BSFL AX, AX + LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx + CMPQ R13, AX + JGE LBB7_59 + CMPQ R13, $8 + LONG $0x1a358d4c; WORD $0x00b1; BYTE $0x00 // leaq $45338(%rip), %r14 /* __HtmlQuoteTab(%rip) */ + JB LBB7_70 + MOVQ CX, 0(R8) + LEAQ 8(R12), AX + ADDQ $8, R8 + LEAQ -8(R13), DI + CMPQ DI, $4 + JAE LBB7_73 + JMP LBB7_74 + +LBB7_41: + MOVQ AX, R13 + MOVQ R10, R14 + QUAD $0xfffffbc31d6ffec5 // vmovdqu $-1085(%rip), %ymm3 /* LCPI7_0(%rip) */ + QUAD $0xfffffbdb256ffec5 // vmovdqu $-1061(%rip), %ymm4 /* LCPI7_1(%rip) */ + QUAD $0xfffffbf32d6ffec5 // vmovdqu $-1037(%rip), %ymm5 /* LCPI7_2(%rip) */ + QUAD $0xfffffc0b356ffec5 // vmovdqu $-1013(%rip), %ymm6 /* LCPI7_3(%rip) */ + TESTB CX, CX + JNE LBB7_58 + +LBB7_48: + TESTQ R14, R14 + JLE LBB7_56 + TESTQ R13, R13 + JLE LBB7_56 + XORL CX, CX + XORL AX, AX + +LBB7_51: + MOVBLZX 0(R12)(CX*1), DI + CMPQ DI, $62 + JA LBB7_52 + MOVQ $5764607797912141824, DX + BTQ DI, DX + JB LBB7_80 + +LBB7_52: + CMPB DI, $-30 + JE LBB7_80 + LEAQ 0(R14)(AX*1), DX + MOVB DI, 0(R8)(CX*1) + LEAQ -1(AX), DI + CMPQ DX, $2 + JL LBB7_55 + ADDQ R13, AX + ADDQ $1, CX + CMPQ AX, $1 + MOVQ DI, AX + JG LBB7_51 + +LBB7_55: + SUBQ DI, R12 + ADDQ DI, R14 + +LBB7_56: + TESTQ R14, R14 + JE LBB7_57 + NOTQ R12 + ADDQ R11, R12 + JMP LBB7_82 + +LBB7_15: + MOVQ R12, R10 MOVQ R13, AX - MOVQ R11, SI - MOVQ DX, R14 - CMPQ SI, $4 - JB LBB7_60 + CMPQ AX, $8 + JB LBB7_19 -LBB7_59: - MOVL 0(AX), CX - MOVL CX, 0(R8) - ADDQ $4, AX - ADDQ $4, R8 - ADDQ $-4, SI +LBB7_18: + MOVQ 0(R10), CX + MOVQ CX, 0(R8) + ADDQ $8, R10 + ADDQ $8, R8 + ADDQ $-8, AX -LBB7_60: - CMPQ SI, $2 - JB LBB7_61 - MOVWLZX 0(AX), CX - MOVW CX, 0(R8) - ADDQ $2, AX - ADDQ $2, R8 - ADDQ $-2, SI - TESTQ SI, SI - JNE LBB7_62 - JMP LBB7_63 +LBB7_19: + CMPQ AX, $4 + JAE LBB7_20 + CMPQ AX, $2 + JAE LBB7_22 -LBB7_61: - TESTQ SI, SI - JE LBB7_63 +LBB7_23: + TESTQ AX, AX + JE LBB7_25 -LBB7_62: - MOVB 0(AX), AX +LBB7_24: + MOVB 0(R10), AX MOVB AX, 0(R8) -LBB7_63: - SUBQ R12, R11 - ADDQ R13, R11 - NOTQ R11 - MOVQ R11, AX - TESTQ AX, AX - JNS LBB7_72 - JMP LBB7_92 +LBB7_25: + SUBQ R11, R12 + ADDQ R13, R12 + JMP LBB7_83 -LBB7_64: - MOVQ DX, R14 - -LBB7_65: - SUBQ R12, R13 - NEGQ SI - SBBQ AX, AX - XORQ R13, AX - TESTQ AX, AX - JNS LBB7_72 - JMP LBB7_92 - -LBB7_66: - MOVQ R13, SI - MOVQ R14, AX - CMPQ AX, $4 - JB LBB7_68 - -LBB7_67: - MOVL 0(SI), CX +LBB7_32: + MOVL 0(R10), CX MOVL CX, 0(R8) - ADDQ $4, SI + ADDQ $4, R10 + ADDQ $4, R8 + ADDQ $-4, R14 + CMPQ R14, $2 + JB LBB7_35 + +LBB7_34: + MOVWLZX 0(R10), CX + MOVW CX, 0(R8) + ADDQ $2, R10 + ADDQ $2, R8 + ADDQ $-2, R14 + TESTQ R14, R14 + JNE LBB7_36 + JMP LBB7_37 + +LBB7_20: + MOVL 0(R10), CX + MOVL CX, 0(R8) + ADDQ $4, R10 ADDQ $4, R8 ADDQ $-4, AX + CMPQ AX, $2 + JB LBB7_23 -LBB7_68: - CMPQ AX, $2 - JB LBB7_69 - MOVWLZX 0(SI), CX +LBB7_22: + MOVWLZX 0(R10), CX MOVW CX, 0(R8) - ADDQ $2, SI + ADDQ $2, R10 ADDQ $2, R8 ADDQ $-2, AX TESTQ AX, AX - JNE LBB7_70 - JMP LBB7_71 + JNE LBB7_24 + JMP LBB7_25 -LBB7_69: - TESTQ AX, AX - JE LBB7_71 - -LBB7_70: - MOVB 0(SI), AX - MOVB AX, 0(R8) - -LBB7_71: - SUBQ R12, R13 - ADDQ R14, R13 - MOVQ R13, AX - MOVQ DX, R14 - TESTQ AX, AX - JS LBB7_92 - -LBB7_72: - ADDQ AX, R12 - ADDQ AX, R15 - SUBQ AX, R10 - JLE LBB7_93 - SUBQ AX, R9 - MOVB 0(R12), CX - CMPB CX, $-30 - JE LBB7_86 - MOVQ R12, AX - -LBB7_75: - MOVBLZX CX, CX - SHLQ $4, CX - MOVQ 0(CX)(R14*1), DX - MOVLQSX DX, SI - SUBQ SI, R9 - JL LBB7_95 - SHLQ $32, DX - LEAQ 8(CX)(R14*1), BX - CMPQ DX, DI - JL LBB7_78 - MOVL 0(BX), DX - MOVL DX, 0(R15) - LEAQ 12(CX)(R14*1), BX - LEAQ 4(R15), DX - LEAQ -4(SI), CX - CMPQ CX, $2 - JGE LBB7_79 - JMP LBB7_80 - -LBB7_78: - MOVQ R15, DX - MOVQ SI, CX - CMPQ CX, $2 - JL LBB7_80 - -LBB7_79: - MOVQ DI, R8 - MOVWLZX 0(BX), DI - MOVW DI, 0(DX) - MOVQ R8, DI - ADDQ $2, BX - ADDQ $2, DX - ADDQ $-2, CX +LBB7_59: + CMPL AX, $8 + LONG $0x99358d4c; WORD $0x00af; BYTE $0x00 // leaq $44953(%rip), %r14 /* __HtmlQuoteTab(%rip) */ + JB LBB7_60 + MOVQ CX, 0(R8) + LEAQ 8(R12), R10 + ADDQ $8, R8 + LEAQ -8(AX), DI + CMPQ DI, $4 + JAE LBB7_63 + JMP LBB7_64 LBB7_80: - TESTQ CX, CX - JLE LBB7_82 - MOVB 0(BX), CX - MOVB CX, 0(DX) + SUBQ R11, R12 + SUBQ AX, R12 + JMP LBB7_82 + +LBB7_70: + MOVQ R12, AX + MOVQ R13, DI + CMPQ DI, $4 + JB LBB7_74 + +LBB7_73: + MOVL 0(AX), CX + MOVL CX, 0(R8) + ADDQ $4, AX + ADDQ $4, R8 + ADDQ $-4, DI + +LBB7_74: + CMPQ DI, $2 + JAE LBB7_75 + TESTQ DI, DI + JE LBB7_78 + +LBB7_77: + MOVB 0(AX), AX + MOVB AX, 0(R8) + +LBB7_78: + ADDQ R12, R13 + NOTQ R13 + ADDQ R11, R13 + MOVQ R13, R12 + JMP LBB7_83 + +LBB7_60: + MOVQ R12, R10 + MOVQ AX, DI + CMPQ DI, $4 + JB LBB7_64 + +LBB7_63: + MOVL 0(R10), CX + MOVL CX, 0(R8) + ADDQ $4, R10 + ADDQ $4, R8 + ADDQ $-4, DI + +LBB7_64: + CMPQ DI, $2 + JAE LBB7_65 + TESTQ DI, DI + JE LBB7_68 + +LBB7_67: + MOVB 0(R10), CX + MOVB CX, 0(R8) + +LBB7_68: + SUBQ R11, R12 + ADDQ AX, R12 + JMP LBB7_83 + +LBB7_75: + MOVWLZX 0(AX), CX + MOVW CX, 0(R8) + ADDQ $2, AX + ADDQ $2, R8 + ADDQ $-2, DI + TESTQ DI, DI + JNE LBB7_77 + JMP LBB7_78 + +LBB7_65: + MOVWLZX 0(R10), CX + MOVW CX, 0(R8) + ADDQ $2, R10 + ADDQ $2, R8 + ADDQ $-2, DI + TESTQ DI, DI + JNE LBB7_67 + JMP LBB7_68 + +LBB7_57: + SUBQ R11, R12 LBB7_82: - ADDQ SI, R15 + LONG $0xc3358d4c; WORD $0x00ae; BYTE $0x00 // leaq $44739(%rip), %r14 /* __HtmlQuoteTab(%rip) */ LBB7_83: - INCQ AX - MOVQ AX, R12 - CMPQ R10, $1 - LEAQ -1(R10), R10 - JG LBB7_2 - JMP LBB7_94 + TESTQ R12, R12 + JS LBB7_84 + ADDQ R12, R11 + ADDQ R12, R15 + SUBQ R12, SI + JLE LBB7_86 + SUBQ R12, R9 + MOVB 0(R11), CX + CMPB CX, $-30 + JE LBB7_89 + MOVQ R11, AX -LBB7_86: - CMPQ R10, $3 - JL LBB7_90 - CMPB 1(R12), $-128 - JNE LBB7_90 - MOVB 2(R12), CX +LBB7_93: + MOVBLZX CX, DI + SHLQ $4, DI + MOVQ 0(DI)(R14*1), DX + MOVLQSX DX, BX + SUBQ BX, R9 + JL LBB7_94 + SHLQ $32, DX + LEAQ 0(DI)(R14*1), R8 + ADDQ $8, R8 + MOVQ $12884901889, CX + CMPQ DX, CX + JL LBB7_98 + MOVL 0(R8), CX + MOVL CX, 0(R15) + LEAQ 0(DI)(R14*1), R8 + ADDQ $12, R8 + LEAQ 4(R15), R10 + LEAQ -4(BX), DI + CMPQ DI, $2 + JGE LBB7_101 + JMP LBB7_102 + +LBB7_98: + MOVQ R15, R10 + MOVQ BX, DI + CMPQ DI, $2 + JL LBB7_102 + +LBB7_101: + MOVWLZX 0(R8), DX + MOVW DX, 0(R10) + ADDQ $2, R8 + ADDQ $2, R10 + ADDQ $-2, DI + +LBB7_102: + TESTQ DI, DI + JLE LBB7_104 + MOVB 0(R8), CX + MOVB CX, 0(R10) + +LBB7_104: + ADDQ BX, R15 + +LBB7_105: + ADDQ $1, AX + LEAQ -1(SI), CX + MOVQ AX, R11 + CMPQ SI, $1 + MOVQ CX, SI + JG LBB7_2 + JMP LBB7_106 + +LBB7_89: + CMPQ SI, $3 + JL LBB7_95 + CMPB 1(R11), $-128 + JNE LBB7_95 + MOVB 2(R11), CX MOVL CX, AX ANDB $-2, AX CMPB AX, $-88 - JNE LBB7_90 - LEAQ 2(R12), AX - ADDQ $-2, R10 - JMP LBB7_75 + JNE LBB7_95 + LEAQ 2(R11), AX + ADDQ $-2, SI + JMP LBB7_93 -LBB7_90: +LBB7_95: TESTQ R9, R9 - JLE LBB7_96 + JLE LBB7_3 MOVB $-30, 0(R15) - INCQ R15 - DECQ R9 - MOVQ R12, AX - JMP LBB7_83 + ADDQ $1, R15 + ADDQ $-1, R9 + MOVQ R11, AX + JMP LBB7_105 -LBB7_92: - SUBQ -56(BP), R15 - NOTQ AX - ADDQ AX, R15 - MOVQ -64(BP), CX - MOVQ R15, 0(CX) - SUBQ -48(BP), R12 - ADDQ AX, R12 - NOTQ R12 - JMP LBB7_97 +LBB7_84: + MOVQ -56(BP), CX + ADDQ R12, CX + NOTQ CX + ADDQ R15, CX + MOVQ -64(BP), AX + MOVQ CX, 0(AX) + MOVQ -48(BP), AX + SUBQ R11, AX + ADDQ R12, AX + JMP LBB7_107 -LBB7_93: - MOVQ R12, AX +LBB7_86: + MOVQ R11, AX -LBB7_94: +LBB7_106: SUBQ -56(BP), R15 MOVQ -64(BP), CX MOVQ R15, 0(CX) SUBQ -48(BP), AX - JMP LBB7_98 + JMP LBB7_107 -LBB7_95: +LBB7_94: SUBQ -56(BP), R15 MOVQ -64(BP), AX MOVQ R15, 0(AX) -LBB7_96: - NOTQ R12 - ADDQ -48(BP), R12 +LBB7_3: + NOTQ R11 + ADDQ -48(BP), R11 + MOVQ R11, AX -LBB7_97: - MOVQ R12, AX - -LBB7_98: +LBB7_107: ADDQ $24, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 @@ -3728,73 +3842,74 @@ LBB8_5: SHLQ CX, DI MOVL AX, CX SHLQ $4, CX - LONG $0xa23d8d4c; WORD $0x0039; BYTE $0x00 // leaq $14754(%rip), %r15 /* _POW10_M128_TAB(%rip) */ + LONG $0x523d8d4c; WORD $0x0034; BYTE $0x00 // leaq $13394(%rip), %r15 /* _POW10_M128_TAB(%rip) */ MOVQ DI, AX MULQ 8(CX)(R15*1) MOVQ AX, R11 MOVQ DX, R14 ANDL $511, DX + CMPQ DX, $511 + JNE LBB8_11 MOVQ DI, BX NOTQ BX - CMPQ AX, BX + CMPQ R11, BX JBE LBB8_11 - CMPL DX, $511 - JNE LBB8_11 MOVQ DI, AX MULQ 0(CX)(R15*1) ADDQ DX, R11 ADCQ $0, R14 MOVL R14, DX ANDL $511, DX - CMPQ AX, BX - JBE LBB8_11 + CMPQ DX, $511 + JNE LBB8_11 CMPQ R11, $-1 JNE LBB8_11 - CMPL DX, $511 - JE LBB8_1 + CMPQ AX, BX + JA LBB8_1 LBB8_11: - MOVQ R14, DI - SHRQ $63, DI - LEAL 9(DI), CX - SHRQ CX, R14 - ORQ R11, DX - JNE LBB8_14 - MOVL R14, AX - ANDL $3, AX - CMPL AX, $1 - JE LBB8_1 + MOVQ R14, AX + SHRQ $63, AX + LEAL 9(AX), CX + SHRQ CX, R14 + TESTQ R11, R11 + JNE LBB8_15 + TESTQ DX, DX + JNE LBB8_15 + MOVL R14, CX + ANDL $3, CX + CMPL CX, $1 + JE LBB8_1 -LBB8_14: - LONG $0x526ac669; WORD $0x0003 // imull $217706, %esi, %eax - SARL $16, AX - ADDL $1087, AX - WORD $0x9848 // cltq - SUBQ R10, AX - XORQ $1, DI - SUBQ DI, AX - MOVL R14, DX - ANDL $1, DX - ADDQ R14, DX - MOVQ $126100789566373888, CX - ANDQ DX, CX - CMPQ CX, $1 - SBBQ $-1, AX - LEAQ -1(AX), SI - CMPQ SI, $2045 - JBE LBB8_16 +LBB8_15: + LONG $0x526ace69; WORD $0x0003 // imull $217706, %esi, %ecx + SARL $16, CX + ADDL $1087, CX + MOVLQSX CX, SI + SUBQ R10, SI + MOVL R14, DX + ANDL $1, DX + ADDQ R14, DX + MOVQ DX, CX + SHRQ $54, CX + ADDQ SI, AX + CMPQ CX, $1 + SBBQ $0, AX + LEAQ -1(AX), SI + CMPQ SI, $2045 + JBE LBB8_17 LBB8_1: XORL AX, AX -LBB8_17: +LBB8_18: BYTE $0x5b // popq %rbx WORD $0x5e41 // popq %r14 WORD $0x5f41 // popq %r15 BYTE $0x5d // popq %rbp RET -LBB8_16: +LBB8_17: CMPQ CX, $1 MOVB $2, CX SBBB $0, CX @@ -3809,7 +3924,7 @@ LBB8_16: LONG $0xc1450f48 // cmovneq %rcx, %rax MOVQ AX, 0(R8) MOVB $1, AX - JMP LBB8_17 + JMP LBB8_18 LCPI9_0: QUAD $0x0000000000000000 // .space 8, '\x00\x00\x00\x00\x00\x00\x00\x00' @@ -3835,284 +3950,216 @@ _decimal_to_f64: WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx BYTE $0x50 // pushq %rax - MOVQ SI, R13 - MOVQ DI, R12 - MOVQ $4503599627370496, BX + MOVQ SI, BX + MOVQ DI, R15 + MOVQ $4503599627370496, R13 CMPL 16(DI), $0 JE LBB9_4 MOVQ $9218868437227405312, R14 - MOVL 20(R12), AX - XORL R15, R15 + MOVL 20(R15), AX + XORL R12, R12 CMPL AX, $310 - JG LBB9_84 + JG LBB9_69 CMPL AX, $-330 JGE LBB9_5 XORL R14, R14 - JMP LBB9_84 + JMP LBB9_69 LBB9_4: XORL R14, R14 - XORL R15, R15 - JMP LBB9_84 + XORL R12, R12 + JMP LBB9_69 LBB9_5: TESTL AX, AX - MOVQ R13, -48(BP) - JLE LBB9_20 - XORL R15, R15 - LONG $0x912d8d4c; WORD $0x0063; BYTE $0x00 // leaq $25489(%rip), %r13 /* _POW_TAB(%rip) */ - JMP LBB9_9 + MOVQ BX, -48(BP) + JLE LBB9_12 + XORL R12, R12 + LONG $0x47358d4c; WORD $0x005e; BYTE $0x00 // leaq $24135(%rip), %r14 /* _POW_TAB(%rip) */ + JMP LBB9_8 -LBB9_7: - NEGL BX - MOVQ R12, DI - MOVL BX, SI - LONG $0x0036aee8; BYTE $0x00 // callq _right_shift - -LBB9_8: - ADDL R14, R15 - MOVL 20(R12), AX - TESTL AX, AX - JLE LBB9_20 - -LBB9_9: - MOVL $27, R14 - CMPL AX, $8 - JG LBB9_11 +LBB9_10: MOVL AX, AX - MOVL 0(R13)(AX*4), R14 + MOVL 0(R14)(AX*4), BX + CMPL 16(R15), $0 + JE LBB9_7 LBB9_11: - TESTL R14, R14 - JE LBB9_8 - CMPL 16(R12), $0 - JE LBB9_8 - MOVL R14, BX - NEGL BX - TESTL R14, R14 - JS LBB9_16 - CMPL R14, $61 - JL LBB9_7 + MOVQ R15, DI + MOVL BX, SI + LONG $0x003134e8; BYTE $0x00 // callq _right_shift -LBB9_15: - MOVQ R12, DI - MOVL $60, SI - LONG $0x003666e8; BYTE $0x00 // callq _right_shift - LEAL 60(BX), AX - CMPL BX, $-120 - MOVL AX, BX - JL LBB9_15 +LBB9_7: + ADDL BX, R12 + MOVL 20(R15), AX + TESTL AX, AX + JLE LBB9_12 + +LBB9_8: + CMPL AX, $8 + JLE LBB9_10 + MOVL $27, BX + CMPL 16(R15), $0 + JNE LBB9_11 JMP LBB9_7 -LBB9_16: - CMPL R14, $-61 - JG LBB9_18 - -LBB9_17: - MOVQ R12, DI - MOVL $60, SI - LONG $0x0034d8e8; BYTE $0x00 // callq _left_shift - LEAL -60(BX), SI - CMPL BX, $120 - MOVL SI, BX - JG LBB9_17 - JMP LBB9_19 +LBB9_12: + LONG $0x09358d4c; WORD $0x005e; BYTE $0x00 // leaq $24073(%rip), %r14 /* _POW_TAB(%rip) */ + JMP LBB9_14 LBB9_18: - MOVL BX, SI - -LBB9_19: - MOVQ R12, DI - LONG $0x0034c2e8; BYTE $0x00 // callq _left_shift - JMP LBB9_8 + MOVL $27, BX + CMPL 16(R15), $0 + JE LBB9_13 LBB9_20: - LONG $0xfd358d4c; WORD $0x0062; BYTE $0x00 // leaq $25341(%rip), %r14 /* _POW_TAB(%rip) */ - JMP LBB9_23 + MOVQ R15, DI + MOVL BX, SI + LONG $0x002f58e8; BYTE $0x00 // callq _left_shift + MOVL 20(R15), AX + +LBB9_13: + SUBL BX, R12 + +LBB9_14: + TESTL AX, AX + JS LBB9_17 + JNE LBB9_21 + MOVQ 0(R15), CX + CMPB 0(CX), $53 + JL LBB9_19 + JMP LBB9_21 + +LBB9_17: + CMPL AX, $-8 + JL LBB9_18 + +LBB9_19: + MOVL AX, CX + NEGL CX + MOVL 0(R14)(CX*4), BX + CMPL 16(R15), $0 + JNE LBB9_20 + JMP LBB9_13 LBB9_21: - MOVQ R12, DI - LONG $0x0034afe8; BYTE $0x00 // callq _left_shift + CMPL R12, $-1022 + JG LBB9_27 + CMPL 16(R15), $0 + MOVQ -48(BP), BX + JE LBB9_29 + CMPL R12, $-1082 + JG LBB9_30 + ADDL $961, R12 -LBB9_22: - SUBL R13, R15 - MOVL 20(R12), AX - -LBB9_23: - TESTL AX, AX - JS LBB9_26 - JNE LBB9_37 - MOVQ 0(R12), CX - CMPB 0(CX), $53 - JL LBB9_27 - JMP LBB9_37 - -LBB9_26: - MOVL $27, R13 - CMPL AX, $-8 - JL LBB9_28 +LBB9_25: + MOVQ R15, DI + MOVL $60, SI + LONG $0x003099e8; BYTE $0x00 // callq _right_shift + ADDL $60, R12 + CMPL R12, $-120 + JL LBB9_25 + ADDL $60, R12 + JMP LBB9_31 LBB9_27: - NEGL AX - WORD $0x9848 // cltq - MOVL 0(R14)(AX*4), R13 + CMPL R12, $1024 + MOVQ -48(BP), BX + JG LBB9_66 + ADDL $-1, R12 + MOVL R12, R14 + JMP LBB9_32 -LBB9_28: - TESTL R13, R13 - JE LBB9_22 - CMPL 16(R12), $0 - JE LBB9_22 - TESTL R13, R13 - JLE LBB9_34 - MOVL R13, SI - CMPL R13, $61 - JL LBB9_21 - MOVL R13, BX +LBB9_29: + MOVL $-1022, R14 + JMP LBB9_34 -LBB9_33: - MOVQ R12, DI - MOVL $60, SI - LONG $0x003454e8; BYTE $0x00 // callq _left_shift - LEAL -60(BX), SI - CMPL BX, $120 - MOVL SI, BX - JG LBB9_33 - JMP LBB9_21 +LBB9_30: + ADDL $1021, R12 + +LBB9_31: + NEGL R12 + MOVQ R15, DI + MOVL R12, SI + LONG $0x003052e8; BYTE $0x00 // callq _right_shift + MOVL $-1022, R14 + +LBB9_32: + CMPL 16(R15), $0 + JE LBB9_34 + MOVQ R15, DI + MOVL $53, SI + LONG $0x002e99e8; BYTE $0x00 // callq _left_shift LBB9_34: - MOVL R13, BX - CMPL R13, $-61 - JG LBB9_36 - -LBB9_35: - MOVQ R12, DI - MOVL $60, SI - LONG $0x0035a1e8; BYTE $0x00 // callq _right_shift - LEAL 60(BX), AX - CMPL BX, $-120 - MOVL AX, BX - JL LBB9_35 - -LBB9_36: - NEGL BX - MOVQ R12, DI - MOVL BX, SI - LONG $0x00358be8; BYTE $0x00 // callq _right_shift - JMP LBB9_22 + MOVL 20(R15), AX + MOVQ $-1, R12 + CMPL AX, $20 + JG LBB9_68 + TESTL AX, AX + JLE LBB9_40 + MOVL 16(R15), DX + XORL SI, SI + TESTL DX, DX + WORD $0x4e0f; BYTE $0xd6 // cmovlel %esi, %edx + LEAQ -1(AX), R9 + CMPQ R9, DX + LONG $0xca430f4c // cmovaeq %rdx, %r9 + LEAL 1(R9), R8 + XORL R12, R12 LBB9_37: - CMPL R15, $-1022 - JG LBB9_43 - CMPL 16(R12), $0 - MOVQ -48(BP), R13 - MOVQ $4503599627370496, BX - JE LBB9_45 - CMPL R15, $-1082 - JG LBB9_46 - ADDL $961, R15 + CMPQ DX, SI + JE LBB9_41 + LEAQ 0(R12)(R12*4), DI + MOVQ 0(R15), CX + MOVBQSX 0(CX)(SI*1), CX + LEAQ 0(CX)(DI*2), R12 + ADDQ $-48, R12 + ADDQ $1, SI + CMPQ AX, SI + JNE LBB9_37 + MOVL R8, R9 + JMP LBB9_41 + +LBB9_40: + XORL R9, R9 + XORL R12, R12 LBB9_41: - MOVQ R12, DI - MOVL $60, SI - LONG $0x00354ae8; BYTE $0x00 // callq _right_shift - ADDL $60, R15 - CMPL R15, $-120 - JL LBB9_41 - ADDL $60, R15 - JMP LBB9_47 - -LBB9_43: - CMPL R15, $1024 - MOVQ -48(BP), R13 - MOVQ $4503599627370496, BX - JG LBB9_81 - DECL R15 - MOVL R15, R14 - JMP LBB9_48 - -LBB9_45: - MOVL $-1022, R14 - JMP LBB9_50 - -LBB9_46: - ADDL $1021, R15 - -LBB9_47: - NEGL R15 - MOVQ R12, DI - MOVL R15, SI - LONG $0x0034fae8; BYTE $0x00 // callq _right_shift - MOVL $-1022, R14 - -LBB9_48: - CMPL 16(R12), $0 - JE LBB9_50 - MOVQ R12, DI - MOVL $53, SI - LONG $0x003370e8; BYTE $0x00 // callq _left_shift - -LBB9_50: - MOVLQSX 20(R12), R10 - MOVQ $-1, R15 - CMPQ R10, $20 - JG LBB9_83 - MOVL R10, CX - TESTL R10, R10 - JLE LBB9_55 - MOVLQSX 16(R12), SI - XORL DX, DX - XORL R15, R15 - -LBB9_53: - CMPQ DX, SI - JGE LBB9_56 - LEAQ 0(R15)(R15*4), AX - MOVQ 0(R12), DI - MOVBQSX 0(DI)(DX*1), DI - LEAQ -48(DI)(AX*2), R15 - INCQ DX - CMPQ CX, DX - JNE LBB9_53 - JMP LBB9_56 - -LBB9_55: - XORL DX, DX - XORL R15, R15 - -LBB9_56: - CMPL CX, DX - JLE LBB9_69 - MOVL R10, R9 - SUBL DX, R9 - CMPL R9, $16 - JB LBB9_67 - MOVL R9, R8 - QUAD $0xfffffd09056ffac5 // vmovdqu $-759(%rip), %xmm0 /* LCPI9_0(%rip) */ - LONG $0x22f9c3c4; WORD $0x00c7 // vpinsrq $0, %r15, %xmm0, %xmm0 + CMPL AX, R9 + JLE LBB9_54 + MOVL AX, DX + SUBL R9, DX + CMPL DX, $16 + JB LBB9_52 + MOVL DX, R8 + QUAD $0xfffffdc3056ffac5 // vmovdqu $-573(%rip), %xmm0 /* LCPI9_0(%rip) */ + LONG $0x22f9c3c4; WORD $0x00c4 // vpinsrq $0, %r12, %xmm0, %xmm0 ANDL $-16, R8 - QUAD $0xfffcf505027de3c4; WORD $0xf0ff // vpblendd $240, $-779(%rip), %ymm0, %ymm0 /* LCPI9_0(%rip) */ - LEAL -16(R8), DI - MOVL DI, AX - SHRL $4, AX - INCL AX - MOVL AX, SI + QUAD $0xfffdaf05027de3c4; WORD $0xf0ff // vpblendd $240, $-593(%rip), %ymm0, %ymm0 /* LCPI9_0(%rip) */ + LEAL -16(R8), CX + MOVL CX, DI + SHRL $4, DI + ADDL $1, DI + MOVL DI, SI ANDL $3, SI - CMPL DI, $48 - JAE LBB9_60 - QUAD $0xfffcf715597de2c4; BYTE $0xff // vpbroadcastq $-777(%rip), %ymm2 /* LCPI9_1(%rip) */ + CMPL CX, $48 + JAE LBB9_45 + QUAD $0xfffdb015597de2c4; BYTE $0xff // vpbroadcastq $-592(%rip), %ymm2 /* LCPI9_1(%rip) */ LONG $0xda6ffdc5 // vmovdqa %ymm2, %ymm3 LONG $0xca6ffdc5 // vmovdqa %ymm2, %ymm1 - JMP LBB9_62 + JMP LBB9_47 -LBB9_60: - MOVL SI, DI - SUBL AX, DI - QUAD $0xfffce015597de2c4; BYTE $0xff // vpbroadcastq $-800(%rip), %ymm2 /* LCPI9_1(%rip) */ - QUAD $0xfffcdf25597de2c4; BYTE $0xff // vpbroadcastq $-801(%rip), %ymm4 /* LCPI9_2(%rip) */ +LBB9_45: + ANDL $-4, DI + NEGL DI + QUAD $0xfffd9815597de2c4; BYTE $0xff // vpbroadcastq $-616(%rip), %ymm2 /* LCPI9_1(%rip) */ + QUAD $0xfffd9725597de2c4; BYTE $0xff // vpbroadcastq $-617(%rip), %ymm4 /* LCPI9_2(%rip) */ LONG $0xda6ffdc5 // vmovdqa %ymm2, %ymm3 LONG $0xca6ffdc5 // vmovdqa %ymm2, %ymm1 -LBB9_61: +LBB9_46: LONG $0xecf4fdc5 // vpmuludq %ymm4, %ymm0, %ymm5 LONG $0xd073fdc5; BYTE $0x20 // vpsrlq $32, %ymm0, %ymm0 LONG $0xc4f4fdc5 // vpmuludq %ymm4, %ymm0, %ymm0 @@ -4134,15 +4181,15 @@ LBB9_61: LONG $0xf173f5c5; BYTE $0x20 // vpsllq $32, %ymm1, %ymm1 LONG $0xc9d4d5c5 // vpaddq %ymm1, %ymm5, %ymm1 ADDL $4, DI - JNE LBB9_61 + JNE LBB9_46 -LBB9_62: +LBB9_47: TESTL SI, SI - JE LBB9_65 + JE LBB9_50 NEGL SI - QUAD $0xfffc7325597de2c4; BYTE $0xff // vpbroadcastq $-909(%rip), %ymm4 /* LCPI9_3(%rip) */ + QUAD $0xfffd2b25597de2c4; BYTE $0xff // vpbroadcastq $-725(%rip), %ymm4 /* LCPI9_3(%rip) */ -LBB9_64: +LBB9_49: LONG $0xecf4fdc5 // vpmuludq %ymm4, %ymm0, %ymm5 LONG $0xd073fdc5; BYTE $0x20 // vpsrlq $32, %ymm0, %ymm0 LONG $0xc4f4fdc5 // vpmuludq %ymm4, %ymm0, %ymm0 @@ -4164,9 +4211,9 @@ LBB9_64: LONG $0xf173f5c5; BYTE $0x20 // vpsllq $32, %ymm1, %ymm1 LONG $0xc9d4d5c5 // vpaddq %ymm1, %ymm5, %ymm1 INCL SI - JNE LBB9_64 + JNE LBB9_49 -LBB9_65: +LBB9_50: LONG $0xd273ddc5; BYTE $0x20 // vpsrlq $32, %ymm2, %ymm4 LONG $0xe0f4ddc5 // vpmuludq %ymm0, %ymm4, %ymm4 LONG $0xd073d5c5; BYTE $0x20 // vpsrlq $32, %ymm0, %ymm5 @@ -4200,91 +4247,92 @@ LBB9_65: LONG $0xf273e9c5; BYTE $0x20 // vpsllq $32, %xmm2, %xmm2 LONG $0xc1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm0 LONG $0xc2d4f9c5 // vpaddq %xmm2, %xmm0, %xmm0 - LONG $0xc870f9c5; BYTE $0x4e // vpshufd $78, %xmm0, %xmm1 + LONG $0xc870f9c5; BYTE $0xee // vpshufd $238, %xmm0, %xmm1 LONG $0xd073e9c5; BYTE $0x20 // vpsrlq $32, %xmm0, %xmm2 LONG $0xd1f4e9c5 // vpmuludq %xmm1, %xmm2, %xmm2 - LONG $0xd873e1c5; BYTE $0x0c // vpsrldq $12, %xmm0, %xmm3 + LONG $0xd870f9c5; BYTE $0xff // vpshufd $255, %xmm0, %xmm3 LONG $0xdbf4f9c5 // vpmuludq %xmm3, %xmm0, %xmm3 LONG $0xd2d4e1c5 // vpaddq %xmm2, %xmm3, %xmm2 LONG $0xf273e9c5; BYTE $0x20 // vpsllq $32, %xmm2, %xmm2 LONG $0xc1f4f9c5 // vpmuludq %xmm1, %xmm0, %xmm0 LONG $0xc2d4f9c5 // vpaddq %xmm2, %xmm0, %xmm0 - LONG $0x7ef9c1c4; BYTE $0xc7 // vmovq %xmm0, %r15 - CMPL R9, R8 - JE LBB9_69 - ADDL R8, DX + LONG $0x7ef9c1c4; BYTE $0xc4 // vmovq %xmm0, %r12 + CMPL DX, R8 + JE LBB9_54 + ADDL R8, R9 + +LBB9_52: + MOVL AX, DX + SUBL R9, DX + +LBB9_53: + ADDQ R12, R12 + LEAQ 0(R12)(R12*4), R12 + ADDL $-1, DX + JNE LBB9_53 + +LBB9_54: + TESTL AX, AX + JS LBB9_62 + MOVL 16(R15), CX + CMPL CX, AX + JLE LBB9_62 + MOVQ 0(R15), SI + MOVB 0(SI)(AX*1), DX + CMPB DX, $53 + JNE LBB9_63 + LEAL 1(AX), DI + CMPL DI, CX + JNE LBB9_63 + CMPL 28(R15), $0 + SETNE CX + JNE LBB9_64 + TESTL AX, AX + JLE LBB9_64 + ADDL $-1, AX + MOVB 0(SI)(AX*1), CX + ANDB $1, CX + JMP LBB9_64 + +LBB9_62: + XORL CX, CX + +LBB9_64: + MOVBLZX CX, AX + ADDQ AX, R12 + MOVQ $9007199254740992, AX + CMPQ R12, AX + JNE LBB9_68 + CMPL R14, $1022 + JLE LBB9_67 + +LBB9_66: + XORL R12, R12 + MOVQ $9218868437227405312, R14 + JMP LBB9_69 LBB9_67: - MOVL CX, SI - SUBL DX, SI + ADDL $1, R14 + MOVQ R13, R12 LBB9_68: - ADDQ R15, R15 - LEAQ 0(R15)(R15*4), R15 - DECL SI - JNE LBB9_68 - -LBB9_69: - TESTL CX, CX - JS LBB9_77 - MOVL 16(R12), AX - CMPL AX, CX - JLE LBB9_77 - MOVQ 0(R12), SI - MOVB 0(SI)(CX*1), DX - LEAL 1(R10), DI - CMPL DI, AX - JNE LBB9_78 - CMPB DX, $53 - JNE LBB9_78 - CMPL 28(R12), $0 - SETNE DX - JNE LBB9_79 - TESTL CX, CX - JLE LBB9_79 - MOVB -1(R10)(SI*1), DX - ANDB $1, DX - JMP LBB9_79 - -LBB9_77: - XORL DX, DX - -LBB9_79: - MOVBLZX DX, AX - ADDQ AX, R15 - MOVQ $9007199254740992, AX - CMPQ R15, AX - JNE LBB9_83 - CMPL R14, $1022 - JLE LBB9_82 - -LBB9_81: - XORL R15, R15 - MOVQ $9218868437227405312, R14 - JMP LBB9_84 - -LBB9_82: - INCL R14 - MOVQ BX, R15 - -LBB9_83: - MOVQ R15, AX - ANDQ BX, AX + MOVQ R12, AX + ANDQ R13, AX ADDL $1023, R14 ANDL $2047, R14 SHLQ $52, R14 TESTQ AX, AX LONG $0xf0440f4c // cmoveq %rax, %r14 -LBB9_84: - DECQ BX - ANDQ R15, BX - ORQ R14, BX +LBB9_69: + ADDQ $-1, R13 + ANDQ R12, R13 + ORQ R14, R13 MOVQ $-9223372036854775808, AX - ORQ BX, AX - CMPL 24(R12), $0 - LONG $0xc3440f48 // cmoveq %rbx, %rax - MOVQ AX, 0(R13) + ORQ R13, AX + CMPL 24(R15), $0 + LONG $0xc5440f49 // cmoveq %r13, %rax + MOVQ AX, 0(BX) XORL AX, AX ADDQ $8, SP BYTE $0x5b // popq %rbx @@ -4296,10 +4344,10 @@ LBB9_84: WORD $0xf8c5; BYTE $0x77 // vzeroupper RET -LBB9_78: - CMPB DX, $52 - SETGT DX - JMP LBB9_79 +LBB9_63: + CMPB DX, $53 + SETGE CX + JMP LBB9_64 _atof_native: BYTE $0x55 // pushq %rbp @@ -4321,445 +4369,441 @@ _atof_native: LBB10_4: MOVQ -32(BP), CX MOVB $0, 0(CX)(AX*1) - INCQ AX + ADDQ $1, AX CMPQ -24(BP), AX JA LBB10_4 LBB10_5: LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 LONG $0x4511f8c5; BYTE $0xf0 // vmovups %xmm0, $-16(%rbp) + XORL DX, DX CMPB 0(DI), $45 - JNE LBB10_6 + JNE LBB10_7 MOVL $1, -8(BP) MOVL $1, AX CMPQ AX, SI - JL LBB10_9 + JL LBB10_8 + JMP LBB10_39 -LBB10_41: - MOVL $0, -12(BP) - JMP LBB10_40 - -LBB10_6: +LBB10_7: XORL AX, AX CMPQ AX, SI - JGE LBB10_41 + JGE LBB10_39 -LBB10_9: +LBB10_8: MOVB $1, R11 XORL R9, R9 XORL R10, R10 XORL R8, R8 - JMP LBB10_10 + JMP LBB10_12 -LBB10_13: - DECL -12(BP) - XORL R10, R10 +LBB10_20: + MOVL $1, -4(BP) -LBB10_22: - INCQ AX +LBB10_11: + ADDQ $1, AX CMPQ AX, SI SETLT R11 CMPQ SI, AX - JE LBB10_23 + JE LBB10_22 -LBB10_10: +LBB10_12: MOVBLZX 0(DI)(AX*1), CX LEAL -48(CX), DX CMPB DX, $9 - JA LBB10_19 - TESTL R10, R10 - JNE LBB10_14 + JA LBB10_17 CMPB CX, $48 - JE LBB10_13 + JNE LBB10_19 + TESTL R10, R10 + JE LBB10_21 + MOVLQSX R9, R11 + CMPQ -24(BP), R11 + JA LBB10_9 + JMP LBB10_10 -LBB10_14: - MOVLQSX R9, R10 - CMPQ -24(BP), R10 - JBE LBB10_16 - MOVQ -32(BP), DX - MOVB CX, 0(DX)(R10*1) - MOVL -16(BP), R9 - INCL R9 - MOVL R9, -16(BP) - MOVL R9, R10 - JMP LBB10_22 - -LBB10_19: +LBB10_17: CMPB CX, $46 - JNE LBB10_20 + JNE LBB10_23 MOVL R10, -12(BP) MOVL $1, R8 - JMP LBB10_22 + JMP LBB10_11 -LBB10_16: - CMPB CX, $48 - JNE LBB10_18 - MOVL R9, R10 - JMP LBB10_22 +LBB10_19: + MOVLQSX R10, R11 + CMPQ -24(BP), R11 + JBE LBB10_20 -LBB10_18: - MOVL $1, -4(BP) +LBB10_9: + MOVQ -32(BP), DX + MOVB CX, 0(DX)(R11*1) + MOVL -16(BP), R9 + ADDL $1, R9 + MOVL R9, -16(BP) + +LBB10_10: MOVL R9, R10 - JMP LBB10_22 + JMP LBB10_11 + +LBB10_21: + ADDL $-1, -12(BP) + XORL R10, R10 + JMP LBB10_11 + +LBB10_22: + MOVQ SI, AX LBB10_23: - MOVL SI, CX - MOVQ SI, AX TESTL R8, R8 + JE LBB10_25 + TESTB $1, R11 JNE LBB10_26 + JMP LBB10_40 LBB10_25: - MOVL R9, -12(BP) - -LBB10_26: + MOVL R9, -12(BP) TESTB $1, R11 JE LBB10_40 - MOVB 0(DI)(CX*1), CX - ORB $32, CX - CMPB CX, $101 - JNE LBB10_40 - MOVL AX, DX - MOVB 1(DI)(DX*1), CX - CMPB CX, $45 - JE LBB10_32 - MOVL $1, R8 - CMPB CX, $43 - JNE LBB10_30 - ADDL $2, AX - JMP LBB10_33 -LBB10_20: - MOVQ AX, CX - TESTL R8, R8 - JNE LBB10_26 - JMP LBB10_25 +LBB10_26: + MOVL AX, DX + MOVB 0(DI)(DX*1), CX + ORB $32, CX + CMPB CX, $101 + JNE LBB10_40 + MOVB 1(DI)(DX*1), CX + CMPB CX, $45 + JE LBB10_30 + MOVL $1, R8 + CMPB CX, $43 + JNE LBB10_32 + ADDL $2, AX + JMP LBB10_31 -LBB10_32: +LBB10_30: ADDL $2, AX MOVL $-1, R8 -LBB10_33: +LBB10_31: MOVL AX, DX - MOVLQSX DX, DX - XORL R9, R9 - CMPQ DX, SI - JL LBB10_35 - JMP LBB10_39 + MOVLQSX DX, AX + XORL DX, DX + CMPQ AX, SI + JL LBB10_33 + JMP LBB10_38 -LBB10_30: - INCQ DX - MOVLQSX DX, DX - XORL R9, R9 - CMPQ DX, SI - JGE LBB10_39 +LBB10_32: + ADDQ $1, DX + MOVLQSX DX, AX + XORL DX, DX + CMPQ AX, SI + JGE LBB10_38 -LBB10_35: - XORL R9, R9 +LBB10_33: + XORL DX, DX -LBB10_36: - CMPL R9, $9999 - JG LBB10_39 - MOVBLZX 0(DI)(DX*1), CX - LEAL -48(CX), AX - CMPB AX, $9 - JA LBB10_39 - LEAL 0(R9)(R9*4), AX - LEAL -48(CX)(AX*2), R9 - INCQ DX - CMPQ SI, DX - JNE LBB10_36 +LBB10_34: + MOVBLSX 0(DI)(AX*1), CX + CMPL CX, $48 + JL LBB10_38 + CMPB CX, $57 + JG LBB10_38 + CMPL DX, $9999 + JG LBB10_38 + LEAL 0(DX)(DX*4), DX + LEAL 0(CX)(DX*2), DX + ADDL $-48, DX + ADDQ $1, AX + CMPQ SI, AX + JNE LBB10_34 + +LBB10_38: + IMULL R8, DX + ADDL -12(BP), DX LBB10_39: - IMULL R8, R9 - ADDL R9, -12(BP) + MOVL DX, -12(BP) LBB10_40: LEAQ -32(BP), DI LEAQ -40(BP), SI - LONG $0xfff8cbe8; BYTE $0xff // callq _decimal_to_f64 + LONG $0xfff985e8; BYTE $0xff // callq _decimal_to_f64 LONG $0x4510fbc5; BYTE $0xd8 // vmovsd $-40(%rbp), %xmm0 ADDQ $48, SP BYTE $0x5d // popq %rbp RET -LCPI11_0: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - -LCPI11_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' - -LCPI11_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' - -LCPI11_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' - -LCPI11_4: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - -LCPI11_5: - QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' - -LCPI11_6: - QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' - -LCPI11_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 $0x5541 // pushq %r13 - WORD $0x5441 // pushq %r12 - BYTE $0x53 // pushq %rbx - SUBQ $40, SP - MOVQ CX, R10 - MOVQ DX, R12 - MOVQ SI, R13 - MOVQ DI, R15 - MOVQ DX, -48(BP) - MOVQ DI, -80(BP) - MOVQ SI, -72(BP) - CMPQ DX, SI - JAE LBB11_5 - MOVB 0(R15)(R12*1), AX - CMPB AX, $13 - JE LBB11_5 - CMPB AX, $32 - JE LBB11_5 - LEAL -9(AX), CX - CMPB CX, $1 - JBE LBB11_5 - MOVQ R12, BX - JMP LBB11_48 + 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 $40, SP + MOVQ R8, BX + MOVQ CX, R14 + MOVQ SI, R12 + MOVQ DI, R15 + MOVQ DX, -48(BP) + MOVQ DI, -80(BP) + MOVQ SI, -72(BP) + LEAQ -80(BP), DI + LEAQ -48(BP), SI + LONG $0x0005d1e8; BYTE $0x00 // callq _advance_ns + MOVBLSX AX, AX + CMPL AX, $125 + JA LBB11_11 + LONG $0x060d8d48; WORD $0x0003; BYTE $0x00 // leaq $774(%rip), %rcx /* LJTI11_0(%rip) */ + MOVLQSX 0(CX)(AX*4), AX + ADDQ CX, AX + JMP AX -LBB11_5: - LEAQ 1(R12), BX - CMPQ BX, R13 - JAE LBB11_9 - MOVB 0(R15)(BX*1), AX - CMPB AX, $13 - JE LBB11_9 - CMPB AX, $32 - JE LBB11_9 - LEAL -9(AX), CX - CMPB CX, $1 - JA LBB11_48 - -LBB11_9: - LEAQ 2(R12), BX - CMPQ BX, R13 - JAE LBB11_13 - MOVB 0(R15)(BX*1), AX - CMPB AX, $13 - JE LBB11_13 - CMPB AX, $32 - JE LBB11_13 - LEAL -9(AX), CX - CMPB CX, $1 - JA LBB11_48 - -LBB11_13: - LEAQ 3(R12), BX - CMPQ BX, R13 - JAE LBB11_17 - MOVB 0(R15)(BX*1), AX - CMPB AX, $13 - JE LBB11_17 - CMPB AX, $32 - JE LBB11_17 - LEAL -9(AX), CX - CMPB CX, $1 - JA LBB11_48 - -LBB11_17: - LEAQ 4(R12), CX - CMPQ CX, R13 - JAE LBB11_43 - LEAQ 0(R15)(CX*1), BX - MOVQ R13, AX - SUBQ CX, AX - JE LBB11_26 - MOVL BX, CX - ANDL $31, CX - TESTQ CX, CX - JE LBB11_26 - LEAQ 0(R15)(R12*1), CX - MOVQ R13, AX - SUBQ R12, AX - LEAQ -5(AX), DX - XORL DI, DI - MOVQ $4294977024, R9 - -LBB11_21: - MOVBLSX 4(CX)(DI*1), SI - CMPL SI, $32 - JA LBB11_45 - BTQ SI, R9 - JAE LBB11_45 - LEAQ 1(DI), SI - CMPQ DX, DI - JE LBB11_25 - LEAQ 5(CX)(DI*1), BX - ANDL $31, BX - MOVQ SI, DI - TESTQ BX, BX - JNE LBB11_21 - -LBB11_25: - LEAQ 4(SI)(CX*1), BX - SUBQ SI, AX - ADDQ $-4, AX - -LBB11_26: - CMPQ AX, $32 - JB LBB11_31 - LEAQ -32(AX), CX - MOVQ CX, DX - ANDQ $-32, DX - LEAQ 32(DX)(BX*1), DX - ANDL $31, CX - QUAD $0xfffffdf4056ffec5 // vmovdqu $-524(%rip), %ymm0 /* LCPI11_0(%rip) */ - QUAD $0xfffffe0c0d6ffec5 // vmovdqu $-500(%rip), %ymm1 /* LCPI11_1(%rip) */ - QUAD $0xfffffe24156ffec5 // vmovdqu $-476(%rip), %ymm2 /* LCPI11_2(%rip) */ - QUAD $0xfffffe3c1d6ffec5 // vmovdqu $-452(%rip), %ymm3 /* LCPI11_3(%rip) */ - -LBB11_28: - LONG $0x236ffdc5 // vmovdqa (%rbx), %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 $0xf4d7fdc5 // vpmovmskb %ymm4, %esi - CMPL SI, $-1 - JNE LBB11_44 - ADDQ $32, BX - ADDQ $-32, AX - CMPQ AX, $31 - JA LBB11_28 - MOVQ CX, AX - MOVQ DX, BX - -LBB11_31: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - CMPQ AX, $16 - JB LBB11_36 - LEAQ -16(AX), CX - MOVQ CX, DX - ANDQ $-16, DX - LEAQ 16(DX)(BX*1), DX - ANDL $15, CX - QUAD $0xfffffdf7056ffac5 // vmovdqu $-521(%rip), %xmm0 /* LCPI11_4(%rip) */ - QUAD $0xfffffdff0d6ffac5 // vmovdqu $-513(%rip), %xmm1 /* LCPI11_5(%rip) */ - QUAD $0xfffffe07156ffac5 // vmovdqu $-505(%rip), %xmm2 /* LCPI11_6(%rip) */ - QUAD $0xfffffe0f1d6ffac5 // vmovdqu $-497(%rip), %xmm3 /* LCPI11_7(%rip) */ - -LBB11_33: - LONG $0x236ff9c5 // vmovdqa (%rbx), %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 $0xf4d7f9c5 // vpmovmskb %xmm4, %esi - CMPW SI, $-1 - JNE LBB11_96 - ADDQ $16, BX - ADDQ $-16, AX - CMPQ AX, $15 - JA LBB11_33 - MOVQ CX, AX - MOVQ DX, BX - -LBB11_36: - TESTQ AX, AX - JE LBB11_42 - LEAQ 0(BX)(AX*1), CX - INCQ BX - MOVQ $4294977024, DX - -LBB11_38: - MOVBLSX -1(BX), SI - CMPL SI, $32 - JA LBB11_101 - BTQ SI, DX - JAE LBB11_101 - DECQ AX - INCQ BX - TESTQ AX, AX - JNE LBB11_38 - MOVQ CX, BX - -LBB11_42: - SUBQ R15, BX - JMP LBB11_46 - -LBB11_43: - MOVQ CX, -48(BP) - MOVQ CX, R12 - JMP LBB11_52 - -LBB11_44: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - SUBQ R15, BX - NOTL SI - MOVLQSX SI, AX - BSFQ AX, AX - ADDQ AX, BX - JMP LBB11_46 - -LBB11_45: - ADDQ DI, CX - MOVQ R15, AX - NOTQ AX - LEAQ 5(AX)(CX*1), BX - -LBB11_46: - CMPQ BX, R13 - JAE LBB11_52 - MOVB 0(R15)(BX*1), AX - -LBB11_48: - LEAQ 1(BX), R12 - MOVQ R12, -48(BP) - MOVBLSX AX, CX - CMPL CX, $125 - JA LBB11_61 - LEAQ 0(R15)(BX*1), R14 - LONG $0xf8158d48; WORD $0x0002; BYTE $0x00 // leaq $760(%rip), %rdx /* LJTI11_0(%rip) */ - MOVLQSX 0(DX)(CX*4), CX - ADDQ DX, CX - JMP CX - -LBB11_50: - MOVQ BX, -48(BP) - TESTB $2, R8 - JNE LBB11_55 +LBB11_2: + MOVQ R14, -56(BP) + MOVQ -48(BP), R14 + LEAQ -1(R14), R13 + MOVQ R13, -48(BP) + TESTB $2, BX + JNE LBB11_4 LEAQ -80(BP), DI LEAQ -48(BP), SI - MOVQ R10, DX - LONG $0x00083ae8; BYTE $0x00 // callq _vnumber + MOVQ -56(BP), DX + LONG $0x001120e8; BYTE $0x00 // callq _vnumber MOVQ -48(BP), BX - JMP LBB11_54 + JMP LBB11_49 -LBB11_52: - MOVQ $1, 0(R10) +LBB11_4: + XORL AX, AX + CMPB 0(R15)(R13*1), $45 + LEAQ 0(R15)(R13*1), BX + SETEQ AX + ADDQ AX, BX + SUBQ AX, R12 + JE LBB11_44 + CMPQ R13, R12 + JAE LBB11_7 + MOVB 0(BX), AX + ADDB $-48, AX + CMPB AX, $9 + JA LBB11_46 -LBB11_53: +LBB11_7: + MOVQ BX, DI + MOVQ R12, SI + LONG $0x00216de8; BYTE $0x00 // callq _do_skip_number + TESTQ AX, AX + JS LBB11_45 + ADDQ AX, BX + SUBQ R15, BX + TESTQ R14, R14 + JLE LBB11_48 + MOVQ -56(BP), AX + MOVQ $8, 0(AX) + MOVQ R13, 24(AX) + JMP LBB11_49 + +LBB11_10: + MOVQ $1, 0(R14) + MOVQ -48(BP), BX + JMP LBB11_49 + +LBB11_11: + MOVQ $-2, 0(R14) + MOVQ -48(BP), BX + ADDQ $-1, BX + JMP LBB11_49 + +LBB11_12: + MOVQ $-1, -64(BP) + MOVQ -48(BP), R15 + LEAQ -80(BP), DI + LEAQ -64(BP), DX + MOVQ R15, SI + MOVQ BX, CX + LONG $0x00081ce8; BYTE $0x00 // callq _advance_string + MOVQ AX, BX + TESTQ AX, AX + JS LBB11_33 + MOVQ BX, -48(BP) + MOVQ R15, 16(R14) + MOVQ -64(BP), AX + CMPQ AX, BX + MOVQ $-1, CX + LONG $0xc84c0f48 // cmovlq %rax, %rcx + MOVQ CX, 24(R14) + MOVL $7, AX + MOVQ AX, 0(R14) + JMP LBB11_49 + +LBB11_14: + TESTL BX, BX + MOVQ $-2, AX + MOVL $11, CX + JMP LBB11_32 + +LBB11_15: + TESTL BX, BX + MOVQ $-2, AX + MOVL $10, CX + JMP LBB11_32 + +LBB11_16: + MOVQ $5, 0(R14) + MOVQ -48(BP), BX + JMP LBB11_49 + +LBB11_17: + TESTL BX, BX + MOVQ $-2, AX + MOVL $12, CX + JMP LBB11_32 + +LBB11_18: + MOVQ -48(BP), BX + LEAQ -4(R12), CX + MOVQ $-1, AX + CMPQ BX, CX + JA LBB11_25 + MOVL 0(R15)(BX*1), CX + CMPL CX, $1702063201 + JNE LBB11_34 + ADDQ $4, BX + MOVL $4, AX + JMP LBB11_24 + +LBB11_21: + MOVQ -48(BP), BX + LEAQ -3(R12), CX + MOVQ $-1, AX + CMPQ BX, CX + JA LBB11_25 + MOVL -1(R15)(BX*1), CX + CMPL CX, $1819047278 + JNE LBB11_37 + ADDQ $3, BX + MOVL $2, AX + JMP LBB11_24 + +LBB11_27: + MOVQ -48(BP), BX + LEAQ -3(R12), CX + MOVQ $-1, AX + CMPQ BX, CX + JA LBB11_25 + MOVL -1(R15)(BX*1), CX + CMPL CX, $1702195828 + JNE LBB11_41 + ADDQ $3, BX + MOVL $3, AX + +LBB11_24: + MOVQ BX, R12 + +LBB11_25: + MOVQ R12, -48(BP) MOVQ R12, BX -LBB11_54: +LBB11_26: + MOVQ AX, 0(R14) + JMP LBB11_49 + +LBB11_30: + MOVQ $6, 0(R14) + MOVQ -48(BP), BX + JMP LBB11_49 + +LBB11_31: + TESTL BX, BX + MOVQ $-2, AX + MOVL $13, CX + +LBB11_32: + LONG $0xc8490f48 // cmovnsq %rax, %rcx + MOVQ CX, 0(R14) + SARL $31, BX + NOTL BX + MOVLQSX BX, BX + ADDQ -48(BP), BX + JMP LBB11_49 + +LBB11_33: + MOVQ R12, -48(BP) + MOVQ BX, 0(R14) + MOVQ R12, BX + JMP LBB11_49 + +LBB11_34: + MOVQ $-2, AX + CMPB CX, $97 + JNE LBB11_26 + MOVL $1702063201, CX + +LBB11_36: + SHRL $8, CX + MOVBLSX 1(R15)(BX*1), DX + ADDQ $1, BX + MOVBLZX CX, SI + CMPL SI, DX + JE LBB11_36 + JMP LBB11_40 + +LBB11_37: + ADDQ $-1, BX + MOVQ $-2, AX + CMPB CX, $110 + JNE LBB11_26 + MOVL $1819047278, CX + +LBB11_39: + SHRL $8, CX + MOVBLSX 1(R15)(BX*1), DX + ADDQ $1, BX + MOVBLZX CX, SI + CMPL SI, DX + JE LBB11_39 + JMP LBB11_40 + +LBB11_41: + ADDQ $-1, BX + MOVQ $-2, AX + CMPB CX, $116 + JNE LBB11_26 + MOVL $1702195828, CX + +LBB11_43: + SHRL $8, CX + MOVBLSX 1(R15)(BX*1), DX + ADDQ $1, BX + MOVBLZX CX, SI + CMPL SI, DX + JE LBB11_43 + +LBB11_40: + MOVQ BX, -48(BP) + MOVQ AX, 0(R14) + JMP LBB11_49 + +LBB11_44: + MOVQ $-1, R13 + JMP LBB11_47 + +LBB11_45: + NOTQ AX + ADDQ AX, BX + +LBB11_46: + MOVQ $-2, R13 + +LBB11_47: + SUBQ R15, BX + MOVQ BX, -48(BP) + +LBB11_48: + MOVQ -56(BP), AX + MOVQ R13, 0(AX) + +LBB11_49: MOVQ BX, AX ADDQ $40, SP BYTE $0x5b // popq %rbx @@ -4770,388 +4814,404 @@ LBB11_54: BYTE $0x5d // popq %rbp RET -LBB11_55: - XORL CX, CX - CMPB AX, $45 - SETEQ CX - ADDQ CX, R14 - SUBQ CX, R13 - JE LBB11_97 - MOVQ R10, -56(BP) - CMPQ BX, R13 - JAE LBB11_58 - MOVB 0(R14), AX - ADDB $-48, AX - CMPB AX, $10 - JAE LBB11_99 - -LBB11_58: - MOVQ R14, DI - MOVQ R13, SI - LONG $0x0021d2e8; BYTE $0x00 // callq _do_skip_number - TESTQ AX, AX - JS LBB11_98 - ADDQ AX, R14 - SUBQ R15, R14 - MOVQ R14, -48(BP) - TESTQ R12, R12 - MOVQ -56(BP), R10 - JLE LBB11_100 - MOVQ $8, 0(R10) - MOVQ BX, 24(R10) - MOVQ R14, BX - JMP LBB11_54 - -LBB11_61: - MOVQ $-2, 0(R10) - JMP LBB11_54 - -LBB11_62: - MOVQ R10, R14 - MOVQ $-1, -64(BP) - LEAQ -80(BP), DI - LEAQ -64(BP), DX - MOVQ R12, SI - LONG $0x0004d2e8; BYTE $0x00 // callq _advance_string - MOVQ AX, BX - TESTQ AX, AX - JS LBB11_81 - MOVQ BX, -48(BP) - MOVQ R12, 16(R14) - MOVQ -64(BP), AX - CMPQ AX, BX - MOVQ $-1, CX - LONG $0xc84c0f48 // cmovlq %rax, %rcx - MOVQ CX, 24(R14) - MOVL $7, AX - MOVQ AX, 0(R14) - JMP LBB11_54 - -LBB11_64: - XORL AX, AX - TESTL R8, R8 - SETPL AX - MOVL $11, CX - JMP LBB11_80 - -LBB11_65: - XORL AX, AX - TESTL R8, R8 - SETPL AX - MOVL $10, CX - JMP LBB11_80 - -LBB11_66: - MOVQ $5, 0(R10) - JMP LBB11_53 - -LBB11_67: - XORL AX, AX - TESTL R8, R8 - SETPL AX - MOVL $12, CX - JMP LBB11_80 - -LBB11_68: - LEAQ -4(R13), AX - CMPQ BX, AX - JAE LBB11_77 - MOVL 0(R15)(R12*1), CX - CMPL CX, $1702063201 - JNE LBB11_82 - ADDQ $5, BX - MOVQ BX, -48(BP) - MOVL $4, AX - JMP LBB11_94 - -LBB11_71: - LEAQ -3(R13), AX - CMPQ BX, AX - JAE LBB11_77 - MOVL 0(R14), CX - CMPL CX, $1819047278 - JNE LBB11_87 - ADDQ $4, BX - MOVQ BX, -48(BP) - MOVL $2, AX - JMP LBB11_94 - -LBB11_74: - LEAQ -3(R13), AX - CMPQ BX, AX - JAE LBB11_77 - MOVL 0(R14), CX - CMPL CX, $1702195828 - JNE LBB11_90 - ADDQ $4, BX - MOVQ BX, -48(BP) - MOVL $3, AX - JMP LBB11_94 - -LBB11_77: - MOVQ R13, -48(BP) - MOVQ $-1, AX - JMP LBB11_95 - -LBB11_78: - MOVQ $6, 0(R10) - JMP LBB11_53 - -LBB11_79: - XORL AX, AX - TESTL R8, R8 - SETPL AX - MOVL $13, CX - -LBB11_80: - MOVQ $-2, DX - LONG $0xd1480f48 // cmovsq %rcx, %rdx - MOVQ DX, 0(R10) - SUBQ AX, R12 - JMP LBB11_53 - -LBB11_81: - MOVQ R13, -48(BP) - MOVQ BX, 0(R14) - MOVQ R13, BX - JMP LBB11_54 - -LBB11_82: - MOVQ $-2, AX - CMPB CX, $97 - JNE LBB11_86 - MOVL $1702063201, CX - -LBB11_84: - SHRL $8, CX - MOVBLSX 1(R15)(R12*1), DX - INCQ R12 - MOVBLZX CX, SI - CMPL SI, DX - JE LBB11_84 - MOVQ R12, -48(BP) - -LBB11_86: - MOVQ R12, R13 - JMP LBB11_95 - -LBB11_87: - MOVQ BX, -48(BP) - MOVQ $-2, AX - CMPB CX, $110 - JNE LBB11_94 - MOVL $1819047278, CX - -LBB11_89: - SHRL $8, CX - MOVBLSX 1(R15)(BX*1), DX - INCQ BX - MOVBLZX CX, SI - CMPL SI, DX - JE LBB11_89 - JMP LBB11_93 - -LBB11_90: - MOVQ BX, -48(BP) - MOVQ $-2, AX - CMPB CX, $116 - JNE LBB11_94 - MOVL $1702195828, CX - -LBB11_92: - SHRL $8, CX - MOVBLSX 1(R15)(BX*1), DX - INCQ BX - MOVBLZX CX, SI - CMPL SI, DX - JE LBB11_92 - -LBB11_93: - MOVQ BX, -48(BP) - -LBB11_94: - MOVQ BX, R13 - -LBB11_95: - MOVQ AX, 0(R10) - MOVQ R13, BX - JMP LBB11_54 - -LBB11_96: - MOVWLZX SI, AX - SUBQ R15, BX - NOTL AX - BSFL AX, AX - ADDQ AX, BX - JMP LBB11_46 - -LBB11_97: - SUBQ R15, R14 - MOVQ R14, -48(BP) - MOVQ $-1, BX - JMP LBB11_100 - -LBB11_98: - NOTQ AX - ADDQ AX, R14 - -LBB11_99: - SUBQ R15, R14 - MOVQ R14, -48(BP) - MOVQ $-2, BX - MOVQ -56(BP), R10 - -LBB11_100: - MOVQ BX, 0(R10) - MOVQ R14, BX - JMP LBB11_54 - -LBB11_101: - MOVQ R15, AX - NOTQ AX - ADDQ AX, BX - JMP LBB11_46 - -// .set L11_0_set_52, LBB11_52-LJTI11_0 -// .set L11_0_set_61, LBB11_61-LJTI11_0 -// .set L11_0_set_62, LBB11_62-LJTI11_0 -// .set L11_0_set_64, LBB11_64-LJTI11_0 -// .set L11_0_set_50, LBB11_50-LJTI11_0 -// .set L11_0_set_65, LBB11_65-LJTI11_0 -// .set L11_0_set_66, LBB11_66-LJTI11_0 -// .set L11_0_set_67, LBB11_67-LJTI11_0 -// .set L11_0_set_68, LBB11_68-LJTI11_0 -// .set L11_0_set_71, LBB11_71-LJTI11_0 -// .set L11_0_set_74, LBB11_74-LJTI11_0 -// .set L11_0_set_78, LBB11_78-LJTI11_0 -// .set L11_0_set_79, LBB11_79-LJTI11_0 +// .set L11_0_set_10, LBB11_10-LJTI11_0 +// .set L11_0_set_11, LBB11_11-LJTI11_0 +// .set L11_0_set_12, LBB11_12-LJTI11_0 +// .set L11_0_set_14, LBB11_14-LJTI11_0 +// .set L11_0_set_2, LBB11_2-LJTI11_0 +// .set L11_0_set_15, LBB11_15-LJTI11_0 +// .set L11_0_set_16, LBB11_16-LJTI11_0 +// .set L11_0_set_17, LBB11_17-LJTI11_0 +// .set L11_0_set_18, LBB11_18-LJTI11_0 +// .set L11_0_set_21, LBB11_21-LJTI11_0 +// .set L11_0_set_27, LBB11_27-LJTI11_0 +// .set L11_0_set_30, LBB11_30-LJTI11_0 +// .set L11_0_set_31, LBB11_31-LJTI11_0 LJTI11_0: - LONG $0xfffffd31 // .long L11_0_set_52 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdba // .long L11_0_set_62 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffe0c // .long L11_0_set_64 - LONG $0xfffffd11 // .long L11_0_set_50 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffd11 // .long L11_0_set_50 - LONG $0xfffffd11 // .long L11_0_set_50 - LONG $0xfffffd11 // .long L11_0_set_50 - LONG $0xfffffd11 // .long L11_0_set_50 - LONG $0xfffffd11 // .long L11_0_set_50 - LONG $0xfffffd11 // .long L11_0_set_50 - LONG $0xfffffd11 // .long L11_0_set_50 - LONG $0xfffffd11 // .long L11_0_set_50 - LONG $0xfffffd11 // .long L11_0_set_50 - LONG $0xfffffd11 // .long L11_0_set_50 - LONG $0xfffffe1e // .long L11_0_set_65 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffe30 // .long L11_0_set_66 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffe3c // .long L11_0_set_67 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffe4e // .long L11_0_set_68 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffe79 // .long L11_0_set_71 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffea3 // .long L11_0_set_74 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffedd // .long L11_0_set_78 - LONG $0xfffffdb1 // .long L11_0_set_61 - LONG $0xfffffee9 // .long L11_0_set_79 + LONG $0xfffffd94 // .long L11_0_set_10 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffdb8 // .long L11_0_set_12 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffe0e // .long L11_0_set_14 + LONG $0xfffffd03 // .long L11_0_set_2 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffd03 // .long L11_0_set_2 + LONG $0xfffffd03 // .long L11_0_set_2 + LONG $0xfffffd03 // .long L11_0_set_2 + LONG $0xfffffd03 // .long L11_0_set_2 + LONG $0xfffffd03 // .long L11_0_set_2 + LONG $0xfffffd03 // .long L11_0_set_2 + LONG $0xfffffd03 // .long L11_0_set_2 + LONG $0xfffffd03 // .long L11_0_set_2 + LONG $0xfffffd03 // .long L11_0_set_2 + LONG $0xfffffd03 // .long L11_0_set_2 + LONG $0xfffffe21 // .long L11_0_set_15 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffe34 // .long L11_0_set_16 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffe44 // .long L11_0_set_17 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffe57 // .long L11_0_set_18 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffe87 // .long L11_0_set_21 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffeb8 // .long L11_0_set_27 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xfffffef9 // .long L11_0_set_30 + LONG $0xfffffda4 // .long L11_0_set_11 + LONG $0xffffff09 // .long L11_0_set_31 + +LCPI12_0: + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + +LCPI12_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' + +LCPI12_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' + +LCPI12_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' + +LCPI12_4: + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + +LCPI12_5: + QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' + +LCPI12_6: + QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' + +LCPI12_7: + QUAD $0x0d0d0d0d0d0d0d0d; QUAD $0x0d0d0d0d0d0d0d0d // .space 16, '\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r' + +_advance_ns: + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + BYTE $0x53 // pushq %rbx + MOVQ 0(SI), R11 + MOVQ 0(DI), R9 + MOVQ 8(DI), R8 + CMPQ R11, R8 + JAE LBB12_4 + MOVB 0(R9)(R11*1), AX + CMPB AX, $13 + JE LBB12_4 + CMPB AX, $32 + JE LBB12_4 + ADDB $-9, AX + CMPB AX, $1 + JA LBB12_48 + +LBB12_4: + LEAQ 1(R11), AX + CMPQ AX, R8 + JAE LBB12_9 + MOVB 0(R9)(AX*1), CX + CMPB CX, $13 + JE LBB12_9 + CMPB CX, $32 + JE LBB12_9 + ADDB $-9, CX + CMPB CX, $1 + JA LBB12_8 + +LBB12_9: + LEAQ 2(R11), AX + CMPQ AX, R8 + JAE LBB12_14 + MOVB 0(R9)(AX*1), CX + CMPB CX, $13 + JE LBB12_14 + CMPB CX, $32 + JE LBB12_14 + ADDB $-9, CX + CMPB CX, $1 + JA LBB12_8 + +LBB12_14: + LEAQ 3(R11), AX + CMPQ AX, R8 + JAE LBB12_19 + MOVB 0(R9)(AX*1), CX + CMPB CX, $13 + JE LBB12_19 + CMPB CX, $32 + JE LBB12_19 + ADDB $-9, CX + CMPB CX, $1 + JBE LBB12_19 + +LBB12_8: + MOVQ AX, R11 + JMP LBB12_48 + +LBB12_19: + ADDQ $4, R11 + CMPQ R8, R11 + JBE LBB12_44 + LEAQ 0(R9)(R11*1), BX + MOVQ R8, CX + SUBQ R11, CX + JE LBB12_28 + MOVL BX, AX + ANDL $31, AX + TESTQ AX, AX + JE LBB12_28 + MOVL $5, DX + SUBQ R8, DX + MOVQ $4294977024, CX + +LBB12_23: + MOVBLSX 0(R9)(R11*1), AX + CMPL AX, $32 + JA LBB12_46 + BTQ AX, CX + JAE LBB12_46 + LEAQ 0(DX)(R11*1), BX + LEAQ 1(R11), AX + CMPQ BX, $4 + JE LBB12_27 + LEAL 0(R9)(R11*1), BX + ADDL $1, BX + ANDL $31, BX + MOVQ AX, R11 + TESTQ BX, BX + JNE LBB12_23 + +LBB12_27: + LEAQ 0(R9)(AX*1), BX + MOVQ R8, CX + SUBQ AX, CX + +LBB12_28: + CMPQ CX, $32 + JB LBB12_32 + MOVQ R9, AX + SUBQ BX, AX + QUAD $0xfffffe26056ffec5 // vmovdqu $-474(%rip), %ymm0 /* LCPI12_0(%rip) */ + QUAD $0xfffffe3e0d6ffec5 // vmovdqu $-450(%rip), %ymm1 /* LCPI12_1(%rip) */ + QUAD $0xfffffe56156ffec5 // vmovdqu $-426(%rip), %ymm2 /* LCPI12_2(%rip) */ + QUAD $0xfffffe6e1d6ffec5 // vmovdqu $-402(%rip), %ymm3 /* LCPI12_3(%rip) */ + +LBB12_30: + LONG $0x236ffdc5 // vmovdqa (%rbx), %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 $0xd4d7fdc5 // vpmovmskb %ymm4, %edx + CMPL DX, $-1 + JNE LBB12_45 + ADDQ $32, BX + ADDQ $-32, CX + ADDQ $-32, AX + CMPQ CX, $31 + JA LBB12_30 + +LBB12_32: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + CMPQ CX, $16 + JB LBB12_36 + MOVQ R9, R10 + SUBQ BX, R10 + QUAD $0xfffffe38056ffac5 // vmovdqu $-456(%rip), %xmm0 /* LCPI12_4(%rip) */ + QUAD $0xfffffe400d6ffac5 // vmovdqu $-448(%rip), %xmm1 /* LCPI12_5(%rip) */ + QUAD $0xfffffe48156ffac5 // vmovdqu $-440(%rip), %xmm2 /* LCPI12_6(%rip) */ + QUAD $0xfffffe501d6ffac5 // vmovdqu $-432(%rip), %xmm3 /* LCPI12_7(%rip) */ + +LBB12_34: + LONG $0x236ff9c5 // vmovdqa (%rbx), %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 LBB12_49 + ADDQ $16, BX + ADDQ $-16, CX + ADDQ $-16, R10 + CMPQ CX, $15 + JA LBB12_34 + +LBB12_36: + TESTQ CX, CX + JE LBB12_42 + LEAQ 0(BX)(CX*1), R10 + XORL AX, AX + MOVQ $4294977024, R11 + +LBB12_38: + MOVBLSX 0(BX)(AX*1), DX + CMPL DX, $32 + JA LBB12_51 + BTQ DX, R11 + JAE LBB12_51 + ADDQ $1, AX + CMPQ CX, AX + JNE LBB12_38 + MOVQ R10, BX + +LBB12_42: + SUBQ R9, BX + MOVQ BX, R11 + CMPQ R11, R8 + JB LBB12_47 + JMP LBB12_50 + +LBB12_44: + MOVQ R11, 0(SI) + JMP LBB12_50 + +LBB12_45: + WORD $0xf8c5; BYTE $0x77 // vzeroupper + NOTL DX + BSFL DX, R11 + SUBQ AX, R11 + +LBB12_46: + CMPQ R11, R8 + JAE LBB12_50 + +LBB12_47: + MOVQ 0(DI), R9 + +LBB12_48: + LEAQ 1(R11), AX + MOVQ AX, 0(SI) + MOVB 0(R9)(R11*1), AX + MOVBLSX AX, AX + BYTE $0x5b // popq %rbx + BYTE $0x5d // popq %rbp + RET + +LBB12_49: + MOVWLZX AX, AX + NOTL AX + BSFL AX, R11 + SUBQ R10, R11 + CMPQ R11, R8 + JB LBB12_47 + +LBB12_50: + XORL AX, AX + MOVBLSX AX, AX + BYTE $0x5b // popq %rbx + BYTE $0x5d // popq %rbp + RET + +LBB12_51: + SUBQ R9, BX + ADDQ AX, BX + MOVQ BX, R11 + CMPQ R11, R8 + JB LBB12_47 + JMP LBB12_50 _vstring: BYTE $0x55 // pushq %rbp @@ -5168,9 +5228,9 @@ _vstring: MOVQ 0(SI), R12 LEAQ -40(BP), DX MOVQ R12, SI - LONG $0x000080e8; BYTE $0x00 // callq _advance_string + LONG $0x0000a0e8; BYTE $0x00 // callq _advance_string TESTQ AX, AX - JS LBB12_1 + JS LBB13_1 MOVQ AX, 0(BX) MOVQ R12, 16(R14) MOVQ -40(BP), CX @@ -5179,13 +5239,13 @@ _vstring: LONG $0xc14c0f48 // cmovlq %rcx, %rax MOVQ AX, 24(R14) MOVL $7, AX - JMP LBB12_3 + JMP LBB13_3 -LBB12_1: +LBB13_1: MOVQ 8(R15), CX MOVQ CX, 0(BX) -LBB12_3: +LBB13_3: MOVQ AX, 0(R14) ADDQ $16, SP BYTE $0x5b // popq %rbx @@ -5195,114 +5255,495 @@ LBB12_3: BYTE $0x5d // popq %rbp RET -LCPI13_0: +LCPI14_0: QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' -LCPI13_1: +LCPI14_1: QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +LCPI14_2: + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' + _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 - MOVQ 8(DI), R12 - SUBQ SI, R12 - JE LBB13_18 - MOVQ 0(DI), R8 - ADDQ R8, SI - MOVQ $-1, 0(DX) - CMPQ R12, $64 - JB LBB13_19 - MOVL R12, R9 - ANDL $63, R9 - MOVQ $-1, R14 - XORL R15, R15 - QUAD $0xffffff76056ffec5 // vmovdqu $-138(%rip), %ymm0 /* LCPI13_0(%rip) */ - QUAD $0xffffff8e0d6ffec5 // vmovdqu $-114(%rip), %ymm1 /* LCPI13_1(%rip) */ - MOVQ $-6148914691236517206, R10 - MOVQ $6148914691236517205, R11 + 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 $24, SP + MOVQ DX, -48(BP) + TESTB $32, CX + JNE LBB14_12 + MOVQ 8(DI), R15 + SUBQ SI, R15 + JE LBB14_107 + MOVQ 0(DI), R11 + MOVQ -48(BP), AX + MOVQ $-1, 0(AX) + CMPQ R15, $64 + JB LBB14_108 + MOVQ SI, BX + NOTQ BX + MOVQ $-1, R8 + XORL R14, R14 + QUAD $0xffffff45056ffec5 // vmovdqu $-187(%rip), %ymm0 /* LCPI14_0(%rip) */ + QUAD $0xffffff5d0d6ffec5 // vmovdqu $-163(%rip), %ymm1 /* LCPI14_1(%rip) */ + MOVQ $-6148914691236517206, R9 + MOVQ $6148914691236517205, R10 -LBB13_3: - LONG $0x166ffec5 // vmovdqu (%rsi), %ymm2 - LONG $0x5e6ffec5; BYTE $0x20 // vmovdqu $32(%rsi), %ymm3 - LONG $0xe074edc5 // vpcmpeqb %ymm0, %ymm2, %ymm4 - LONG $0xc4d7fdc5 // vpmovmskb %ymm4, %eax - LONG $0xe074e5c5 // vpcmpeqb %ymm0, %ymm3, %ymm4 - LONG $0xdcd7fdc5 // vpmovmskb %ymm4, %ebx - LONG $0xd174edc5 // vpcmpeqb %ymm1, %ymm2, %ymm2 - LONG $0xfad7fdc5 // vpmovmskb %ymm2, %edi - LONG $0xd174e5c5 // vpcmpeqb %ymm1, %ymm3, %ymm2 - LONG $0xcad7fdc5 // vpmovmskb %ymm2, %ecx - SHLQ $32, BX - SHLQ $32, CX - ORQ CX, DI - JE LBB13_5 - CMPQ R14, $-1 - JE LBB13_8 +LBB14_4: + LONG $0x6f7ec1c4; WORD $0x3314 // vmovdqu (%r11,%rsi), %ymm2 + LONG $0x6f7ec1c4; WORD $0x335c; BYTE $0x20 // vmovdqu $32(%r11,%rsi), %ymm3 + LONG $0xe074edc5 // vpcmpeqb %ymm0, %ymm2, %ymm4 + LONG $0xfcd7fdc5 // vpmovmskb %ymm4, %edi + LONG $0xe074e5c5 // vpcmpeqb %ymm0, %ymm3, %ymm4 + LONG $0xd4d7fdc5 // vpmovmskb %ymm4, %edx + LONG $0xd174edc5 // vpcmpeqb %ymm1, %ymm2, %ymm2 + LONG $0xc2d7fdc5 // vpmovmskb %ymm2, %eax + LONG $0xd174e5c5 // vpcmpeqb %ymm1, %ymm3, %ymm2 + LONG $0xcad7fdc5 // vpmovmskb %ymm2, %ecx + SHLQ $32, DX + ORQ DX, DI + SHLQ $32, CX + ORQ CX, AX + JNE LBB14_8 + TESTQ R14, R14 + JNE LBB14_10 + XORL R14, R14 + TESTQ DI, DI + JNE LBB14_11 -LBB13_5: - ORQ AX, BX - MOVQ DI, AX - ORQ R15, AX - JNE LBB13_9 - -LBB13_6: - TESTQ BX, BX - JNE LBB13_10 - -LBB13_7: +LBB14_7: + ADDQ $-64, R15 + ADDQ $-64, BX ADDQ $64, SI - ADDQ $-64, R12 - CMPQ R12, $63 - JA LBB13_3 - JMP LBB13_13 + CMPQ R15, $63 + JA LBB14_4 + JMP LBB14_98 -LBB13_8: - MOVQ SI, CX - SUBQ R8, CX - BSFQ DI, R14 - ADDQ CX, R14 - MOVQ R14, 0(DX) - ORQ AX, BX - MOVQ DI, AX - ORQ R15, AX - JE LBB13_6 +LBB14_8: + CMPQ R8, $-1 + JNE LBB14_10 + BSFQ AX, R8 + ADDQ SI, R8 + MOVQ -48(BP), CX + MOVQ R8, 0(CX) -LBB13_9: - MOVQ R15, AX - NOTQ AX - ANDQ DI, AX - LEAQ 0(AX)(AX*1), R13 - ORQ R15, R13 - MOVQ R13, CX +LBB14_10: + MOVQ R14, CX NOTQ CX - ANDQ DI, CX - ANDQ R10, CX - XORL R15, R15 - ADDQ AX, CX - SETCS R15 - ADDQ CX, CX - XORQ R11, CX - ANDQ R13, CX - NOTQ CX - ANDQ CX, BX + ANDQ AX, CX + LEAQ 0(CX)(CX*1), R12 + ORQ R14, R12 + MOVQ R12, DX + NOTQ DX + ANDQ AX, DX + ANDQ R9, DX + XORL R14, R14 + ADDQ CX, DX + SETCS R14 + ADDQ DX, DX + XORQ R10, DX + ANDQ R12, DX + NOTQ DX + ANDQ DX, DI + TESTQ DI, DI + JE LBB14_7 + +LBB14_11: + BSFQ DI, AX + SUBQ BX, AX + JMP LBB14_94 + +LBB14_12: + MOVQ 8(DI), R14 + SUBQ SI, R14 + JE LBB14_107 + MOVQ 0(DI), R15 + ADDQ R15, SI + MOVQ -48(BP), AX + MOVQ $-1, 0(AX) + MOVQ R15, -56(BP) + NEGQ R15 + MOVQ $-1, -64(BP) + QUAD $0xfffffe39056ffec5 // vmovdqu $-455(%rip), %ymm0 /* LCPI14_0(%rip) */ + QUAD $0xfffffe510d6ffec5 // vmovdqu $-431(%rip), %ymm1 /* LCPI14_1(%rip) */ + QUAD $0xfffffe69156ffec5 // vmovdqu $-407(%rip), %ymm2 /* LCPI14_2(%rip) */ + LONG $0xdb76e5c5 // vpcmpeqd %ymm3, %ymm3, %ymm3 + +LBB14_14: + CMPQ R14, $64 + JB LBB14_52 + LEAQ 0(R15)(SI*1), R12 + XORL DI, DI + XORL R13, R13 + +LBB14_16: + LONG $0x246ffec5; BYTE $0x3e // vmovdqu (%rsi,%rdi), %ymm4 + LONG $0x6c6ffec5; WORD $0x203e // vmovdqu $32(%rsi,%rdi), %ymm5 + LONG $0xf074ddc5 // vpcmpeqb %ymm0, %ymm4, %ymm6 + LONG $0xded7fdc5 // vpmovmskb %ymm6, %ebx + LONG $0xf074d5c5 // vpcmpeqb %ymm0, %ymm5, %ymm6 + LONG $0xd6d77dc5 // vpmovmskb %ymm6, %r10d + LONG $0xf174ddc5 // vpcmpeqb %ymm1, %ymm4, %ymm6 + LONG $0xced77dc5 // vpmovmskb %ymm6, %r9d + LONG $0xf174d5c5 // vpcmpeqb %ymm1, %ymm5, %ymm6 + LONG $0xc6d77dc5 // vpmovmskb %ymm6, %r8d + LONG $0xf564edc5 // vpcmpgtb %ymm5, %ymm2, %ymm6 + LONG $0xfb64d5c5 // vpcmpgtb %ymm3, %ymm5, %ymm7 + LONG $0xf7dbcdc5 // vpand %ymm7, %ymm6, %ymm6 + LONG $0xded77dc5 // vpmovmskb %ymm6, %r11d + LONG $0xc5d7fdc5 // vpmovmskb %ymm5, %eax + SHLQ $32, R10 + ORQ R10, BX + SHLQ $32, R8 + SHLQ $32, R11 + SHLQ $32, AX + ORQ R8, R9 + JNE LBB14_23 + TESTQ R13, R13 + JNE LBB14_25 + XORL R13, R13 + +LBB14_19: + LONG $0xec64edc5 // vpcmpgtb %ymm4, %ymm2, %ymm5 + LONG $0xf364ddc5 // vpcmpgtb %ymm3, %ymm4, %ymm6 + LONG $0xeedbd5c5 // vpand %ymm6, %ymm5, %ymm5 + LONG $0xd5d7fdc5 // vpmovmskb %ymm5, %edx + LONG $0xccd7fdc5 // vpmovmskb %ymm4, %ecx + ORQ DX, R11 + ORQ CX, AX TESTQ BX, BX - JE LBB13_7 + JNE LBB14_26 + TESTQ R11, R11 + JNE LBB14_96 + TESTQ AX, AX + JNE LBB14_46 + ADDQ $-64, R14 + ADDQ $64, DI + CMPQ R14, $63 + JA LBB14_16 + JMP LBB14_47 -LBB13_10: - BSFQ BX, AX +LBB14_23: + CMPQ -64(BP), $-1 + JNE LBB14_25 + BSFQ R9, DX + ADDQ R12, DX + ADDQ DI, DX + MOVQ -48(BP), CX + MOVQ DX, -64(BP) + MOVQ DX, 0(CX) -LBB13_11: - SUBQ R8, SI - LEAQ 1(SI)(AX*1), AX +LBB14_25: + MOVQ R13, R8 + NOTQ R8 + ANDQ R9, R8 + LEAQ 0(R8)(R8*1), CX + ORQ R13, CX + MOVQ CX, R10 + NOTQ R10 + ANDQ R9, R10 + MOVQ $-6148914691236517206, DX + ANDQ DX, R10 + XORL R13, R13 + ADDQ R8, R10 + SETCS R13 + ADDQ R10, R10 + MOVQ $6148914691236517205, DX + XORQ DX, R10 + ANDQ CX, R10 + NOTQ R10 + ANDQ R10, BX + JMP LBB14_19 -LBB13_12: +LBB14_26: + MOVL $64, R12 + MOVL $64, R9 + TESTQ R11, R11 + JE LBB14_28 + BSFQ R11, R9 + +LBB14_28: + BSFQ BX, BX + TESTQ AX, AX + JE LBB14_30 + BSFQ AX, R12 + +LBB14_30: + CMPQ R9, BX + JB LBB14_104 + CMPQ R12, BX + JAE LBB14_95 + +LBB14_32: + ADDQ DI, SI + +LBB14_33: + ADDQ R12, SI + SUBQ R12, R14 + +LBB14_34: + CMPQ R14, $4 + JB LBB14_64 + MOVL 0(SI), AX + MOVL AX, CX + ANDL $12632304, CX + CMPL CX, $8421600 + JNE LBB14_38 + MOVL AX, BX + ANDL $8207, BX + CMPL BX, $8205 + JE LBB14_38 + MOVL $3, DI + TESTL BX, BX + JNE LBB14_44 + +LBB14_38: + MOVL AX, CX + ANDL $49376, CX + CMPL CX, $32960 + JNE LBB14_40 + MOVL AX, CX + MOVL $2, DI + ANDL $30, CX + JNE LBB14_44 + +LBB14_40: + MOVL AX, CX + ANDL $-1061109512, CX + CMPL CX, $-2139062032 + JNE LBB14_91 + MOVL AX, CX + ANDL $12295, CX + JE LBB14_91 + MOVL $4, DI + TESTB $4, AX + JE LBB14_44 + ANDL $12291, AX + JNE LBB14_91 + +LBB14_44: + ADDQ DI, SI + SUBQ DI, R14 + JE LBB14_14 + CMPB 0(SI), $0 + JS LBB14_34 + JMP LBB14_14 + +LBB14_46: + BSFQ AX, R12 + JMP LBB14_32 + +LBB14_47: + ADDQ DI, SI + CMPQ R14, $32 + JB LBB14_63 + +LBB14_48: + LONG $0x266ffec5 // vmovdqu (%rsi), %ymm4 + LONG $0xe874ddc5 // vpcmpeqb %ymm0, %ymm4, %ymm5 + LONG $0xcdd77dc5 // vpmovmskb %ymm5, %r9d + LONG $0xe974ddc5 // vpcmpeqb %ymm1, %ymm4, %ymm5 + LONG $0xfdd7fdc5 // vpmovmskb %ymm5, %edi + TESTL DI, DI + JNE LBB14_53 + TESTQ R13, R13 + JNE LBB14_55 + XORL R13, R13 + TESTQ R9, R9 + JE LBB14_56 + +LBB14_51: + BSFQ R9, R11 + JMP LBB14_57 + +LBB14_52: + XORL R13, R13 + CMPQ R14, $32 + JAE LBB14_48 + JMP LBB14_63 + +LBB14_53: + CMPQ -64(BP), $-1 + JNE LBB14_55 + MOVQ SI, AX + SUBQ -56(BP), AX + BSFQ DI, CX + ADDQ AX, CX + MOVQ -48(BP), AX + MOVQ CX, -64(BP) + MOVQ CX, 0(AX) + +LBB14_55: + MOVL R13, AX + NOTL AX + ANDL DI, AX + LEAL 0(AX)(AX*1), CX + LEAL 0(R13)(AX*2), DX + NOTL CX + ANDL DI, CX + ANDL $-1431655766, CX + XORL R13, R13 + ADDL AX, CX + SETCS R13 + ADDL CX, CX + XORL $1431655765, CX + ANDL DX, CX + NOTL CX + ANDL CX, R9 + TESTQ R9, R9 + JNE LBB14_51 + +LBB14_56: + MOVL $64, R11 + +LBB14_57: + LONG $0xec64edc5 // vpcmpgtb %ymm4, %ymm2, %ymm5 + LONG $0xf364ddc5 // vpcmpgtb %ymm3, %ymm4, %ymm6 + LONG $0xeedbd5c5 // vpand %ymm6, %ymm5, %ymm5 + LONG $0xfdd7fdc5 // vpmovmskb %ymm5, %edi + LONG $0xc4d7fdc5 // vpmovmskb %ymm4, %eax + BSFL AX, R12 + MOVL $64, CX + LONG $0xe1440f44 // cmovel %ecx, %r12d + BSFL DI, BX + TESTQ R9, R9 + JE LBB14_60 + TESTL DI, DI + WORD $0x440f; BYTE $0xd9 // cmovel %ecx, %ebx + CMPQ R11, BX + JA LBB14_109 + CMPQ R11, R12 + JA LBB14_33 + JMP LBB14_105 + +LBB14_60: + TESTL DI, DI + JNE LBB14_110 + TESTL AX, AX + JNE LBB14_33 + ADDQ $32, SI + ADDQ $-32, R14 + +LBB14_63: + TESTQ R13, R13 + JNE LBB14_136 + +LBB14_64: + MOVQ $-1, AX + +LBB14_65: + TESTQ R14, R14 + JE LBB14_94 + MOVBLZX 0(SI), DI + CMPL DI, $34 + JE LBB14_103 + CMPB DI, $92 + JE LBB14_87 + CMPB DI, $31 + JBE LBB14_91 + TESTB DI, DI + JS LBB14_71 + ADDQ $1, SI + ADDQ $-1, R14 + JMP LBB14_65 + +LBB14_71: + CMPQ R14, $4 + JB LBB14_73 + MOVL 0(SI), DI + JMP LBB14_77 + +LBB14_73: + CMPQ R14, $2 + JE LBB14_76 + CMPQ R14, $1 + JE LBB14_77 + MOVBLZX 2(SI), DI + MOVWLZX 0(SI), CX + SHLL $16, DI + ORL CX, DI + JMP LBB14_77 + +LBB14_76: + MOVWLZX 0(SI), DI + +LBB14_77: + MOVL DI, CX + ANDL $12632304, CX + CMPL CX, $8421600 + JNE LBB14_80 + MOVL DI, BX + ANDL $8207, BX + CMPL BX, $8205 + JE LBB14_80 + MOVL $3, R9 + TESTL BX, BX + JNE LBB14_86 + +LBB14_80: + MOVL DI, CX + ANDL $49376, CX + CMPL CX, $32960 + JNE LBB14_82 + MOVL DI, CX + MOVL $2, R9 + ANDL $30, CX + JNE LBB14_86 + +LBB14_82: + MOVL DI, CX + ANDL $-1061109512, CX + CMPL CX, $-2139062032 + JNE LBB14_91 + MOVL DI, CX + ANDL $12295, CX + JE LBB14_91 + MOVL $4, R9 + TESTB $4, DI + JE LBB14_86 + ANDL $12291, DI + JNE LBB14_91 + +LBB14_86: + ADDQ R9, SI + SUBQ R9, R14 + JMP LBB14_65 + +LBB14_87: + CMPQ R14, $1 + JE LBB14_94 + CMPQ -64(BP), $-1 + JNE LBB14_90 + MOVQ SI, DX + SUBQ -56(BP), DX + MOVQ -48(BP), CX + MOVQ DX, -64(BP) + MOVQ DX, 0(CX) + +LBB14_90: + ADDQ $2, SI + ADDQ $-2, R14 + JMP LBB14_65 + +LBB14_91: + SUBQ -56(BP), SI + +LBB14_92: + MOVQ -48(BP), AX + MOVQ SI, 0(AX) + +LBB14_93: + MOVQ $-2, AX + +LBB14_94: + ADDQ $24, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 WORD $0x5d41 // popq %r13 @@ -5312,154 +5753,245 @@ LBB13_12: WORD $0xf8c5; BYTE $0x77 // vzeroupper RET -LBB13_13: - MOVQ R9, R12 - CMPQ R12, $32 - JB LBB13_24 +LBB14_95: + SUBQ -56(BP), SI + ADDQ BX, SI + LEAQ 0(DI)(SI*1), AX + ADDQ $1, AX + JMP LBB14_94 -LBB13_14: +LBB14_96: + MOVQ $-2, AX + CMPQ -64(BP), $-1 + JNE LBB14_94 + BSFQ R11, CX + SUBQ -56(BP), SI + ADDQ CX, SI + ADDQ DI, SI + MOVQ -48(BP), CX + MOVQ SI, 0(CX) + JMP LBB14_94 + +LBB14_98: + ADDQ R11, SI + CMPQ R15, $32 + JB LBB14_115 + +LBB14_99: LONG $0x066ffec5 // vmovdqu (%rsi), %ymm0 - QUAD $0xfffffe760d74fdc5 // vpcmpeqb $-394(%rip), %ymm0, %ymm1 /* LCPI13_0(%rip) */ - LONG $0xc9d77dc5 // vpmovmskb %ymm1, %r9d - QUAD $0xfffffe8a0574fdc5 // vpcmpeqb $-374(%rip), %ymm0, %ymm0 /* LCPI13_1(%rip) */ - LONG $0xf8d7fdc5 // vpmovmskb %ymm0, %edi - TESTL DI, DI - JNE LBB13_20 - TESTQ R15, R15 - JNE LBB13_22 - XORL R15, R15 - TESTQ R9, R9 - JE LBB13_23 + QUAD $0xfffff9890d74fdc5 // vpcmpeqb $-1655(%rip), %ymm0, %ymm1 /* LCPI14_0(%rip) */ + LONG $0xf9d7fdc5 // vpmovmskb %ymm1, %edi + QUAD $0xfffff99d0574fdc5 // vpcmpeqb $-1635(%rip), %ymm0, %ymm0 /* LCPI14_1(%rip) */ + LONG $0xc0d7fdc5 // vpmovmskb %ymm0, %eax + TESTL AX, AX + JNE LBB14_111 + TESTQ R14, R14 + JNE LBB14_113 + XORL R14, R14 + TESTQ DI, DI + JE LBB14_114 -LBB13_17: - BSFQ R9, AX - JMP LBB13_11 +LBB14_102: + BSFQ DI, AX + SUBQ R11, SI + ADDQ SI, AX + ADDQ $1, AX + JMP LBB14_94 -LBB13_19: - MOVQ $-1, R14 - XORL R15, R15 - CMPQ R12, $32 - JAE LBB13_14 - JMP LBB13_24 +LBB14_103: + SUBQ -56(BP), SI + ADDQ $1, SI + JMP LBB14_128 -LBB13_20: - CMPQ R14, $-1 - JNE LBB13_22 - MOVQ SI, AX - SUBQ R8, AX - BSFQ DI, R14 - ADDQ AX, R14 - MOVQ R14, 0(DX) +LBB14_104: + SUBQ -56(BP), SI + ADDQ R9, SI + ADDQ DI, SI + JMP LBB14_92 -LBB13_22: - MOVL R15, AX - NOTL AX - ANDL DI, AX - LEAL 0(AX)(AX*1), BX - ORL R15, BX - MOVL BX, CX +LBB14_105: + SUBQ -56(BP), SI + LEAQ 0(SI)(R11*1), AX + ADDQ $1, AX + JMP LBB14_94 + +LBB14_108: + ADDQ R11, SI + MOVQ $-1, R8 + XORL R14, R14 + CMPQ R15, $32 + JAE LBB14_99 + JMP LBB14_115 + +LBB14_109: + MOVL BX, AX + SUBQ -56(BP), SI + ADDQ AX, SI + JMP LBB14_92 + +LBB14_110: + SUBQ -56(BP), SI + MOVL BX, AX + ADDQ SI, AX + MOVQ -48(BP), CX + MOVQ AX, 0(CX) + JMP LBB14_93 + +LBB14_111: + CMPQ R8, $-1 + JNE LBB14_113 + MOVQ SI, CX + SUBQ R11, CX + BSFQ AX, R8 + ADDQ CX, R8 + MOVQ -48(BP), CX + MOVQ R8, 0(CX) + +LBB14_113: + MOVL R14, CX NOTL CX - ANDL DI, CX - ANDL $-1431655766, CX - XORL R15, R15 - ADDL AX, CX - SETCS R15 - ADDL CX, CX - XORL $1431655765, CX - ANDL BX, CX - NOTL CX - ANDL CX, R9 - TESTQ R9, R9 - JNE LBB13_17 + ANDL AX, CX + LEAL 0(CX)(CX*1), DX + LEAL 0(R14)(CX*2), BX + NOTL DX + ANDL AX, DX + ANDL $-1431655766, DX + XORL R14, R14 + ADDL CX, DX + SETCS R14 + ADDL DX, DX + XORL $1431655765, DX + ANDL BX, DX + NOTL DX + ANDL DX, DI + TESTQ DI, DI + JNE LBB14_102 -LBB13_23: +LBB14_114: ADDQ $32, SI - ADDQ $-32, R12 + ADDQ $-32, R15 -LBB13_24: +LBB14_115: + TESTQ R14, R14 + JNE LBB14_131 TESTQ R15, R15 - JNE LBB13_35 - MOVQ $-1, AX - TESTQ R12, R12 - JE LBB13_12 + JE LBB14_127 -LBB13_26: - MOVQ R8, R9 +LBB14_117: + MOVQ R11, R9 NOTQ R9 - -LBB13_27: - LEAQ 1(SI), DI - MOVBLZX 0(SI), BX - CMPB BX, $34 - JE LBB13_34 - LEAQ -1(R12), R10 - CMPB BX, $92 - JE LBB13_30 - MOVQ R10, R12 - MOVQ DI, SI - TESTQ R10, R10 - JNE LBB13_27 - JMP LBB13_12 - -LBB13_30: - TESTQ R10, R10 - JE LBB13_12 - CMPQ R14, $-1 - JNE LBB13_33 - ADDQ R9, DI - MOVQ DI, 0(DX) - MOVQ DI, R14 - -LBB13_33: - ADDQ $2, SI - ADDQ $-2, R12 - MOVQ R12, R10 - TESTQ R10, R10 - JNE LBB13_27 - JMP LBB13_12 - -LBB13_34: - SUBQ R8, DI - MOVQ DI, AX - JMP LBB13_12 - -LBB13_35: - TESTQ R12, R12 - JE LBB13_18 - CMPQ R14, $-1 - JNE LBB13_38 - MOVQ R8, R14 - NOTQ R14 - ADDQ SI, R14 - MOVQ R14, 0(DX) - -LBB13_38: - INCQ SI - DECQ R12 - MOVQ $-1, AX - TESTQ R12, R12 - JNE LBB13_26 - JMP LBB13_12 - -LBB13_18: + ADDQ $1, R9 MOVQ $-1, AX - JMP LBB13_12 -LCPI14_0: +LBB14_118: + XORL DI, DI + +LBB14_119: + MOVBLZX 0(SI)(DI*1), BX + CMPB BX, $34 + JE LBB14_126 + CMPB BX, $92 + JE LBB14_122 + ADDQ $1, DI + CMPQ R15, DI + JNE LBB14_119 + JMP LBB14_129 + +LBB14_122: + LEAQ -1(R15), CX + CMPQ CX, DI + JE LBB14_94 + CMPQ R8, $-1 + JNE LBB14_125 + LEAQ 0(R9)(SI*1), R8 + ADDQ DI, R8 + MOVQ -48(BP), CX + MOVQ R8, 0(CX) + +LBB14_125: + ADDQ DI, SI + ADDQ $2, SI + MOVQ R15, CX + SUBQ DI, CX + ADDQ $-2, CX + ADDQ $-2, R15 + CMPQ R15, DI + MOVQ CX, R15 + JNE LBB14_118 + JMP LBB14_94 + +LBB14_126: + ADDQ DI, SI + ADDQ $1, SI + +LBB14_127: + SUBQ R11, SI + +LBB14_128: + MOVQ SI, AX + JMP LBB14_94 + +LBB14_129: + MOVQ $-1, AX + CMPB BX, $34 + JNE LBB14_94 + ADDQ R15, SI + JMP LBB14_127 + +LBB14_131: + TESTQ R15, R15 + JE LBB14_107 + CMPQ R8, $-1 + JNE LBB14_134 + MOVQ R11, R8 + NOTQ R8 + ADDQ SI, R8 + MOVQ -48(BP), AX + MOVQ R8, 0(AX) + +LBB14_134: + ADDQ $1, SI + ADDQ $-1, R15 + TESTQ R15, R15 + JNE LBB14_117 + JMP LBB14_127 + +LBB14_136: + TESTQ R14, R14 + JE LBB14_107 + CMPQ -64(BP), $-1 + JNE LBB14_139 + MOVQ -56(BP), CX + NOTQ CX + ADDQ SI, CX + MOVQ -48(BP), AX + MOVQ CX, -64(BP) + MOVQ CX, 0(AX) + +LBB14_139: + ADDQ $1, SI + ADDQ $-1, R14 + JMP LBB14_64 + +LBB14_107: + MOVQ $-1, AX + JMP LBB14_94 + +LCPI15_0: LONG $0x43300000 // .long 1127219200 LONG $0x45300000 // .long 1160773632 LONG $0x00000000 // .long 0 LONG $0x00000000 // .long 0 -LCPI14_1: - QUAD $0x4330000000000000 // .quad 4841369599423283200 - QUAD $0x4530000000000000 // .quad 4985484787499139072 +LCPI15_1: + QUAD $0x4330000000000000 // .quad 0x4330000000000000 + QUAD $0x4530000000000000 // .quad 0x4530000000000000 -LCPI14_2: - QUAD $0x430c6bf526340000 // .quad 4831355200913801216 +LCPI15_2: + QUAD $0x430c6bf526340000 // .quad 0x430c6bf526340000 -LCPI14_3: - QUAD $0xc30c6bf526340000 // .quad -4392016835940974592 +LCPI15_3: + QUAD $0xc30c6bf526340000 // .quad 0xc30c6bf526340000 _vnumber: BYTE $0x55 // pushq %rbp @@ -5472,7 +6004,6 @@ _vnumber: SUBQ $56, SP MOVQ DX, BX MOVQ SI, R14 - MOVQ $0, -48(BP) MOVQ 0(SI), AX MOVQ 0(DI), R15 MOVQ 8(DI), R13 @@ -5484,221 +6015,215 @@ _vnumber: MOVQ 0(SI), CX MOVQ CX, 24(DX) CMPQ AX, R13 - JAE LBB14_52 + JAE LBB15_52 MOVB 0(R15)(AX*1), DI - MOVL $1, R9 + MOVL $1, DX CMPB DI, $45 - JNE LBB14_4 - INCQ AX + JNE LBB15_4 + ADDQ $1, AX CMPQ AX, R13 - JAE LBB14_52 + JAE LBB15_52 MOVB 0(R15)(AX*1), DI - MOVL $-1, R9 + MOVL $-1, DX -LBB14_4: +LBB15_4: LEAL -48(DI), CX CMPB CX, $10 - JB LBB14_6 + JB LBB15_6 -LBB14_5: +LBB15_5: MOVQ AX, 0(R14) MOVQ $-2, 0(BX) - JMP LBB14_53 + JMP LBB15_53 -LBB14_6: +LBB15_6: CMPB DI, $48 - JNE LBB14_10 - LEAQ 1(AX), SI + JNE LBB15_10 + LEAQ 1(AX), R8 CMPQ AX, R13 - JAE LBB14_19 - MOVB 0(R15)(SI*1), DX - ADDB $-46, DX - CMPB DX, $55 - JA LBB14_19 - MOVBLZX DX, R8 - MOVQ $36028797027352577, DX - BTQ R8, DX - JAE LBB14_19 + JAE LBB15_22 + MOVB 0(R15)(R8*1), CX + ADDB $-46, CX + CMPB CX, $55 + JA LBB15_22 + MOVBLZX CX, CX + MOVQ $36028797027352577, SI + BTQ CX, SI + JAE LBB15_22 -LBB14_10: +LBB15_10: + MOVL DX, -44(BP) + MOVB $1, CX + MOVL CX, -56(BP) CMPQ AX, R13 - JAE LBB14_18 - CMPB CX, $9 - JA LBB14_20 - LEAQ -1(R13), R8 + JAE LBB15_21 + MOVL $4294967248, R9 + ADDQ $1, AX XORL CX, CX - XORL SI, SI + XORL R8, R8 XORL R12, R12 -LBB14_13: - CMPL SI, $18 - JG LBB14_15 - MOVBQSX DI, DI +LBB15_12: + CMPL R8, $18 + JG LBB15_14 LEAQ 0(R12)(R12*4), DX - LEAQ -48(DI)(DX*2), R12 - INCL SI - JMP LBB14_16 + MOVBLZX DI, DI + ADDL R9, DI + LEAQ 0(DI)(DX*2), R12 + ADDL $1, R8 + JMP LBB15_15 -LBB14_15: - INCL CX +LBB15_14: + ADDL $1, CX -LBB14_16: - CMPQ R8, AX - JE LBB14_24 - MOVBLZX 1(R15)(AX*1), DI - INCQ AX +LBB15_15: + CMPQ R13, AX + JE LBB15_23 + MOVBLZX 0(R15)(AX*1), DI LEAL -48(DI), DX + ADDQ $1, AX CMPB DX, $10 - JB LBB14_13 - JMP LBB14_21 + JB LBB15_12 + CMPB DI, $46 + JNE LBB15_24 + MOVQ $8, 0(BX) + CMPQ AX, R13 + JAE LBB15_52 + MOVB 0(R15)(AX*1), DX + ADDB $-48, DX + CMPB DX, $10 + JAE LBB15_5 + MOVL $0, -56(BP) + JMP LBB15_25 -LBB14_18: +LBB15_21: XORL CX, CX - XORL SI, SI + XORL R8, R8 XORL R12, R12 - JMP LBB14_25 + JMP LBB15_25 -LBB14_19: - MOVQ SI, 0(R14) - JMP LBB14_53 +LBB15_22: + MOVQ R8, 0(R14) + JMP LBB15_53 -LBB14_20: - XORL R12, R12 - XORL SI, SI - XORL CX, CX - -LBB14_21: - XORL DX, DX - TESTL CX, CX - SETGT DX - MOVL DX, -52(BP) - MOVL $9, R8 - CMPB DI, $46 - JNE LBB14_26 - INCQ AX - MOVQ $8, 0(BX) - CMPQ AX, R13 - JAE LBB14_52 - MOVB 0(R15)(AX*1), DX - ADDB $-48, DX - MOVL $8, R8 - CMPB DX, $10 - JAE LBB14_5 - JMP LBB14_26 - -LBB14_24: +LBB15_23: MOVQ R13, AX + JMP LBB15_25 -LBB14_25: +LBB15_24: + ADDQ $-1, AX + +LBB15_25: XORL DX, DX TESTL CX, CX SETGT DX - MOVL DX, -52(BP) - MOVL $9, R8 - -LBB14_26: - TESTL CX, CX - JNE LBB14_35 + MOVL DX, -68(BP) TESTQ R12, R12 - JNE LBB14_35 + JNE LBB15_34 + TESTL CX, CX + JNE LBB15_34 CMPQ AX, R13 - JAE LBB14_33 - MOVL AX, DI - SUBL R13, DI - XORL SI, SI + JAE LBB15_32 + MOVL AX, SI + SUBL R13, SI + XORL R8, R8 XORL CX, CX -LBB14_30: - CMPB 0(R15)(AX*1), $48 - JNE LBB14_34 - INCQ AX - DECL CX - CMPQ R13, AX - JNE LBB14_30 - XORL R12, R12 - CMPL R8, $9 - JE LBB14_55 - JMP LBB14_59 +LBB15_29: + CMPB 0(R15)(AX*1), $48 + JNE LBB15_33 + ADDQ $1, AX + ADDL $-1, CX + CMPQ R13, AX + JNE LBB15_29 + XORL R12, R12 + MOVL -56(BP), AX + TESTB AX, AX + JNE LBB15_55 + JMP LBB15_60 -LBB14_33: +LBB15_32: XORL CX, CX - XORL SI, SI + XORL R8, R8 -LBB14_34: +LBB15_33: XORL R12, R12 -LBB14_35: +LBB15_34: CMPQ AX, R13 - JAE LBB14_40 - CMPL SI, $18 - JG LBB14_40 + JAE LBB15_40 + CMPL R8, $18 + JG LBB15_40 + MOVL $4294967248, R9 -LBB14_37: +LBB15_37: MOVBLZX 0(R15)(AX*1), DI LEAL -48(DI), DX CMPB DX, $9 - JA LBB14_40 + JA LBB15_40 LEAQ 0(R12)(R12*4), DX - LEAQ -48(DI)(DX*2), R12 - DECL CX - INCQ AX + ADDL R9, DI + LEAQ 0(DI)(DX*2), R12 + ADDL $-1, CX + ADDQ $1, AX CMPQ AX, R13 - JAE LBB14_40 - LEAL 1(SI), DX - CMPL SI, $18 - MOVL DX, SI - JL LBB14_37 + JAE LBB15_40 + LEAL 1(R8), DX + CMPL R8, $18 + MOVL DX, R8 + JL LBB15_37 -LBB14_40: +LBB15_40: CMPQ AX, R13 - JAE LBB14_54 - MOVB 0(R15)(AX*1), SI - LEAL -48(SI), DX - CMPB DX, $9 - JA LBB14_46 - LEAQ -1(R13), DI + JAE LBB15_54 + MOVB 0(R15)(AX*1), DX + LEAL -48(DX), SI + CMPB SI, $9 + JA LBB15_46 + LEAQ -1(R13), SI -LBB14_43: - CMPQ DI, AX - JE LBB14_76 - MOVBLZX 1(R15)(AX*1), SI - INCQ AX - LEAL -48(SI), DX - CMPB DX, $9 - JBE LBB14_43 - MOVL $1, -52(BP) +LBB15_43: + CMPQ SI, AX + JE LBB15_59 + MOVBLZX 1(R15)(AX*1), DX + LEAL -48(DX), DI + ADDQ $1, AX + CMPB DI, $9 + JBE LBB15_43 + MOVL $1, -68(BP) -LBB14_46: - ORB $32, SI - CMPB SI, $101 - JNE LBB14_54 +LBB15_46: + ORB $32, DX + CMPB DX, $101 + JNE LBB15_54 LEAQ 1(AX), DI MOVQ $8, 0(BX) CMPQ DI, R13 - JAE LBB14_52 + JAE LBB15_52 MOVB 0(R15)(DI*1), SI CMPB SI, $45 - JE LBB14_50 + JE LBB15_50 MOVL $1, R8 CMPB SI, $43 - JNE LBB14_85 + JNE LBB15_87 -LBB14_50: +LBB15_50: ADDQ $2, AX CMPQ AX, R13 - JAE LBB14_52 + JAE LBB15_52 XORL DX, DX CMPB SI, $43 SETEQ DX - LEAL -1(DX)(DX*1), R8 + LEAL 0(DX)(DX*1), R8 + ADDL $-1, R8 MOVB 0(R15)(AX*1), SI - JMP LBB14_86 + JMP LBB15_88 -LBB14_52: +LBB15_52: MOVQ R13, 0(R14) MOVQ $-1, 0(BX) -LBB14_53: +LBB15_53: ADDQ $56, SP BYTE $0x5b // popq %rbx WORD $0x5c41 // popq %r12 @@ -5708,148 +6233,43 @@ LBB14_53: BYTE $0x5d // popq %rbp RET -LBB14_54: - MOVL CX, DI - MOVQ AX, R13 - CMPL R8, $9 - JNE LBB14_59 +LBB15_54: + MOVL CX, SI + MOVQ AX, R13 + MOVL -56(BP), AX + TESTB AX, AX + JE LBB15_60 -LBB14_55: - TESTL DI, DI - JNE LBB14_58 +LBB15_55: + TESTL SI, SI + MOVL -44(BP), DX + JNE LBB15_58 MOVQ $-9223372036854775808, AX - MOVLQSX R9, CX + MOVLQSX DX, CX TESTQ R12, R12 - JNS LBB14_80 - MOVQ R12, DX - ANDQ CX, DX - CMPQ DX, AX - JE LBB14_80 + JNS LBB15_69 + MOVQ R12, DI + ANDQ CX, DI + CMPQ DI, AX + JE LBB15_69 -LBB14_58: +LBB15_58: MOVQ $8, 0(BX) + JMP LBB15_61 -LBB14_59: - MOVQ $0, -64(BP) - LONG $0x6ef9c1c4; BYTE $0xc4 // vmovq %r12, %xmm0 - QUAD $0xfffffcf60562f9c5 // vpunpckldq $-778(%rip), %xmm0, %xmm0 /* LCPI14_0(%rip) */ - QUAD $0xfffffcfe055cf9c5 // vsubpd $-770(%rip), %xmm0, %xmm0 /* LCPI14_1(%rip) */ - LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd $1, %xmm0, %xmm1 - LONG $0xc058f3c5 // vaddsd %xmm0, %xmm1, %xmm0 - LONG $0x4511fbc5; BYTE $0xd0 // vmovsd %xmm0, $-48(%rbp) - MOVQ R12, AX - SHRQ $52, AX - JE LBB14_71 - -LBB14_60: - MOVQ R11, -80(BP) - MOVQ R10, -88(BP) - LEAQ -48(BP), CX - MOVQ DI, SI - MOVQ R12, DI - MOVQ SI, -72(BP) - MOVL R9, DX - MOVL R9, -56(BP) - LONG $0xffe855e8; BYTE $0xff // callq _atof_eisel_lemire64 +LBB15_59: + MOVL $1, -68(BP) + MOVL CX, SI + MOVL -56(BP), AX TESTB AX, AX - JE LBB14_64 - MOVQ -72(BP), SI - MOVL -56(BP), DX - CMPL -52(BP), $0 - JE LBB14_79 - INCQ R12 - LEAQ -64(BP), CX - MOVQ R12, DI - LONG $0xffe831e8; BYTE $0xff // callq _atof_eisel_lemire64 - TESTB AX, AX - JE LBB14_64 - LONG $0x4d10fbc5; BYTE $0xc0 // vmovsd $-64(%rbp), %xmm1 - LONG $0x4510fbc5; BYTE $0xd0 // vmovsd $-48(%rbp), %xmm0 - LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 - JNE LBB14_64 - JNP LBB14_66 + JNE LBB15_55 + JMP LBB15_60 -LBB14_64: - MOVQ 0(R14), AX - ADDQ AX, R15 - MOVQ R13, SI - SUBQ AX, SI - MOVQ R15, DI - MOVQ -88(BP), DX - MOVQ -80(BP), CX - LONG $0xffef07e8; BYTE $0xff // callq _atof_native - -LBB14_65: - LONG $0x4511fbc5; BYTE $0xd0 // vmovsd %xmm0, $-48(%rbp) - -LBB14_66: - LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax - -LBB14_67: - MOVQ $-9223372036854775808, CX - DECQ CX - ANDQ AX, CX - MOVQ $9218868437227405312, DX - CMPQ CX, DX - JNE LBB14_69 - MOVQ $-8, 0(BX) - -LBB14_69: - MOVQ AX, 8(BX) - -LBB14_70: - MOVQ R13, 0(R14) - JMP LBB14_53 - -LBB14_71: - LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx - MOVL R9, AX - SHRL $31, AX - SHLQ $63, AX - ORQ CX, AX - MOVQ AX, -48(BP) - TESTQ R12, R12 - JE LBB14_67 - TESTL DI, DI - JE LBB14_67 - LONG $0x6ef9e1c4; BYTE $0xc0 // vmovq %rax, %xmm0 - LEAL -1(DI), AX - CMPL AX, $36 - JA LBB14_77 - CMPL DI, $23 - JL LBB14_81 - MOVLQSX DI, AX - LONG $0x0e0d8d48; WORD $0x00c3; BYTE $0x00 // leaq $49934(%rip), %rcx /* _P10_TAB(%rip) */ - QUAD $0xffff50c18459fbc5; BYTE $0xff // vmulsd $-176(%rcx,%rax,8), %xmm0, %xmm0 - LONG $0x4511fbc5; BYTE $0xd0 // vmovsd %xmm0, $-48(%rbp) - MOVL $22, AX - JMP LBB14_82 - -LBB14_76: - MOVL $1, -52(BP) - MOVL CX, DI - CMPL R8, $9 - JE LBB14_55 - JMP LBB14_59 - -LBB14_77: - CMPL DI, $-22 - JB LBB14_60 - NEGL DI - MOVLQSX DI, AX - LONG $0xcc0d8d48; WORD $0x00c2; BYTE $0x00 // leaq $49868(%rip), %rcx /* _P10_TAB(%rip) */ - LONG $0x045efbc5; BYTE $0xc1 // vdivsd (%rcx,%rax,8), %xmm0, %xmm0 - JMP LBB14_65 - -LBB14_79: - MOVQ -48(BP), AX - JMP LBB14_67 - -LBB14_80: +LBB15_69: LONG $0x6ef9c1c4; BYTE $0xc4 // vmovq %r12, %xmm0 IMULQ CX, R12 - QUAD $0xfffffb790562f9c5 // vpunpckldq $-1159(%rip), %xmm0, %xmm0 /* LCPI14_0(%rip) */ - QUAD $0xfffffb81055cf9c5 // vsubpd $-1151(%rip), %xmm0, %xmm0 /* LCPI14_1(%rip) */ + QUAD $0xfffffcd10562f9c5 // vpunpckldq $-815(%rip), %xmm0, %xmm0 /* LCPI15_0(%rip) */ + QUAD $0xfffffcd9055cf9c5 // vsubpd $-807(%rip), %xmm0, %xmm0 /* LCPI15_1(%rip) */ MOVQ R12, 16(BX) LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd $1, %xmm0, %xmm1 LONG $0xc058f3c5 // vaddsd %xmm0, %xmm1, %xmm0 @@ -5857,172 +6277,287 @@ LBB14_80: LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx ORQ AX, CX MOVQ CX, 8(BX) - JMP LBB14_70 + JMP LBB15_86 -LBB14_81: - MOVL DI, AX - -LBB14_82: - QUAD $0xfffffb65052ef9c5 // vucomisd $-1179(%rip), %xmm0 /* LCPI14_2(%rip) */ - JA LBB14_60 - QUAD $0xfffffb5f0d10fbc5 // vmovsd $-1185(%rip), %xmm1 /* LCPI14_3(%rip) */ - LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 - JA LBB14_60 - MOVL AX, AX - LONG $0x530d8d48; WORD $0x00c2; BYTE $0x00 // leaq $49747(%rip), %rcx /* _P10_TAB(%rip) */ - LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0 - JMP LBB14_65 - -LBB14_85: +LBB15_87: MOVQ DI, AX -LBB14_86: +LBB15_88: LEAL -48(SI), DI CMPB DI, $9 - JA LBB14_5 - MOVL R9, -56(BP) + JA LBB15_5 CMPQ AX, R13 - JAE LBB14_93 - CMPB DI, $9 - JA LBB14_93 + JAE LBB15_93 LEAQ -1(R13), R9 XORL DI, DI -LBB14_90: +LBB15_91: MOVL DI, DX + MOVBLZX SI, SI CMPL DI, $10000 LEAL 0(DX)(DX*4), DI - MOVBLZX SI, SI LEAL -48(SI)(DI*2), DI WORD $0x4d0f; BYTE $0xfa // cmovgel %edx, %edi CMPQ R9, AX - JE LBB14_94 + JE LBB15_94 MOVBLZX 1(R15)(AX*1), SI - INCQ AX LEAL -48(SI), DX + ADDQ $1, AX CMPB DX, $10 - JB LBB14_90 - JMP LBB14_95 + JB LBB15_91 + JMP LBB15_95 -LBB14_93: +LBB15_93: XORL DI, DI - JMP LBB14_95 + JMP LBB15_95 -LBB14_94: +LBB15_94: MOVQ R13, AX -LBB14_95: - IMULL R8, DI - ADDL CX, DI +LBB15_95: + MOVQ DI, SI + IMULL R8, SI + ADDL CX, SI MOVQ AX, R13 - MOVL -56(BP), R9 - JMP LBB14_59 + +LBB15_60: + MOVL -44(BP), DX + +LBB15_61: + MOVQ $0, -80(BP) + LONG $0x6ef9c1c4; BYTE $0xc4 // vmovq %r12, %xmm0 + QUAD $0xfffffc320562f9c5 // vpunpckldq $-974(%rip), %xmm0, %xmm0 /* LCPI15_0(%rip) */ + QUAD $0xfffffc3a055cf9c5 // vsubpd $-966(%rip), %xmm0, %xmm0 /* LCPI15_1(%rip) */ + LONG $0x0579e3c4; WORD $0x01c8 // vpermilpd $1, %xmm0, %xmm1 + LONG $0xc058f3c5 // vaddsd %xmm0, %xmm1, %xmm0 + LONG $0x4511fbc5; BYTE $0xc0 // vmovsd %xmm0, $-64(%rbp) + MOVQ R12, AX + SHRQ $52, AX + JNE LBB15_74 + LONG $0x7ef9e1c4; BYTE $0xc1 // vmovq %xmm0, %rcx + MOVL DX, AX + SHRL $31, AX + SHLQ $63, AX + ORQ CX, AX + MOVQ AX, -64(BP) + TESTL SI, SI + JE LBB15_82 + TESTQ R12, R12 + JE LBB15_82 + LONG $0x6ef9e1c4; BYTE $0xc0 // vmovq %rax, %xmm0 + LEAL -1(SI), AX + CMPL AX, $36 + JA LBB15_67 + CMPL SI, $23 + JL LBB15_70 + LEAL -22(SI), AX + LONG $0x990d8d48; WORD $0x00b8; BYTE $0x00 // leaq $47257(%rip), %rcx /* _P10_TAB(%rip) */ + LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0 + LONG $0x4511fbc5; BYTE $0xc0 // vmovsd %xmm0, $-64(%rbp) + MOVL $22, AX + JMP LBB15_71 + +LBB15_67: + CMPL SI, $-22 + JB LBB15_74 + NEGL SI + LONG $0x7a058d48; WORD $0x00b8; BYTE $0x00 // leaq $47226(%rip), %rax /* _P10_TAB(%rip) */ + LONG $0x045efbc5; BYTE $0xf0 // vdivsd (%rax,%rsi,8), %xmm0, %xmm0 + LONG $0x4511fbc5; BYTE $0xc0 // vmovsd %xmm0, $-64(%rbp) + JMP LBB15_78 + +LBB15_70: + MOVL SI, AX + +LBB15_71: + QUAD $0xfffffbb7052ef9c5 // vucomisd $-1097(%rip), %xmm0 /* LCPI15_2(%rip) */ + JA LBB15_74 + QUAD $0xfffffbb50d10fbc5 // vmovsd $-1099(%rip), %xmm1 /* LCPI15_3(%rip) */ + LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 + JA LBB15_74 + MOVL AX, AX + LONG $0x4b0d8d48; WORD $0x00b8; BYTE $0x00 // leaq $47179(%rip), %rcx /* _P10_TAB(%rip) */ + LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0 + LONG $0x4511fbc5; BYTE $0xc0 // vmovsd %xmm0, $-64(%rbp) + JMP LBB15_78 + +LBB15_74: + MOVQ R11, -96(BP) + MOVQ R10, -56(BP) + LEAQ -64(BP), CX + MOVQ R12, DI + MOVQ SI, -88(BP) + LONG $0xffe1f5e8; BYTE $0xff // callq _atof_eisel_lemire64 + TESTB AX, AX + JE LBB15_80 + MOVQ -88(BP), SI + CMPL -68(BP), $0 + JE LBB15_81 + ADDQ $1, R12 + LEAQ -80(BP), CX + MOVQ R12, DI + MOVL -44(BP), DX + LONG $0xffe1d4e8; BYTE $0xff // callq _atof_eisel_lemire64 + TESTB AX, AX + JE LBB15_80 + LONG $0x4d10fbc5; BYTE $0xb0 // vmovsd $-80(%rbp), %xmm1 + LONG $0x4510fbc5; BYTE $0xc0 // vmovsd $-64(%rbp), %xmm0 + LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1 + JNE LBB15_80 + JP LBB15_80 + +LBB15_78: + LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax + JMP LBB15_82 + +LBB15_80: + MOVQ 0(R14), AX + ADDQ AX, R15 + MOVQ R13, SI + SUBQ AX, SI + MOVQ R15, DI + MOVQ -56(BP), DX + MOVQ -96(BP), CX + LONG $0xffe7e9e8; BYTE $0xff // callq _atof_native + LONG $0x4511fbc5; BYTE $0xc0 // vmovsd %xmm0, $-64(%rbp) + LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq %xmm0, %rax + JMP LBB15_83 + +LBB15_81: + MOVQ -64(BP), AX + +LBB15_82: + LONG $0x6ef9e1c4; BYTE $0xc0 // vmovq %rax, %xmm0 + +LBB15_83: + MOVQ $-9223372036854775808, CX + ADDQ $-1, CX + ANDQ AX, CX + MOVQ $9218868437227405312, AX + CMPQ CX, AX + JNE LBB15_85 + MOVQ $-8, 0(BX) + +LBB15_85: + LONG $0x4311fbc5; BYTE $0x08 // vmovsd %xmm0, $8(%rbx) + +LBB15_86: + MOVQ R13, 0(R14) + JMP LBB15_53 _vsigned: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp BYTE $0x53 // pushq %rbx - MOVQ 0(SI), BX + MOVQ 0(SI), AX MOVQ 0(DI), R8 - MOVQ 8(DI), R10 + MOVQ 8(DI), R11 MOVQ $9, 0(DX) LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 LONG $0x4211f8c5; BYTE $0x08 // vmovups %xmm0, $8(%rdx) MOVQ 0(SI), CX MOVQ CX, 24(DX) - CMPQ BX, R10 - JAE LBB15_1 - MOVB 0(R8)(BX*1), CX + CMPQ AX, R11 + JAE LBB16_1 + MOVB 0(R8)(AX*1), CX MOVL $1, R9 CMPB CX, $45 - JNE LBB15_5 - INCQ BX - CMPQ BX, R10 - JAE LBB15_1 - MOVB 0(R8)(BX*1), CX + JNE LBB16_5 + ADDQ $1, AX + CMPQ AX, R11 + JAE LBB16_1 + MOVB 0(R8)(AX*1), CX MOVQ $-1, R9 -LBB15_5: +LBB16_5: LEAL -48(CX), DI CMPB DI, $10 - JB LBB15_7 - MOVQ BX, 0(SI) + JB LBB16_7 + MOVQ AX, 0(SI) MOVQ $-2, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB15_1: - MOVQ R10, 0(SI) +LBB16_1: + MOVQ R11, 0(SI) MOVQ $-1, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB15_7: +LBB16_7: CMPB CX, $48 - JNE LBB15_8 - LEAQ 1(BX), DI - CMPQ BX, R10 - JAE LBB15_17 + JNE LBB16_12 + LEAQ 1(AX), DI + CMPQ AX, R11 + JAE LBB16_11 MOVB 0(R8)(DI*1), CX ADDB $-46, CX CMPB CX, $55 - JA LBB15_17 - MOVBLZX CX, R11 + JA LBB16_11 + MOVBLZX CX, R10 MOVQ $36028797027352577, CX - BTQ R11, CX - JAE LBB15_17 + BTQ R10, CX + JAE LBB16_11 -LBB15_8: +LBB16_12: + CMPQ AX, R11 + MOVQ R11, R10 + LONG $0xd0470f4c // cmovaq %rax, %r10 XORL DI, DI -LBB15_9: - CMPQ BX, R10 - JAE LBB15_22 - MOVBQSX 0(R8)(BX*1), CX - LEAL -48(CX), AX - CMPB AX, $9 - JA LBB15_18 +LBB16_13: + CMPQ R10, AX + JE LBB16_23 + MOVBQSX 0(R8)(AX*1), CX + LEAL -48(CX), BX + CMPB BX, $9 + JA LBB16_18 IMUL3Q $10, DI, DI - JO LBB15_13 - INCQ BX - ADDQ $-48, CX + JO LBB16_17 + ADDQ $1, AX + ADDL $-48, CX IMULQ R9, CX ADDQ CX, DI - JNO LBB15_9 + JNO LBB16_13 -LBB15_13: - DECQ BX - MOVQ BX, 0(SI) +LBB16_17: + ADDQ $-1, AX + MOVQ AX, 0(SI) MOVQ $-5, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB15_17: +LBB16_11: MOVQ DI, 0(SI) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB15_18: - CMPB CX, $101 - JE LBB15_21 - CMPB CX, $69 - JE LBB15_21 +LBB16_18: + CMPQ AX, R11 + JAE LBB16_22 CMPB CX, $46 - JNE LBB15_22 + JE LBB16_25 + CMPB CX, $69 + JE LBB16_25 + CMPB CX, $101 + JNE LBB16_22 -LBB15_21: - MOVQ BX, 0(SI) +LBB16_25: + MOVQ AX, 0(SI) MOVQ $-6, 0(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB15_22: - MOVQ BX, 0(SI) +LBB16_22: + MOVQ AX, R10 + +LBB16_23: + MOVQ R10, 0(SI) MOVQ DI, 16(DX) BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp @@ -6031,106 +6566,125 @@ LBB15_22: _vunsigned: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5641 // pushq %r14 + BYTE $0x53 // pushq %rbx MOVQ DX, R8 MOVQ 0(SI), CX MOVQ 0(DI), R9 - MOVQ 8(DI), R11 + MOVQ 8(DI), R14 MOVQ $9, 0(DX) LONG $0xc057f8c5 // vxorps %xmm0, %xmm0, %xmm0 LONG $0x4211f8c5; BYTE $0x08 // vmovups %xmm0, $8(%rdx) MOVQ 0(SI), AX MOVQ AX, 24(DX) - CMPQ CX, R11 - JAE LBB16_1 + CMPQ CX, R14 + JAE LBB17_1 MOVB 0(R9)(CX*1), AX CMPB AX, $45 - JNE LBB16_4 + JNE LBB17_4 -LBB16_3: +LBB17_3: MOVQ CX, 0(SI) MOVQ $-6, 0(R8) + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET -LBB16_1: - MOVQ R11, 0(SI) +LBB17_1: + MOVQ R14, 0(SI) MOVQ $-1, 0(R8) + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET -LBB16_4: +LBB17_4: LEAL -48(AX), DX CMPB DX, $10 - JB LBB16_6 + JB LBB17_6 MOVQ CX, 0(SI) MOVQ $-2, 0(R8) + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET -LBB16_6: +LBB17_6: CMPB AX, $48 - JNE LBB16_7 + JNE LBB17_10 MOVB 1(R9)(CX*1), AX ADDB $-46, AX CMPB AX, $55 - JA LBB16_16 + JA LBB17_9 MOVBLZX AX, AX MOVQ $36028797027352577, DX BTQ AX, DX - JAE LBB16_16 + JAE LBB17_9 -LBB16_7: +LBB17_10: + CMPQ R14, CX + MOVQ CX, R10 + LONG $0xd6470f4d // cmovaq %r14, %r10 XORL AX, AX - MOVL $10, R10 + MOVL $10, R11 -LBB16_8: - CMPQ CX, R11 - JAE LBB16_20 - MOVBLSX 0(R9)(CX*1), DI - LEAL -48(DI), DX +LBB17_11: + CMPQ R10, CX + JE LBB17_22 + MOVBLSX 0(R9)(CX*1), BX + LEAL -48(BX), DX CMPB DX, $9 - JA LBB16_17 - MULQ R10 - JO LBB16_13 - INCQ CX - ADDL $-48, DI - MOVLQSX DI, DX - MOVQ DX, DI - SARQ $63, DI - ADDQ DX, AX - ADCQ $0, DI - MOVL DI, DX - ANDL $1, DX + JA LBB17_17 + MULQ R11 + JO LBB17_16 + ADDQ $1, CX + ADDL $-48, BX + XORL DI, DI + ADDQ BX, AX + SETCS DI + MOVQ DI, DX NEGQ DX XORQ DX, DI - JNE LBB16_13 + JNE LBB17_16 TESTQ DX, DX - JNS LBB16_8 + JNS LBB17_11 -LBB16_13: - DECQ CX +LBB17_16: + ADDQ $-1, CX MOVQ CX, 0(SI) MOVQ $-5, 0(R8) + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET -LBB16_17: - CMPB DI, $101 - JE LBB16_3 - CMPB DI, $69 - JE LBB16_3 - CMPB DI, $46 - JE LBB16_3 +LBB17_17: + CMPQ CX, R14 + JAE LBB17_21 + CMPB BX, $46 + JE LBB17_3 + CMPB BX, $69 + JE LBB17_3 + CMPB BX, $101 + JE LBB17_3 -LBB16_20: - MOVQ CX, 0(SI) +LBB17_21: + MOVQ CX, R10 + +LBB17_22: + MOVQ R10, 0(SI) MOVQ AX, 16(R8) + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET -LBB16_16: - INCQ CX +LBB17_9: + ADDQ $1, CX MOVQ CX, 0(SI) + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET @@ -6142,38 +6696,9 @@ _skip_one: MOVQ DI, SI MOVQ $1, 0(AX) MOVQ AX, DI - XORL CX, CX BYTE $0x5d // popq %rbp JMP _fsm_exec -LCPI18_0: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - -LCPI18_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' - -LCPI18_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' - -LCPI18_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' - -LCPI18_4: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - -LCPI18_5: - QUAD $0x0909090909090909; QUAD $0x0909090909090909 // .space 16, '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' - -LCPI18_6: - QUAD $0x0a0a0a0a0a0a0a0a; QUAD $0x0a0a0a0a0a0a0a0a // .space 16, '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' - -LCPI18_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 @@ -6183,770 +6708,578 @@ _fsm_exec: WORD $0x5441 // pushq %r12 BYTE $0x53 // pushq %rbx SUBQ $40, SP + MOVQ CX, -72(BP) CMPL 0(DI), $0 - JE LBB18_3 - MOVQ DI, R12 - MOVL CX, -60(BP) - MOVQ $-1, R11 - QUAD $0xffffff111d6ffec5 // vmovdqu $-239(%rip), %ymm3 /* LCPI18_0(%rip) */ - QUAD $0xffffff29256ffec5 // vmovdqu $-215(%rip), %ymm4 /* LCPI18_1(%rip) */ - QUAD $0xffffff412d6ffec5 // vmovdqu $-191(%rip), %ymm5 /* LCPI18_2(%rip) */ - QUAD $0xffffff59356ffec5 // vmovdqu $-167(%rip), %ymm6 /* LCPI18_3(%rip) */ - MOVQ DX, -48(BP) + JE LBB19_61 + MOVQ DX, R14 + MOVQ SI, DX + MOVQ $-1, BX MOVQ SI, -56(BP) - JMP LBB18_10 + JMP LBB19_7 -LBB18_5: - MOVQ R11, BX - ADDQ R15, DI - MOVQ 8(SI), SI - SUBQ R15, SI - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x001177e8; BYTE $0x00 // callq _do_skip_number - MOVQ -48(BP), DX - MOVQ 0(DX), CX - TESTQ AX, AX - JS LBB18_117 - ADDQ AX, CX - MOVQ CX, 0(DX) +LBB19_2: + CMPL DX, $65535 + JG LBB19_64 + LEAL 1(DX), AX + MOVL AX, 0(DI) + MOVL $3, 4(DI)(DX*4) -LBB18_7: - MOVQ R13, R14 - TESTQ R15, R15 - MOVQ -56(BP), SI - MOVQ BX, R11 - QUAD $0xfffffeaf1d6ffec5 // vmovdqu $-337(%rip), %ymm3 /* LCPI18_0(%rip) */ - QUAD $0xfffffec7256ffec5 // vmovdqu $-313(%rip), %ymm4 /* LCPI18_1(%rip) */ - QUAD $0xfffffedf2d6ffec5 // vmovdqu $-289(%rip), %ymm5 /* LCPI18_2(%rip) */ - QUAD $0xfffffef7356ffec5 // vmovdqu $-265(%rip), %ymm6 /* LCPI18_3(%rip) */ - JLE LBB18_4 +LBB19_4: + MOVQ -48(BP), BX + MOVQ R15, DX -LBB18_8: - MOVL 0(R12), R8 - MOVQ R11, R14 - TESTL R8, R8 - JE LBB18_4 +LBB19_5: + MOVL 0(DI), CX -LBB18_10: - MOVQ 0(DX), R13 - MOVQ 0(SI), DI - MOVQ 8(SI), R9 - CMPQ R13, R9 - JAE LBB18_14 - MOVB 0(DI)(R13*1), AX - CMPB AX, $13 - JE LBB18_14 - CMPB AX, $32 - JE LBB18_14 - ADDB $-9, AX - CMPB AX, $1 - JA LBB18_57 - -LBB18_14: - LEAQ 1(R13), CX - CMPQ CX, R9 - JAE LBB18_19 - MOVB 0(DI)(CX*1), AX - CMPB AX, $13 - JE LBB18_19 - CMPB AX, $32 - JE LBB18_19 - ADDB $-9, AX - CMPB AX, $1 - JA LBB18_18 - -LBB18_19: - LEAQ 2(R13), CX - CMPQ CX, R9 - JAE LBB18_23 - MOVB 0(DI)(CX*1), AX - CMPB AX, $13 - JE LBB18_23 - CMPB AX, $32 - JE LBB18_23 - ADDB $-9, AX - CMPB AX, $1 - JA LBB18_18 - -LBB18_23: - LEAQ 3(R13), CX - CMPQ CX, R9 - JAE LBB18_27 - MOVB 0(DI)(CX*1), AX - CMPB AX, $13 - JE LBB18_27 - CMPB AX, $32 - JE LBB18_27 - ADDB $-9, AX - CMPB AX, $1 - JBE LBB18_27 - -LBB18_18: - MOVQ CX, R13 - JMP LBB18_57 - -LBB18_27: - LEAQ 4(R13), AX - CMPQ R9, AX - JBE LBB18_2 - LEAQ 0(DI)(AX*1), BX - MOVQ R9, CX - SUBQ AX, CX - JE LBB18_36 - MOVL BX, AX - ANDL $31, AX - TESTQ AX, AX - JE LBB18_36 - MOVQ R11, R14 - LEAQ 0(DI)(R13*1), R10 - MOVQ R9, CX - SUBQ R13, CX - LEAQ -5(CX), R8 - XORL BX, BX - MOVQ $4294977024, R15 - -LBB18_31: - MOVBLSX 4(R10)(BX*1), AX - CMPL AX, $32 - JA LBB18_54 - BTQ AX, R15 - JAE LBB18_54 - LEAQ 1(BX), R11 - CMPQ R8, BX - JE LBB18_35 - LEAQ 5(R10)(BX*1), AX - ANDL $31, AX - MOVQ R11, BX - TESTQ AX, AX - JNE LBB18_31 - -LBB18_35: - LEAQ 4(R11)(R10*1), BX - SUBQ R11, CX - ADDQ $-4, CX - MOVQ R14, R11 - -LBB18_36: - CMPQ CX, $32 - JB LBB18_41 - LEAQ -32(CX), R10 - MOVQ R10, AX - ANDQ $-32, AX - LEAQ 32(AX)(BX*1), R8 - ANDL $31, R10 - -LBB18_38: - LONG $0x036ffdc5 // vmovdqa (%rbx), %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 LBB18_53 - ADDQ $32, BX - ADDQ $-32, CX - CMPQ CX, $31 - JA LBB18_38 - MOVQ R10, CX - MOVQ R8, BX - -LBB18_41: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - CMPQ CX, $16 - JB LBB18_46 - LEAQ -16(CX), R10 - MOVQ R10, AX - ANDQ $-16, AX - LEAQ 16(AX)(BX*1), R8 - ANDL $15, R10 - -LBB18_43: - LONG $0x036ff9c5 // vmovdqa (%rbx), %xmm0 - QUAD $0xfffffd810d74f9c5 // vpcmpeqb $-639(%rip), %xmm0, %xmm1 /* LCPI18_4(%rip) */ - QUAD $0xfffffd891574f9c5 // vpcmpeqb $-631(%rip), %xmm0, %xmm2 /* LCPI18_5(%rip) */ - LONG $0xcaebf1c5 // vpor %xmm2, %xmm1, %xmm1 - QUAD $0xfffffd8d1574f9c5 // vpcmpeqb $-627(%rip), %xmm0, %xmm2 /* LCPI18_6(%rip) */ - QUAD $0xfffffd950574f9c5 // vpcmpeqb $-619(%rip), %xmm0, %xmm0 /* LCPI18_7(%rip) */ - LONG $0xc2ebf9c5 // vpor %xmm2, %xmm0, %xmm0 - LONG $0xc1ebf9c5 // vpor %xmm1, %xmm0, %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - CMPW AX, $-1 - JNE LBB18_110 - ADDQ $16, BX - ADDQ $-16, CX - CMPQ CX, $15 - JA LBB18_43 - MOVQ R10, CX - MOVQ R8, BX - -LBB18_46: - TESTQ CX, CX - JE LBB18_52 - LEAQ 0(BX)(CX*1), R8 - INCQ BX +LBB19_6: MOVQ BX, R13 + TESTL CX, CX + JE LBB19_80 -LBB18_48: - MOVBLSX -1(R13), AX - CMPL AX, $32 - JA LBB18_111 - MOVQ $4294977024, BX - BTQ AX, BX - JAE LBB18_111 - DECQ CX - INCQ R13 - TESTQ CX, CX - JNE LBB18_48 - MOVQ R8, BX +LBB19_7: + MOVQ DI, R12 + MOVQ DX, R15 + MOVQ DX, DI + MOVQ R14, SI + LONG $0xffec87e8; BYTE $0xff // callq _advance_ns + TESTB AX, AX + JE LBB19_61 + MOVQ R12, DI + MOVLQSX 0(R12), DX + LEAQ -1(DX), CX + CMPQ BX, $-1 + JNE LBB19_10 + MOVQ 0(R14), BX + ADDQ $-1, BX -LBB18_52: - SUBQ DI, BX - MOVQ BX, R13 - JMP LBB18_55 +LBB19_10: + MOVBLSX AX, R8 + MOVL 0(DI)(DX*4), SI + ADDL $-1, SI + CMPL SI, $5 + JA LBB19_14 + MOVQ BX, -48(BP) + LONG $0x461d8d48; WORD $0x0004; BYTE $0x00 // leaq $1094(%rip), %rbx /* LJTI19_0(%rip) */ + MOVLQSX 0(BX)(SI*4), SI + ADDQ BX, SI + JMP SI -LBB18_53: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - SUBQ DI, BX - NOTL AX - WORD $0x9848 // cltq - BSFQ AX, R13 - ADDQ BX, R13 - JMP LBB18_55 +LBB19_12: + CMPL R8, $44 + JE LBB19_31 + CMPL R8, $93 + JE LBB19_23 + JMP LBB19_79 -LBB18_54: - ADDQ BX, R10 - NOTQ DI - LEAQ 5(DI)(R10*1), R13 - MOVQ R14, R11 +LBB19_14: + MOVL CX, 0(DI) + CMPL R8, $123 + JBE LBB19_28 + JMP LBB19_79 -LBB18_55: - CMPQ R13, R9 - JAE LBB18_3 - MOVQ 0(SI), DI - QUAD $0xfffffc3f1d6ffec5 // vmovdqu $-961(%rip), %ymm3 /* LCPI18_0(%rip) */ - QUAD $0xfffffc57256ffec5 // vmovdqu $-937(%rip), %ymm4 /* LCPI18_1(%rip) */ - QUAD $0xfffffc6f2d6ffec5 // vmovdqu $-913(%rip), %ymm5 /* LCPI18_2(%rip) */ - QUAD $0xfffffc87356ffec5 // vmovdqu $-889(%rip), %ymm6 /* LCPI18_3(%rip) */ +LBB19_15: + CMPL R8, $44 + JE LBB19_2 + CMPL R8, $125 + JE LBB19_23 + JMP LBB19_79 -LBB18_57: - LEAQ 1(R13), R15 - MOVQ R15, 0(DX) - MOVBLSX 0(DI)(R13*1), BX - MOVQ $-1, R14 - TESTL BX, BX - JE LBB18_4 - MOVLQSX 0(R12), R9 - LEAQ -1(R9), R8 - MOVL 0(R12)(R9*4), AX - CMPQ R11, $-1 - LONG $0xdd440f4d // cmoveq %r13, %r11 - DECL AX - CMPL AX, $5 - JA LBB18_63 - LONG $0xd20d8d48; WORD $0x0004; BYTE $0x00 // leaq $1234(%rip), %rcx /* LJTI18_0(%rip) */ +LBB19_17: + CMPB AX, $34 + JNE LBB19_79 + MOVL $4, 0(DI)(DX*4) + MOVQ 0(R14), BX + MOVQ R15, DI + MOVQ BX, SI + LEAQ -64(BP), DX + MOVQ -72(BP), CX + LONG $0xffef1fe8; BYTE $0xff // callq _advance_string + MOVQ AX, R13 + TESTQ AX, AX + JNS LBB19_35 + MOVQ -64(BP), AX + JMP LBB19_36 + +LBB19_20: + CMPB AX, $58 + JNE LBB19_79 + MOVL $0, 0(DI)(DX*4) + JMP LBB19_4 + +LBB19_22: + CMPB AX, $93 + JNE LBB19_27 + +LBB19_23: + MOVL CX, 0(DI) + MOVQ -48(BP), BX + MOVQ R15, DX + JMP LBB19_6 + +LBB19_24: + CMPL R8, $34 + JE LBB19_33 + CMPL R8, $125 + JNE LBB19_79 + MOVL CX, 0(DI) + MOVQ -56(BP), DX + MOVQ -48(BP), BX + JMP LBB19_6 + +LBB19_27: + MOVL $1, 0(DI)(DX*4) + MOVQ -48(BP), BX + CMPL R8, $123 + JA LBB19_79 + +LBB19_28: + MOVQ R15, DX + MOVL R8, AX + LONG $0x750d8d48; WORD $0x0003; BYTE $0x00 // leaq $885(%rip), %rcx /* LJTI19_1(%rip) */ MOVLQSX 0(CX)(AX*4), AX ADDQ CX, AX + MOVQ $-1, R13 JMP AX -LBB18_60: - CMPL BX, $44 - JE LBB18_80 - CMPL BX, $93 - JE LBB18_62 - JMP LBB18_66 - -LBB18_63: - MOVL R8, 0(R12) - MOVQ $-2, R14 - ADDL $-34, BX - CMPL BX, $89 - JBE LBB18_75 - JMP LBB18_4 - -LBB18_64: - CMPL BX, $44 - JNE LBB18_65 - CMPL R9, $65535 - JG LBB18_118 - LEAL 1(R9), AX - MOVL AX, 0(R12) - MOVL $3, 4(R12)(R9*4) - MOVL 0(R12), R8 - MOVQ R11, R14 - TESTL R8, R8 - JNE LBB18_10 - JMP LBB18_4 - -LBB18_67: - CMPB BX, $34 - JNE LBB18_66 - MOVQ R11, BX - MOVL $4, 0(R12)(R9*4) - -LBB18_69: - MOVQ SI, DI - MOVQ R15, SI - LEAQ -72(BP), DX - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0xfff13de8; BYTE $0xff // callq _advance_string - MOVQ AX, R14 - TESTQ AX, AX - JS LBB18_112 - MOVQ -48(BP), DX - MOVQ R14, 0(DX) - JMP LBB18_7 - -LBB18_71: - CMPB BX, $58 - JNE LBB18_66 - MOVL $0, 0(R12)(R9*4) - MOVL 0(R12), R8 - MOVQ R11, R14 - TESTL R8, R8 - JNE LBB18_10 - JMP LBB18_4 - -LBB18_73: - CMPB BX, $93 - JE LBB18_62 - MOVL $1, 0(R12)(R9*4) - MOVQ $-2, R14 - ADDL $-34, BX - CMPL BX, $89 - JA LBB18_4 - -LBB18_75: - LEAQ 0(DI)(R13*1), AX - LONG $0xe3058d4c; WORD $0x0003; BYTE $0x00 // leaq $995(%rip), %r8 /* LJTI18_1(%rip) */ - MOVLQSX 0(R8)(BX*4), CX - ADDQ R8, CX - JMP CX - -LBB18_78: - MOVQ R11, BX - MOVQ 8(SI), SI +LBB19_29: + MOVQ BX, R15 + MOVQ R14, BX + MOVQ 0(R14), R14 + LEAQ -1(R14), R13 + MOVQ 0(DX), DI + ADDQ R13, DI + MOVQ 8(DX), SI SUBQ R13, SI - MOVQ AX, DI - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x000d62e8; BYTE $0x00 // callq _do_skip_number + LONG $0x000752e8; BYTE $0x00 // callq _do_skip_number TESTQ AX, AX - JS LBB18_113 - MOVQ -48(BP), DX - MOVQ 0(DX), CX - LEAQ -1(AX)(CX*1), AX - MOVQ AX, 0(DX) - JMP LBB18_7 + JS LBB19_62 + MOVQ 0(BX), CX + ADDQ CX, AX + ADDQ $-1, AX + MOVQ AX, 0(BX) + TESTQ R14, R14 + MOVQ -56(BP), DX + MOVQ BX, R14 + MOVQ R15, BX + MOVQ R12, DI + JG LBB19_5 + JMP LBB19_80 -LBB18_76: - CMPL BX, $34 - JE LBB18_84 +LBB19_31: + CMPL DX, $65535 + JG LBB19_64 + LEAL 1(DX), AX + MOVL AX, 0(DI) + MOVL $0, 4(DI)(DX*4) + JMP LBB19_4 -LBB18_65: - CMPL BX, $125 - JNE LBB18_66 - -LBB18_62: - MOVL R8, 0(R12) - MOVQ R11, R14 - TESTL R8, R8 - JNE LBB18_10 - JMP LBB18_4 - -LBB18_80: - CMPL R9, $65535 - JG LBB18_118 - LEAL 1(R9), AX - MOVL AX, 0(R12) - MOVL $0, 4(R12)(R9*4) - MOVL 0(R12), R8 - MOVQ R11, R14 - TESTL R8, R8 - JNE LBB18_10 - JMP LBB18_4 - -LBB18_84: - MOVL $2, 0(R12)(R9*4) - MOVL -60(BP), AX - CMPL AX, $1 - JE LBB18_88 - TESTL AX, AX - JNE LBB18_89 - MOVQ R11, BX - MOVQ SI, DI - MOVQ R15, SI - LEAQ -72(BP), DX - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0xfff016e8; BYTE $0xff // callq _advance_string - MOVQ AX, R14 +LBB19_33: + MOVL $2, 0(DI)(DX*4) + MOVQ R14, -80(BP) + MOVQ 0(R14), R14 + MOVQ -56(BP), DI + MOVQ R14, SI + LEAQ -64(BP), DX + MOVQ -72(BP), CX + LONG $0xffedffe8; BYTE $0xff // callq _advance_string + MOVQ AX, R13 TESTQ AX, AX - JS LBB18_112 - MOVQ -48(BP), DX - MOVQ R14, 0(DX) - MOVQ R13, R14 - TESTQ R15, R15 - MOVQ -56(BP), SI - MOVQ BX, R11 - QUAD $0xfffff9fd1d6ffec5 // vmovdqu $-1539(%rip), %ymm3 /* LCPI18_0(%rip) */ - QUAD $0xfffffa15256ffec5 // vmovdqu $-1515(%rip), %ymm4 /* LCPI18_1(%rip) */ - QUAD $0xfffffa2d2d6ffec5 // vmovdqu $-1491(%rip), %ymm5 /* LCPI18_2(%rip) */ - QUAD $0xfffffa45356ffec5 // vmovdqu $-1467(%rip), %ymm6 /* LCPI18_3(%rip) */ - JG LBB18_89 - JMP LBB18_4 + JNS LBB19_38 + MOVQ -64(BP), AX + JMP LBB19_39 -LBB18_88: - MOVQ SI, DI +LBB19_35: + ADDQ $-1, BX + MOVQ R13, AX + MOVQ BX, R13 + +LBB19_36: + MOVQ AX, 0(R14) + +LBB19_37: + TESTQ R13, R13 + MOVQ -56(BP), DX + MOVQ -48(BP), BX + MOVQ R12, DI + JNS LBB19_5 + JMP LBB19_80 + +LBB19_38: + ADDQ $-1, R14 + MOVQ R13, AX + MOVQ R14, R13 + +LBB19_39: + MOVQ -48(BP), BX + MOVQ -80(BP), R14 + MOVQ AX, 0(R14) + TESTQ R13, R13 + MOVQ -56(BP), DX + JS LBB19_80 + MOVQ R12, DI + MOVLQSX 0(R12), AX + CMPQ AX, $65535 + JG LBB19_64 + LEAL 1(AX), CX + MOVL CX, 0(DI) + MOVL $4, 4(DI)(AX*4) + JMP LBB19_5 + +LBB19_42: + MOVQ BX, -48(BP) + MOVQ R14, R15 + MOVQ 0(R14), BX + MOVQ DX, DI + MOVQ BX, SI + LEAQ -64(BP), DX + MOVQ -72(BP), CX + LONG $0xffed67e8; BYTE $0xff // callq _advance_string + MOVQ AX, R13 + TESTQ AX, AX + JNS LBB19_58 + MOVQ -64(BP), AX + JMP LBB19_59 + +LBB19_44: + MOVQ 0(R14), R13 + MOVQ 0(DX), DI + ADDQ R13, DI + MOVQ 8(DX), SI + SUBQ R13, SI + LONG $0x00061fe8; BYTE $0x00 // callq _do_skip_number + TESTQ AX, AX + JS LBB19_67 + ADDQ AX, 0(R14) + TESTQ R13, R13 + MOVQ R15, DX + MOVQ R12, DI + JG LBB19_5 + JMP LBB19_68 + +LBB19_46: + MOVLQSX 0(DI), AX + CMPQ AX, $65535 + JG LBB19_64 + LEAL 1(AX), CX + MOVL CX, 0(DI) + MOVL $5, 4(DI)(AX*4) + JMP LBB19_5 + +LBB19_48: + MOVQ 0(R14), AX + MOVQ 8(DX), CX MOVQ DX, SI - MOVQ R11, BX - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x000520e8; BYTE $0x00 // callq _validate_string - QUAD $0xfffffa25356ffec5 // vmovdqu $-1499(%rip), %ymm6 /* LCPI18_3(%rip) */ - QUAD $0xfffff9fd2d6ffec5 // vmovdqu $-1539(%rip), %ymm5 /* LCPI18_2(%rip) */ - QUAD $0xfffff9d5256ffec5 // vmovdqu $-1579(%rip), %ymm4 /* LCPI18_1(%rip) */ - QUAD $0xfffff9ad1d6ffec5 // vmovdqu $-1619(%rip), %ymm3 /* LCPI18_0(%rip) */ - MOVQ BX, R11 - MOVQ -56(BP), SI - MOVQ -48(BP), DX + LEAQ -4(CX), DX + CMPQ AX, DX + JA LBB19_66 + MOVQ 0(SI), CX + MOVL 0(CX)(AX*1), DX + CMPL DX, $1702063201 + JNE LBB19_70 + LEAQ 4(AX), CX + MOVQ CX, 0(R14) TESTQ AX, AX - JS LBB18_115 + MOVQ R15, DX + JG LBB19_5 + JMP LBB19_82 -LBB18_89: - MOVLQSX 0(R12), AX - CMPQ AX, $65535 - JG LBB18_118 - LEAL 1(AX), CX - MOVL CX, 0(R12) - MOVL $4, 4(R12)(AX*4) - MOVL 0(R12), R8 - MOVQ R11, R14 - TESTL R8, R8 - JNE LBB18_10 - JMP LBB18_4 +LBB19_51: + MOVQ 0(R14), AX + MOVQ 8(DX), CX + MOVQ DX, SI + LEAQ -3(CX), DX + CMPQ AX, DX + JA LBB19_66 + MOVQ 0(SI), CX + LEAQ -1(AX), R13 + CMPL -1(CX)(AX*1), $1819047278 + JE LBB19_55 + JMP LBB19_73 -LBB18_91: - MOVL -60(BP), AX - CMPL AX, $1 - JE LBB18_114 - TESTL AX, AX - JNE LBB18_8 - MOVQ R11, BX - JMP LBB18_69 +LBB19_53: + MOVQ 0(R14), AX + MOVQ 8(DX), CX + MOVQ DX, SI + LEAQ -3(CX), DX + CMPQ AX, DX + JA LBB19_66 + MOVQ 0(SI), CX + LEAQ -1(AX), R13 + CMPL -1(CX)(AX*1), $1702195828 + JNE LBB19_76 -LBB18_94: - MOVLQSX 0(R12), AX - CMPQ AX, $65535 - JG LBB18_118 - LEAL 1(AX), CX - MOVL CX, 0(R12) - MOVL $5, 4(R12)(AX*4) - MOVL 0(R12), R8 - MOVQ R11, R14 - TESTL R8, R8 - JNE LBB18_10 - JMP LBB18_4 - -LBB18_96: - MOVQ 8(SI), AX - LEAQ -4(AX), CX - CMPQ R13, CX - JAE LBB18_2 - MOVL 0(DI)(R15*1), AX - CMPL AX, $1702063201 - JNE LBB18_119 - LEAQ 5(R13), AX - JMP LBB18_107 - -LBB18_99: - MOVQ 8(SI), CX - LEAQ -3(CX), BX - CMPQ R13, BX - JAE LBB18_116 - CMPL 0(AX), $1819047278 - JE LBB18_106 - JMP LBB18_101 - -LBB18_104: - MOVQ 8(SI), CX - LEAQ -3(CX), BX - CMPQ R13, BX - JAE LBB18_116 - CMPL 0(AX), $1702195828 - JNE LBB18_122 - -LBB18_106: - LEAQ 4(R13), AX - -LBB18_107: - MOVQ AX, 0(DX) - MOVQ R13, R14 - TESTQ R15, R15 - JG LBB18_8 - JMP LBB18_4 - -LBB18_108: - MOVLQSX 0(R12), AX - CMPQ AX, $65535 - JG LBB18_118 - LEAL 1(AX), CX - MOVL CX, 0(R12) - MOVL $6, 4(R12)(AX*4) - MOVL 0(R12), R8 - MOVQ R11, R14 - TESTL R8, R8 - JNE LBB18_10 - JMP LBB18_4 - -LBB18_110: - MOVWLZX AX, AX - SUBQ DI, BX - NOTL AX - BSFL AX, R13 - ADDQ BX, R13 - JMP LBB18_55 - -LBB18_114: - MOVQ SI, DI - MOVQ DX, SI - MOVQ R11, BX - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x000396e8; BYTE $0x00 // callq _validate_string - QUAD $0xfffff89b356ffec5 // vmovdqu $-1893(%rip), %ymm6 /* LCPI18_3(%rip) */ - QUAD $0xfffff8732d6ffec5 // vmovdqu $-1933(%rip), %ymm5 /* LCPI18_2(%rip) */ - QUAD $0xfffff84b256ffec5 // vmovdqu $-1973(%rip), %ymm4 /* LCPI18_1(%rip) */ - QUAD $0xfffff8231d6ffec5 // vmovdqu $-2013(%rip), %ymm3 /* LCPI18_0(%rip) */ - MOVQ BX, R11 - MOVQ -56(BP), SI - MOVQ -48(BP), DX +LBB19_55: + MOVQ SI, DX + LEAQ 3(AX), CX + MOVQ CX, 0(R14) TESTQ AX, AX - JNS LBB18_8 - JMP LBB18_115 + JG LBB19_5 + JMP LBB19_80 -LBB18_111: - NOTQ DI - ADDQ DI, R13 - JMP LBB18_55 +LBB19_56: + MOVLQSX 0(DI), AX + CMPQ AX, $65535 + JG LBB19_64 + LEAL 1(AX), CX + MOVL CX, 0(DI) + MOVL $6, 4(DI)(AX*4) + JMP LBB19_5 -LBB18_2: - MOVQ AX, 0(DX) +LBB19_58: + ADDQ $-1, BX + MOVQ R13, AX + MOVQ BX, R13 -LBB18_3: - MOVQ $-1, R14 +LBB19_59: + MOVQ R15, R14 + MOVQ AX, 0(R15) + JMP LBB19_37 -LBB18_4: - MOVQ R14, AX +LBB19_61: + MOVQ $-1, R13 + +LBB19_80: + MOVQ R13, AX 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 - WORD $0xf8c5; BYTE $0x77 // vzeroupper + 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 -LBB18_66: - MOVQ $-2, R14 - JMP LBB18_4 +LBB19_64: + MOVQ $-7, R13 + JMP LBB19_80 -LBB18_118: - MOVQ $-7, R14 - JMP LBB18_4 - -LBB18_112: - MOVQ -56(BP), AX - MOVQ 8(AX), AX - MOVQ -48(BP), CX - MOVQ AX, 0(CX) - JMP LBB18_4 - -LBB18_113: - MOVQ -48(BP), DX - MOVQ 0(DX), CX +LBB19_62: + MOVQ 0(BX), CX SUBQ AX, CX ADDQ $-2, CX - MOVQ CX, 0(DX) - JMP LBB18_4 + MOVQ CX, 0(BX) -LBB18_115: - MOVQ AX, R14 - JMP LBB18_4 +LBB19_79: + MOVQ $-2, R13 + JMP LBB19_80 -LBB18_116: - MOVQ CX, 0(DX) - JMP LBB18_3 +LBB19_66: + MOVQ CX, 0(R14) + MOVQ $-1, R13 + JMP LBB19_80 -LBB18_117: +LBB19_67: NOTQ AX - ADDQ AX, CX - MOVQ CX, 0(DX) - JMP LBB18_4 + ADDQ AX, 0(R14) + JMP LBB19_79 -LBB18_119: - CMPB AX, $97 - JNE LBB18_4 - ADDQ $2, R13 - MOVL $1702063201, AX +LBB19_68: + ADDQ $-1, R13 + JMP LBB19_80 -LBB18_121: - SHRL $8, AX - MOVQ R13, 0(DX) - MOVBLSX 0(DI)(R13*1), CX - MOVBLZX AX, SI - INCQ R13 - CMPL SI, CX - JE LBB18_121 - JMP LBB18_4 +LBB19_70: + MOVQ $-2, R13 + CMPB DX, $97 + JNE LBB19_80 + ADDQ $1, AX + MOVL $1702063201, DX -LBB18_101: - MOVQ R13, 0(DX) - CMPB 0(AX), $110 - JNE LBB18_4 - INCQ R13 - MOVL $1819047278, AX +LBB19_72: + SHRL $8, DX + MOVQ AX, 0(R14) + MOVBLSX 0(CX)(AX*1), SI + MOVBLZX DX, DI + ADDQ $1, AX + CMPL DI, SI + JE LBB19_72 + JMP LBB19_80 -LBB18_103: - SHRL $8, AX - MOVQ R13, 0(DX) - MOVBLSX 0(DI)(R13*1), CX - MOVBLZX AX, SI - INCQ R13 - CMPL SI, CX - JE LBB18_103 - JMP LBB18_4 +LBB19_73: + MOVQ R13, 0(R14) + CMPB 0(CX)(R13*1), $110 + JNE LBB19_79 + MOVL $1819047278, DX -LBB18_122: - MOVQ R13, 0(DX) - CMPB 0(AX), $116 - JNE LBB18_4 - MOVL $1702195828, AX +LBB19_75: + SHRL $8, DX + MOVQ AX, 0(R14) + MOVBLSX 0(CX)(AX*1), SI + MOVBLZX DX, DI + ADDQ $1, AX + CMPL DI, SI + JE LBB19_75 + JMP LBB19_79 -LBB18_124: - SHRL $8, AX - MOVQ R15, 0(DX) - MOVBLSX 0(DI)(R15*1), CX - MOVBLZX AX, SI - INCQ R15 - CMPL SI, CX - JE LBB18_124 - JMP LBB18_4 +LBB19_76: + MOVQ R13, 0(R14) + CMPB 0(CX)(R13*1), $116 + JNE LBB19_79 + MOVL $1702195828, DX -// .set L18_0_set_60, LBB18_60-LJTI18_0 -// .set L18_0_set_64, LBB18_64-LJTI18_0 -// .set L18_0_set_67, LBB18_67-LJTI18_0 -// .set L18_0_set_71, LBB18_71-LJTI18_0 -// .set L18_0_set_73, LBB18_73-LJTI18_0 -// .set L18_0_set_76, LBB18_76-LJTI18_0 -LJTI18_0: - LONG $0xfffffb37 // .long L18_0_set_60 - LONG $0xfffffb6a // .long L18_0_set_64 - LONG $0xfffffba6 // .long L18_0_set_67 - LONG $0xfffffbe4 // .long L18_0_set_71 - LONG $0xfffffc0a // .long L18_0_set_73 - LONG $0xfffffc70 // .long L18_0_set_76 +LBB19_78: + SHRL $8, DX + MOVQ AX, 0(R14) + MOVBLSX 0(CX)(AX*1), SI + MOVBLZX DX, DI + ADDQ $1, AX + CMPL DI, SI + JE LBB19_78 + JMP LBB19_79 - // .set L18_1_set_91, LBB18_91-LJTI18_1 - // .set L18_1_set_4, LBB18_4-LJTI18_1 - // .set L18_1_set_5, LBB18_5-LJTI18_1 - // .set L18_1_set_78, LBB18_78-LJTI18_1 - // .set L18_1_set_94, LBB18_94-LJTI18_1 - // .set L18_1_set_96, LBB18_96-LJTI18_1 - // .set L18_1_set_99, LBB18_99-LJTI18_1 - // .set L18_1_set_104, LBB18_104-LJTI18_1 - // .set L18_1_set_108, LBB18_108-LJTI18_1 -LJTI18_1: - LONG $0xfffffd9c // .long L18_1_set_91 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xfffff811 // .long L18_1_set_5 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xfffffc26 // .long L18_1_set_78 - LONG $0xfffffc26 // .long L18_1_set_78 - LONG $0xfffffc26 // .long L18_1_set_78 - LONG $0xfffffc26 // .long L18_1_set_78 - LONG $0xfffffc26 // .long L18_1_set_78 - LONG $0xfffffc26 // .long L18_1_set_78 - LONG $0xfffffc26 // .long L18_1_set_78 - LONG $0xfffffc26 // .long L18_1_set_78 - LONG $0xfffffc26 // .long L18_1_set_78 - LONG $0xfffffc26 // .long L18_1_set_78 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xfffffdb8 // .long L18_1_set_94 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xfffffded // .long L18_1_set_96 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xfffffe13 // .long L18_1_set_99 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xfffffe31 // .long L18_1_set_104 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xffffff08 // .long L18_1_set_4 - LONG $0xfffffe66 // .long L18_1_set_108 +LBB19_82: + ADDQ $-1, AX + MOVQ AX, R13 + JMP LBB19_80 + +// .set L19_0_set_12, LBB19_12-LJTI19_0 +// .set L19_0_set_15, LBB19_15-LJTI19_0 +// .set L19_0_set_17, LBB19_17-LJTI19_0 +// .set L19_0_set_20, LBB19_20-LJTI19_0 +// .set L19_0_set_22, LBB19_22-LJTI19_0 +// .set L19_0_set_24, LBB19_24-LJTI19_0 +LJTI19_0: + LONG $0xfffffbc3 // .long L19_0_set_12 + LONG $0xfffffbe9 // .long L19_0_set_15 + LONG $0xfffffbfe // .long L19_0_set_17 + LONG $0xfffffc38 // .long L19_0_set_20 + LONG $0xfffffc4c // .long L19_0_set_22 + LONG $0xfffffc5e // .long L19_0_set_24 + + // .set L19_1_set_80, LBB19_80-LJTI19_1 + // .set L19_1_set_79, LBB19_79-LJTI19_1 + // .set L19_1_set_42, LBB19_42-LJTI19_1 + // .set L19_1_set_44, LBB19_44-LJTI19_1 + // .set L19_1_set_29, LBB19_29-LJTI19_1 + // .set L19_1_set_46, LBB19_46-LJTI19_1 + // .set L19_1_set_48, LBB19_48-LJTI19_1 + // .set L19_1_set_51, LBB19_51-LJTI19_1 + // .set L19_1_set_53, LBB19_53-LJTI19_1 + // .set L19_1_set_56, LBB19_56-LJTI19_1 +LJTI19_1: + LONG $0xffffff16 // .long L19_1_set_80 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xfffffda6 // .long L19_1_set_42 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xfffffdd8 // .long L19_1_set_44 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xfffffc9b // .long L19_1_set_29 + LONG $0xfffffc9b // .long L19_1_set_29 + LONG $0xfffffc9b // .long L19_1_set_29 + LONG $0xfffffc9b // .long L19_1_set_29 + LONG $0xfffffc9b // .long L19_1_set_29 + LONG $0xfffffc9b // .long L19_1_set_29 + LONG $0xfffffc9b // .long L19_1_set_29 + LONG $0xfffffc9b // .long L19_1_set_29 + LONG $0xfffffc9b // .long L19_1_set_29 + LONG $0xfffffc9b // .long L19_1_set_29 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xfffffe0d // .long L19_1_set_46 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xfffffe2e // .long L19_1_set_48 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xfffffe6f // .long L19_1_set_51 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xfffffe9c // .long L19_1_set_53 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xffffff3e // .long L19_1_set_79 + LONG $0xfffffedd // .long L19_1_set_56 _skip_array: BYTE $0x55 // pushq %rbp @@ -6954,10 +7287,9 @@ _skip_array: MOVQ DX, AX MOVQ SI, DX MOVQ DI, SI - MOVQ $21474836481, CX - MOVQ CX, 0(AX) + MOVQ $21474836481, DI + MOVQ DI, 0(AX) MOVQ AX, DI - XORL CX, CX BYTE $0x5d // popq %rbp JMP _fsm_exec @@ -6967,574 +7299,42 @@ _skip_object: MOVQ DX, AX MOVQ SI, DX MOVQ DI, SI - MOVQ $25769803777, CX - MOVQ CX, 0(AX) + MOVQ $25769803777, DI + MOVQ DI, 0(AX) MOVQ AX, DI - XORL CX, CX BYTE $0x5d // popq %rbp JMP _fsm_exec _skip_string: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - WORD $0x5741 // pushq %r15 WORD $0x5641 // pushq %r14 BYTE $0x53 // pushq %rbx - BYTE $0x50 // pushq %rax + SUBQ $16, SP + MOVQ DX, CX MOVQ SI, R14 - MOVQ DI, R15 MOVQ 0(SI), BX - LEAQ -32(BP), DX + LEAQ -24(BP), DX MOVQ BX, SI - LONG $0xffeb20e8; BYTE $0xff // callq _advance_string + LONG $0xffe8d4e8; BYTE $0xff // callq _advance_string TESTQ AX, AX - JS LBB21_2 - DECQ BX - MOVQ AX, CX - MOVQ BX, AX - JMP LBB21_3 + JNS LBB22_1 + MOVQ -24(BP), CX + JMP LBB22_3 -LBB21_2: - MOVQ 8(R15), CX - -LBB21_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 - -LCPI22_0: - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - QUAD $0x2222222222222222; QUAD $0x2222222222222222 // .space 16, '""""""""""""""""' - -LCPI22_1: - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - QUAD $0x5c5c5c5c5c5c5c5c; QUAD $0x5c5c5c5c5c5c5c5c // .space 16, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - -LCPI22_2: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - -_validate_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 - SUBQ $40, SP - MOVQ SI, R14 - MOVQ 0(SI), R15 - MOVQ 8(DI), R12 - MOVQ R12, -64(BP) - SUBQ R15, R12 - JE LBB22_18 - MOVQ R14, -48(BP) - MOVQ 0(DI), DI - LEAQ 0(DI)(R15*1), SI - CMPQ R12, $64 - MOVQ SI, -72(BP) - JB LBB22_33 - MOVL R12, R9 - ANDL $63, R9 - MOVQ $-1, AX - XORL R13, R13 - QUAD $0xffffff46056ffec5 // vmovdqu $-186(%rip), %ymm0 /* LCPI22_0(%rip) */ - QUAD $0xffffff5e0d6ffec5 // vmovdqu $-162(%rip), %ymm1 /* LCPI22_1(%rip) */ - QUAD $0xffffff76156ffec5 // vmovdqu $-138(%rip), %ymm2 /* LCPI22_2(%rip) */ - LONG $0xdb76e5c5 // vpcmpeqd %ymm3, %ymm3, %ymm3 +LBB22_1: + ADDQ $-1, BX + MOVQ AX, CX + MOVQ BX, AX LBB22_3: - LONG $0x266ffec5 // vmovdqu (%rsi), %ymm4 - LONG $0x6e6ffec5; BYTE $0x20 // vmovdqu $32(%rsi), %ymm5 - LONG $0xf074ddc5 // vpcmpeqb %ymm0, %ymm4, %ymm6 - LONG $0xc6d77dc5 // vpmovmskb %ymm6, %r8d - LONG $0xf074d5c5 // vpcmpeqb %ymm0, %ymm5, %ymm6 - LONG $0xded7fdc5 // vpmovmskb %ymm6, %ebx - LONG $0xf174ddc5 // vpcmpeqb %ymm1, %ymm4, %ymm6 - LONG $0xded77dc5 // vpmovmskb %ymm6, %r11d - LONG $0xf174d5c5 // vpcmpeqb %ymm1, %ymm5, %ymm6 - LONG $0xf6d77dc5 // vpmovmskb %ymm6, %r14d - LONG $0xf464edc5 // vpcmpgtb %ymm4, %ymm2, %ymm6 - LONG $0xe364ddc5 // vpcmpgtb %ymm3, %ymm4, %ymm4 - LONG $0xe6dbddc5 // vpand %ymm6, %ymm4, %ymm4 - LONG $0xd4d77dc5 // vpmovmskb %ymm4, %r10d - LONG $0xe564edc5 // vpcmpgtb %ymm5, %ymm2, %ymm4 - LONG $0xeb64d5c5 // vpcmpgtb %ymm3, %ymm5, %ymm5 - LONG $0xe4dbd5c5 // vpand %ymm4, %ymm5, %ymm4 - LONG $0xd4d7fdc5 // vpmovmskb %ymm4, %edx - SHLQ $32, BX - SHLQ $32, R14 - ORQ R14, R11 - CMPQ AX, $-1 - JNE LBB22_5 - TESTQ R11, R11 - JNE LBB22_10 - -LBB22_5: - SHLQ $32, DX - ORQ R8, BX - MOVQ R11, CX - ORQ R13, CX - JNE LBB22_9 - ORQ R10, DX - TESTQ BX, BX - JNE LBB22_11 - -LBB22_7: - TESTQ DX, DX - JNE LBB22_21 - ADDQ $64, SI - ADDQ $-64, R12 - CMPQ R12, $63 - JA LBB22_3 - JMP LBB22_23 - -LBB22_9: - MOVQ R13, R14 - NOTQ R14 - ANDQ R11, R14 - LEAQ 0(R14)(R14*1), R8 - ORQ R13, R8 - MOVQ R8, -56(BP) - NOTQ R8 - ANDQ R11, R8 - MOVQ $-6148914691236517206, CX - ANDQ CX, R8 - XORL R13, R13 - ADDQ R14, R8 - SETCS R13 - ADDQ R8, R8 - MOVQ $6148914691236517205, CX - XORQ CX, R8 - ANDQ -56(BP), R8 - NOTQ R8 - ANDQ R8, BX - ORQ R10, DX - TESTQ BX, BX - JE LBB22_7 - JMP LBB22_11 - -LBB22_10: - MOVQ SI, R14 - SUBQ DI, R14 - BSFQ R11, AX - ADDQ R14, AX - JMP LBB22_5 - -LBB22_11: - SUBQ DI, SI - BSFQ BX, BX - LEAQ 1(SI)(BX*1), R12 - TESTQ DX, DX - MOVQ -48(BP), R14 - JE LBB22_13 - BSFQ DX, CX - CMPQ CX, BX - JBE LBB22_29 - -LBB22_13: - TESTQ R12, R12 - JS LBB22_17 - MOVQ R15, SI - NOTQ SI - ADDQ R12, SI - MOVQ -72(BP), DI - WORD $0xf8c5; BYTE $0x77 // vzeroupper - LONG $0x00026ee8; BYTE $0x00 // callq _utf8_validate - TESTQ AX, AX - JS LBB22_19 - ADDQ 0(R14), AX - -LBB22_16: - MOVQ $-2, R12 - JMP LBB22_20 - -LBB22_17: - CMPQ R12, $-1 - JNE LBB22_20 - -LBB22_18: - MOVQ $-1, R12 - MOVQ -64(BP), AX - JMP LBB22_20 - -LBB22_19: - DECQ R15 - MOVQ R12, AX - MOVQ R15, R12 - -LBB22_20: - MOVQ AX, 0(R14) - MOVQ R12, AX - 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 - WORD $0xf8c5; BYTE $0x77 // vzeroupper + MOVQ CX, 0(R14) + ADDQ $16, SP + BYTE $0x5b // popq %rbx + WORD $0x5e41 // popq %r14 + BYTE $0x5d // popq %rbp RET -LBB22_21: - MOVQ $-2, R12 - CMPQ AX, $-1 - JE LBB22_30 - -LBB22_22: - MOVQ -48(BP), R14 - JMP LBB22_20 - -LBB22_23: - MOVQ R9, R12 - CMPQ R12, $32 - JB LBB22_39 - -LBB22_24: - LONG $0x066ffec5 // vmovdqu (%rsi), %ymm0 - QUAD $0xfffffd7c0d74fdc5 // vpcmpeqb $-644(%rip), %ymm0, %ymm1 /* LCPI22_0(%rip) */ - LONG $0xd9d7fdc5 // vpmovmskb %ymm1, %ebx - QUAD $0xfffffd900d74fdc5 // vpcmpeqb $-624(%rip), %ymm0, %ymm1 /* LCPI22_1(%rip) */ - LONG $0xd1d7fdc5 // vpmovmskb %ymm1, %edx - QUAD $0xfffffda40d6ffec5 // vmovdqu $-604(%rip), %ymm1 /* LCPI22_2(%rip) */ - LONG $0xc864f5c5 // vpcmpgtb %ymm0, %ymm1, %ymm1 - LONG $0xd276edc5 // vpcmpeqd %ymm2, %ymm2, %ymm2 - LONG $0xc264fdc5 // vpcmpgtb %ymm2, %ymm0, %ymm0 - LONG $0xc1dbfdc5 // vpand %ymm1, %ymm0, %ymm0 - LONG $0xc0d77dc5 // vpmovmskb %ymm0, %r8d - TESTL DX, DX - JNE LBB22_34 - TESTQ R13, R13 - JNE LBB22_36 - XORL R13, R13 - TESTQ BX, BX - JE LBB22_37 - -LBB22_27: - SUBQ DI, SI - BSFQ BX, DX - LEAQ 1(SI)(DX*1), R12 - TESTL R8, R8 - JE LBB22_32 - BSFQ R8, CX - CMPQ CX, DX - MOVQ -48(BP), R14 - JA LBB22_13 - -LBB22_29: - ADDQ SI, CX - CMPQ AX, $-1 - LONG $0xc1440f48 // cmoveq %rcx, %rax - JMP LBB22_16 - -LBB22_30: - SUBQ DI, SI - BSFQ DX, AX - -LBB22_31: - ADDQ SI, AX - MOVQ -48(BP), R14 - JMP LBB22_20 - -LBB22_32: - MOVQ -48(BP), R14 - JMP LBB22_13 - -LBB22_33: - MOVQ $-1, AX - XORL R13, R13 - CMPQ R12, $32 - JAE LBB22_24 - JMP LBB22_39 - -LBB22_34: - CMPQ AX, $-1 - JNE LBB22_36 - MOVQ SI, CX - SUBQ DI, CX - BSFQ DX, AX - ADDQ CX, AX - -LBB22_36: - MOVL R13, R10 - NOTL R10 - ANDL DX, R10 - LEAL 0(R10)(R10*1), R9 - ORL R13, R9 - MOVL R9, CX - NOTL CX - ANDL DX, CX - ANDL $-1431655766, CX - XORL R13, R13 - ADDL R10, CX - SETCS R13 - ADDL CX, CX - XORL $1431655765, CX - ANDL R9, CX - NOTL CX - ANDL CX, BX - TESTQ BX, BX - JNE LBB22_27 - -LBB22_37: - TESTL R8, R8 - JNE LBB22_51 - ADDQ $32, SI - ADDQ $-32, R12 - -LBB22_39: - TESTQ R13, R13 - JNE LBB22_53 - MOVQ -48(BP), R14 - TESTQ R12, R12 - JE LBB22_50 - -LBB22_41: - MOVQ DI, R8 - NOTQ R8 - -LBB22_42: - LEAQ 1(SI), DX - MOVBLZX 0(SI), BX - CMPB BX, $34 - JE LBB22_49 - LEAQ -1(R12), R10 - CMPB BX, $92 - JE LBB22_46 - CMPB BX, $31 - JBE LBB22_55 - MOVQ DX, SI - MOVQ R10, R12 - TESTQ R10, R10 - JNE LBB22_42 - JMP LBB22_48 - -LBB22_46: - TESTQ R10, R10 - JE LBB22_18 - ADDQ R8, DX - CMPQ AX, $-1 - LONG $0xc2440f48 // cmoveq %rdx, %rax - ADDQ $2, SI - ADDQ $-2, R12 - MOVQ R12, R10 - TESTQ R10, R10 - JNE LBB22_42 - -LBB22_48: - CMPB BX, $34 - JNE LBB22_18 - JMP LBB22_50 - -LBB22_49: - MOVQ DX, SI - -LBB22_50: - SUBQ DI, SI - MOVQ SI, R12 - JMP LBB22_13 - -LBB22_51: - MOVQ $-2, R12 - CMPQ AX, $-1 - JNE LBB22_22 - SUBQ DI, SI - BSFQ R8, AX - JMP LBB22_31 - -LBB22_53: - TESTQ R12, R12 - MOVQ -48(BP), R14 - JE LBB22_18 - MOVQ DI, CX - NOTQ CX - ADDQ SI, CX - CMPQ AX, $-1 - LONG $0xc1440f48 // cmoveq %rcx, %rax - INCQ SI - DECQ R12 - TESTQ R12, R12 - JNE LBB22_41 - JMP LBB22_50 - -LBB22_55: - MOVQ $-2, R12 - CMPQ AX, $-1 - JNE LBB22_22 - ADDQ R8, DX - MOVQ DX, AX - MOVQ -48(BP), R14 - JMP LBB22_20 - -_utf8_validate: - 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 - TESTQ SI, SI - JLE LBB23_33 - LONG $0xd60d8d4c; WORD $0x00b0; BYTE $0x00 // leaq $45270(%rip), %r9 /* _first(%rip) */ - LONG $0xcf058d4c; WORD $0x00b1; BYTE $0x00 // leaq $45519(%rip), %r8 /* _ranges(%rip) */ - LONG $0x4e158d4c; WORD $0x0001; BYTE $0x00 // leaq $334(%rip), %r10 /* LJTI23_0(%rip) */ - MOVQ DI, R11 - -LBB23_2: - CMPB 0(R11), $0 - JS LBB23_3 - MOVQ SI, DX - MOVQ R11, CX - CMPQ SI, $32 - JL LBB23_10 - MOVQ R11, CX - MOVQ SI, DX - -LBB23_6: - LONG $0x016ffec5 // vmovdqu (%rcx), %ymm0 - LONG $0xd8d7fdc5 // vpmovmskb %ymm0, %ebx - TESTL BX, BX - JNE LBB23_7 - ADDQ $32, CX - CMPQ DX, $63 - LEAQ -32(DX), DX - JG LBB23_6 - -LBB23_10: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - CMPQ DX, $16 - JL LBB23_11 - -LBB23_16: - LONG $0x016ffac5 // vmovdqu (%rcx), %xmm0 - LONG $0xd8d7f9c5 // vpmovmskb %xmm0, %ebx - TESTW BX, BX - JNE LBB23_17 - ADDQ $16, CX - CMPQ DX, $31 - LEAQ -16(DX), DX - JG LBB23_16 - -LBB23_11: - TESTQ DX, DX - JLE LBB23_33 - INCQ DX - -LBB23_13: - CMPB 0(CX), $0 - JS LBB23_18 - INCQ CX - DECQ DX - CMPQ DX, $1 - JG LBB23_13 - JMP LBB23_33 - -LBB23_3: - XORL DX, DX - CMPQ DX, $-1 - JNE LBB23_20 - JMP LBB23_33 - -LBB23_18: - SUBQ R11, CX - MOVQ CX, DX - CMPQ DX, $-1 - JE LBB23_33 - -LBB23_20: - SUBQ DX, SI - JLE LBB23_33 - LEAQ 0(R11)(DX*1), R14 - MOVBLZX 0(R11)(DX*1), R11 - MOVBLZX 0(R11)(R9*1), R15 - MOVL R15, DX - ANDL $7, DX - CMPQ SI, DX - JB LBB23_31 - CMPB DX, $4 - JA LBB23_31 - MOVL $1, BX - MOVBLZX DX, CX - MOVLQSX 0(R10)(CX*4), CX - ADDQ R10, CX - JMP CX - -LBB23_24: - MOVB 3(R14), BX - TESTB BX, BX - JNS LBB23_31 - CMPB BX, $-65 - JA LBB23_31 - -LBB23_26: - MOVB 2(R14), BX - TESTB BX, BX - JNS LBB23_31 - CMPB BX, $-65 - JA LBB23_31 - -LBB23_28: - TESTB R11, R11 - JNS LBB23_31 - SHRQ $4, R15 - MOVB 1(R14), R11 - CMPB R11, 0(R8)(R15*2) - JB LBB23_31 - MOVQ DX, BX - CMPB 1(R8)(R15*2), R11 - JB LBB23_31 - -LBB23_32: - ADDQ BX, R14 - MOVQ R14, R11 - SUBQ BX, SI - JG LBB23_2 - JMP LBB23_33 - -LBB23_7: - MOVLQSX BX, DX - JMP LBB23_8 - -LBB23_17: - MOVWLZX BX, DX - -LBB23_8: - SUBQ R11, CX - BSFQ DX, DX - ADDQ CX, DX - CMPQ DX, $-1 - JNE LBB23_20 - JMP LBB23_33 - -LBB23_31: - SUBQ DI, R14 - MOVQ R14, AX - -LBB23_33: - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - WORD $0x5f41 // popq %r15 - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - RET - -// .set L23_0_set_32, LBB23_32-LJTI23_0 -// .set L23_0_set_31, LBB23_31-LJTI23_0 -// .set L23_0_set_28, LBB23_28-LJTI23_0 -// .set L23_0_set_26, LBB23_26-LJTI23_0 -// .set L23_0_set_24, LBB23_24-LJTI23_0 -LJTI23_0: - LONG $0xffffffc1 // .long L23_0_set_32 - LONG $0xfffffff0 // .long L23_0_set_31 - LONG $0xffffffa4 // .long L23_0_set_28 - LONG $0xffffff97 // .long L23_0_set_26 - LONG $0xffffff8a // .long L23_0_set_24 - _skip_negative: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp @@ -7547,143 +7347,226 @@ _skip_negative: MOVQ 8(DI), SI SUBQ BX, SI MOVQ AX, DI - LONG $0x00017be8; BYTE $0x00 // callq _do_skip_number - MOVQ 0(R14), CX + LONG $0x000173e8; BYTE $0x00 // callq _do_skip_number TESTQ AX, AX - JS LBB24_1 - ADDQ AX, CX - MOVQ CX, 0(R14) - DECQ BX - JMP LBB24_3 + JS LBB23_1 + ADDQ AX, 0(R14) + ADDQ $-1, BX + JMP LBB23_3 -LBB24_1: +LBB23_1: NOTQ AX - ADDQ AX, CX - MOVQ CX, 0(R14) + ADDQ AX, 0(R14) MOVQ $-2, BX -LBB24_3: +LBB23_3: MOVQ BX, AX BYTE $0x5b // popq %rbx WORD $0x5e41 // popq %r14 BYTE $0x5d // popq %rbp RET -LCPI25_0: +LCPI24_0: QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' -LCPI25_1: +LCPI24_1: QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' -LCPI25_2: +LCPI24_2: QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' -LCPI25_3: +LCPI24_3: QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' -LCPI25_4: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' +LCPI24_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' -LCPI25_5: +LCPI24_5: QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' -LCPI25_6: - QUAD $0x6565656565656565; QUAD $0x6565656565656565 // .space 16, 'eeeeeeeeeeeeeeee' - QUAD $0x6565656565656565; QUAD $0x6565656565656565 // .space 16, 'eeeeeeeeeeeeeeee' +LCPI24_6: + QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE' + QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE' -LCPI25_7: +LCPI24_7: QUAD $0x2f2f2f2f2f2f2f2f; QUAD $0x2f2f2f2f2f2f2f2f // .space 16, '////////////////' -LCPI25_8: +LCPI24_8: QUAD $0x3a3a3a3a3a3a3a3a; QUAD $0x3a3a3a3a3a3a3a3a // .space 16, '::::::::::::::::' -LCPI25_9: +LCPI24_9: QUAD $0x2b2b2b2b2b2b2b2b; QUAD $0x2b2b2b2b2b2b2b2b // .space 16, '++++++++++++++++' -LCPI25_10: +LCPI24_10: QUAD $0x2d2d2d2d2d2d2d2d; QUAD $0x2d2d2d2d2d2d2d2d // .space 16, '----------------' -LCPI25_11: - QUAD $0x2020202020202020; QUAD $0x2020202020202020 // .space 16, ' ' +LCPI24_11: + QUAD $0xdfdfdfdfdfdfdfdf; QUAD $0xdfdfdfdfdfdfdfdf // .space 16, '\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf' -LCPI25_12: +LCPI24_12: QUAD $0x2e2e2e2e2e2e2e2e; QUAD $0x2e2e2e2e2e2e2e2e // .space 16, '................' -LCPI25_13: - QUAD $0x6565656565656565; QUAD $0x6565656565656565 // .space 16, 'eeeeeeeeeeeeeeee' +LCPI24_13: + QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE' _do_skip_number: 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 TESTQ SI, SI - JE LBB25_53 + JE LBB24_1 CMPB 0(DI), $48 - JNE LBB25_5 - MOVL $1, DX + JNE LBB24_6 + MOVL $1, AX CMPQ SI, $1 - JE LBB25_73 - MOVB 1(DI), AX - ADDB $-46, AX - CMPB AX, $55 - JA LBB25_73 - MOVBLZX AX, AX - MOVQ $36028797027352577, CX - BTQ AX, CX - JAE LBB25_73 + JE LBB24_81 + MOVB 1(DI), CX + ADDB $-46, CX + CMPB CX, $55 + JA LBB24_81 + MOVBLZX CX, CX + MOVQ $36028797027352577, DX + BTQ CX, DX + JAE LBB24_81 -LBB25_5: - CMPQ SI, $32 - JB LBB25_76 - LEAQ -32(SI), R11 - MOVQ R11, AX - ANDQ $-32, AX - LEAQ 32(AX)(DI*1), R10 - ANDL $31, R11 +LBB24_6: MOVQ $-1, R9 - QUAD $0xfffffe35056ffec5 // vmovdqu $-459(%rip), %ymm0 /* LCPI25_0(%rip) */ - QUAD $0xfffffe4d0d6ffec5 // vmovdqu $-435(%rip), %ymm1 /* LCPI25_1(%rip) */ - QUAD $0xfffffe65156ffec5 // vmovdqu $-411(%rip), %ymm2 /* LCPI25_2(%rip) */ - QUAD $0xfffffe7d1d6ffec5 // vmovdqu $-387(%rip), %ymm3 /* LCPI25_3(%rip) */ - QUAD $0xfffffe95256ffec5 // vmovdqu $-363(%rip), %ymm4 /* LCPI25_4(%rip) */ - QUAD $0xfffffead2d6ffec5 // vmovdqu $-339(%rip), %ymm5 /* LCPI25_5(%rip) */ - QUAD $0xfffffec5356ffec5 // vmovdqu $-315(%rip), %ymm6 /* LCPI25_6(%rip) */ - MOVQ $-1, AX + CMPQ SI, $32 + JB LBB24_7 + XORL AX, AX + QUAD $0xfffffe47056ffec5 // vmovdqu $-441(%rip), %ymm0 /* LCPI24_0(%rip) */ + QUAD $0xfffffe5f0d6ffec5 // vmovdqu $-417(%rip), %ymm1 /* LCPI24_1(%rip) */ + QUAD $0xfffffe77156ffec5 // vmovdqu $-393(%rip), %ymm2 /* LCPI24_2(%rip) */ + QUAD $0xfffffe8f1d6ffec5 // vmovdqu $-369(%rip), %ymm3 /* LCPI24_3(%rip) */ + QUAD $0xfffffea7256ffec5 // vmovdqu $-345(%rip), %ymm4 /* LCPI24_4(%rip) */ + QUAD $0xfffffebf2d6ffec5 // vmovdqu $-321(%rip), %ymm5 /* LCPI24_5(%rip) */ + QUAD $0xfffffed7356ffec5 // vmovdqu $-297(%rip), %ymm6 /* LCPI24_6(%rip) */ MOVQ $-1, R8 - MOVQ DI, R14 + MOVQ $-1, R10 -LBB25_7: - LONG $0x6f7ec1c4; BYTE $0x3e // vmovdqu (%r14), %ymm7 +LBB24_9: + LONG $0x3c6ffec5; BYTE $0x07 // vmovdqu (%rdi,%rax), %ymm7 LONG $0xc06445c5 // vpcmpgtb %ymm0, %ymm7, %ymm8 LONG $0xcf6475c5 // vpcmpgtb %ymm7, %ymm1, %ymm9 - LONG $0xdb3d41c4; BYTE $0xc1 // vpand %ymm9, %ymm8, %ymm8 + 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 $0xd4eb45c5 // vpor %ymm4, %ymm7, %ymm10 + LONG $0xd4db45c5 // vpand %ymm4, %ymm7, %ymm10 LONG $0xd6742dc5 // vpcmpeqb %ymm6, %ymm10, %ymm10 LONG $0xfd74c5c5 // vpcmpeqb %ymm5, %ymm7, %ymm7 LONG $0xd7d7fdc5 // vpmovmskb %ymm7, %edx - LONG $0xd77d41c4; BYTE $0xe2 // vpmovmskb %ymm10, %r12d - LONG $0xd77d41c4; BYTE $0xf9 // vpmovmskb %ymm9, %r15d - LONG $0xffebadc5 // vpor %ymm7, %ymm10, %ymm7 - LONG $0xeb3541c4; BYTE $0xc0 // vpor %ymm8, %ymm9, %ymm8 + LONG $0xd77d41c4; BYTE $0xfa // vpmovmskb %ymm10, %r15d + 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 LBB25_9 + BSFQ CX, R14 + CMPL R14, $32 + JE LBB24_11 + MOVL $-1, BX + MOVL R14, CX + SHLL CX, BX + NOTL BX + ANDL BX, DX + ANDL BX, R15 + ANDL R11, BX + MOVL BX, R11 + +LBB24_11: + LEAL -1(DX), CX + ANDL DX, CX + JNE LBB24_12 + LEAL -1(R15), CX + ANDL R15, CX + JNE LBB24_12 + LEAL -1(R11), CX + ANDL R11, CX + JNE LBB24_12 + TESTL DX, DX + JE LBB24_19 + BSFL DX, CX + CMPQ R10, $-1 + JNE LBB24_82 + ADDQ AX, CX + MOVQ CX, R10 + +LBB24_19: + TESTL R15, R15 + JE LBB24_22 + BSFL R15, CX + CMPQ R8, $-1 + JNE LBB24_82 + ADDQ AX, CX + MOVQ CX, R8 + +LBB24_22: + TESTL R11, R11 + JE LBB24_25 + BSFL R11, CX + CMPQ R9, $-1 + JNE LBB24_82 + ADDQ AX, CX + MOVQ CX, R9 + +LBB24_25: + CMPL R14, $32 + JNE LBB24_83 + ADDQ $-32, SI + ADDQ $32, AX + CMPQ SI, $31 + JA LBB24_9 + WORD $0xf8c5; BYTE $0x77 // vzeroupper + ADDQ DI, AX + MOVQ AX, R14 + CMPQ SI, $16 + JB LBB24_49 + +LBB24_29: + MOVQ R14, R11 + SUBQ DI, R11 + XORL AX, AX + QUAD $0xfffffdce056f7ac5 // vmovdqu $-562(%rip), %xmm8 /* LCPI24_7(%rip) */ + QUAD $0xfffffdd60d6f7ac5 // vmovdqu $-554(%rip), %xmm9 /* LCPI24_8(%rip) */ + QUAD $0xfffffdde156f7ac5 // vmovdqu $-546(%rip), %xmm10 /* LCPI24_9(%rip) */ + QUAD $0xfffffde61d6f7ac5 // vmovdqu $-538(%rip), %xmm11 /* LCPI24_10(%rip) */ + QUAD $0xfffffdee256ffac5 // vmovdqu $-530(%rip), %xmm4 /* LCPI24_11(%rip) */ + QUAD $0xfffffdf62d6ffac5 // vmovdqu $-522(%rip), %xmm5 /* LCPI24_12(%rip) */ + QUAD $0xfffffdfe356ffac5 // vmovdqu $-514(%rip), %xmm6 /* LCPI24_13(%rip) */ + +LBB24_30: + LONG $0x6f7ac1c4; WORD $0x063c // vmovdqu (%r14,%rax), %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 $0xd7d7f9c5 // vpmovmskb %xmm7, %edx + LONG $0xe2d779c5 // vpmovmskb %xmm2, %r12d + LONG $0xf9d779c5 // vpmovmskb %xmm1, %r15d + LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx + NOTL CX + BSFL CX, CX + CMPL CX, $16 + JE LBB24_32 MOVL $-1, BX SHLL CX, BX NOTL BX @@ -7692,389 +7575,262 @@ LBB25_7: ANDL R15, BX MOVL BX, R15 -LBB25_9: +LBB24_32: LEAL -1(DX), BX ANDL DX, BX - JNE LBB25_70 + JNE LBB24_33 LEAL -1(R12), BX ANDL R12, BX - JNE LBB25_70 + JNE LBB24_33 LEAL -1(R15), BX ANDL R15, BX - JNE LBB25_70 + JNE LBB24_33 TESTL DX, DX - JE LBB25_15 - MOVQ R14, BX - SUBQ DI, BX + JE LBB24_40 BSFL DX, DX - ADDQ BX, DX + CMPQ R10, $-1 + JNE LBB24_84 + ADDQ R11, DX + ADDQ AX, DX + MOVQ DX, R10 + +LBB24_40: + TESTL R12, R12 + JE LBB24_43 + BSFL R12, DX CMPQ R8, $-1 - JNE LBB25_72 + JNE LBB24_84 + ADDQ R11, DX + ADDQ AX, DX MOVQ DX, R8 -LBB25_15: - TESTL R12, R12 - JE LBB25_18 - MOVQ R14, BX - SUBQ DI, BX - BSFL R12, DX - ADDQ BX, DX - CMPQ AX, $-1 - JNE LBB25_72 - MOVQ DX, AX - -LBB25_18: +LBB24_43: TESTL R15, R15 - JE LBB25_21 - MOVQ R14, BX - SUBQ DI, BX + JE LBB24_46 BSFL R15, DX - ADDQ BX, DX CMPQ R9, $-1 - JNE LBB25_72 + JNE LBB24_84 + ADDQ R11, DX + ADDQ AX, DX MOVQ DX, R9 -LBB25_21: - CMPL CX, $32 - JNE LBB25_54 - ADDQ $32, R14 - ADDQ $-32, SI - CMPQ SI, $31 - JA LBB25_7 - WORD $0xf8c5; BYTE $0x77 // vzeroupper - MOVQ R11, SI - CMPQ SI, $16 - JB LBB25_42 - -LBB25_24: - LEAQ -16(SI), R14 - MOVQ R14, CX - ANDQ $-16, CX - LEAQ 16(CX)(R10*1), R11 - ANDL $15, R14 - QUAD $0xfffffda2056f7ac5 // vmovdqu $-606(%rip), %xmm8 /* LCPI25_7(%rip) */ - QUAD $0xfffffdaa0d6f7ac5 // vmovdqu $-598(%rip), %xmm9 /* LCPI25_8(%rip) */ - QUAD $0xfffffdb2156f7ac5 // vmovdqu $-590(%rip), %xmm10 /* LCPI25_9(%rip) */ - QUAD $0xfffffdba1d6f7ac5 // vmovdqu $-582(%rip), %xmm11 /* LCPI25_10(%rip) */ - QUAD $0xfffffdc2256ffac5 // vmovdqu $-574(%rip), %xmm4 /* LCPI25_11(%rip) */ - QUAD $0xfffffdca2d6ffac5 // vmovdqu $-566(%rip), %xmm5 /* LCPI25_12(%rip) */ - QUAD $0xfffffdd2356ffac5 // vmovdqu $-558(%rip), %xmm6 /* LCPI25_13(%rip) */ - MOVL $4294967295, R15 - -LBB25_25: - LONG $0x6f7ac1c4; BYTE $0x3a // vmovdqu (%r10), %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 $0xd4ebc1c5 // vpor %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 $0xd7d7f9c5 // vpmovmskb %xmm7, %edx - LONG $0xead779c5 // vpmovmskb %xmm2, %r13d - LONG $0xe1d779c5 // vpmovmskb %xmm1, %r12d - LONG $0xc8d7f9c5 // vpmovmskb %xmm0, %ecx - XORQ R15, CX - BSFQ CX, CX +LBB24_46: CMPL CX, $16 - JE LBB25_27 - MOVL $-1, BX - SHLL CX, BX - NOTL BX - ANDL BX, DX - ANDL BX, R13 - ANDL R12, BX - MOVL BX, R12 - -LBB25_27: - LEAL -1(DX), BX - ANDL DX, BX - JNE LBB25_71 - LEAL -1(R13), BX - ANDL R13, BX - JNE LBB25_71 - LEAL -1(R12), BX - ANDL R12, BX - JNE LBB25_71 - TESTL DX, DX - JE LBB25_33 - MOVQ R10, BX - SUBQ DI, BX - BSFL DX, DX - ADDQ BX, DX - CMPQ R8, $-1 - JNE LBB25_72 - MOVQ DX, R8 - -LBB25_33: - TESTL R13, R13 - JE LBB25_36 - MOVQ R10, BX - SUBQ DI, BX - BSFL R13, DX - ADDQ BX, DX - CMPQ AX, $-1 - JNE LBB25_72 - MOVQ DX, AX - -LBB25_36: - TESTL R12, R12 - JE LBB25_39 - MOVQ R10, BX - SUBQ DI, BX - BSFL R12, DX - ADDQ BX, DX - CMPQ R9, $-1 - JNE LBB25_72 - MOVQ DX, R9 - -LBB25_39: - CMPL CX, $16 - JNE LBB25_55 - ADDQ $16, R10 + JNE LBB24_65 ADDQ $-16, SI + ADDQ $16, AX CMPQ SI, $15 - JA LBB25_25 - MOVQ R14, SI - MOVQ R11, R10 + JA LBB24_30 + ADDQ AX, R14 -LBB25_42: +LBB24_49: TESTQ SI, SI - JE LBB25_56 - LEAQ 0(R10)(SI*1), R11 - LONG $0x8f1d8d48; WORD $0x0001; BYTE $0x00 // leaq $399(%rip), %rbx /* LJTI25_0(%rip) */ - JMP LBB25_45 + JE LBB24_67 + LEAQ 0(R14)(SI*1), R11 + MOVQ R14, DX + SUBQ DI, DX + XORL AX, AX + LONG $0x813d8d4c; WORD $0x0001; BYTE $0x00 // leaq $385(%rip), %r15 /* LJTI24_0(%rip) */ + JMP LBB24_51 -LBB25_44: - MOVQ CX, R10 - DECQ SI - JE LBB25_75 +LBB24_53: + CMPL CX, $101 + JNE LBB24_66 -LBB25_45: - MOVBLSX 0(R10), DX - ADDL $-43, DX - CMPL DX, $58 - JA LBB25_56 - LEAQ 1(R10), CX - MOVLQSX 0(BX)(DX*4), DX - ADDQ BX, DX - JMP DX - -LBB25_47: - MOVQ CX, DX - SUBQ DI, DX - CMPQ R9, $-1 - JNE LBB25_79 - DECQ DX - MOVQ DX, R9 - JMP LBB25_44 - -LBB25_49: - MOVQ CX, DX - SUBQ DI, DX - CMPQ AX, $-1 - JNE LBB25_79 - DECQ DX - MOVQ DX, AX - JMP LBB25_44 - -LBB25_51: - MOVQ CX, DX - SUBQ DI, DX +LBB24_54: CMPQ R8, $-1 - JNE LBB25_79 - DECQ DX - MOVQ DX, R8 - JMP LBB25_44 + JNE LBB24_59 + LEAQ 0(DX)(AX*1), R8 -LBB25_53: +LBB24_63: + ADDQ $1, AX + CMPQ SI, AX + JE LBB24_64 + +LBB24_51: + MOVBLSX 0(R14)(AX*1), CX + LEAL -48(CX), BX + CMPL BX, $10 + JB LBB24_63 + LEAL -43(CX), BX + CMPL BX, $26 + JA LBB24_53 + MOVLQSX 0(R15)(BX*4), CX + ADDQ R15, CX + JMP CX + +LBB24_61: + CMPQ R9, $-1 + JNE LBB24_59 + LEAQ 0(DX)(AX*1), R9 + JMP LBB24_63 + +LBB24_57: + CMPQ R10, $-1 + JNE LBB24_59 + LEAQ 0(DX)(AX*1), R10 + JMP LBB24_63 + +LBB24_1: MOVQ $-1, AX - JMP LBB25_74 + JMP LBB24_81 -LBB25_54: - ADDQ CX, R14 +LBB24_83: + ADDQ AX, R14 + ADDQ DI, R14 WORD $0xf8c5; BYTE $0x77 // vzeroupper - MOVQ R14, R10 - MOVQ $-1, DX - TESTQ AX, AX - JNE LBB25_57 - JMP LBB25_73 + MOVQ $-1, AX + TESTQ R10, R10 + JNE LBB24_68 + JMP LBB24_81 -LBB25_55: - ADDQ CX, R10 +LBB24_65: + MOVL CX, CX + ADDQ CX, R14 -LBB25_56: - MOVQ $-1, DX - TESTQ AX, AX - JE LBB25_73 +LBB24_66: + ADDQ AX, R14 -LBB25_57: +LBB24_67: + MOVQ $-1, AX + TESTQ R10, R10 + JE LBB24_81 + +LBB24_68: TESTQ R9, R9 - JE LBB25_73 + JE LBB24_81 TESTQ R8, R8 - JE LBB25_73 - SUBQ DI, R10 - LEAQ -1(R10), CX - CMPQ AX, CX - JE LBB25_65 - CMPQ R8, CX - JE LBB25_65 - CMPQ R9, CX - JE LBB25_65 - TESTQ R9, R9 - JLE LBB25_66 - LEAQ -1(R9), CX - CMPQ AX, CX - JE LBB25_66 - NOTQ R9 - MOVQ R9, DX - MOVQ R9, AX - JMP LBB25_74 - -LBB25_65: - NEGQ R10 - MOVQ R10, DX - MOVQ R10, AX - JMP LBB25_74 - -LBB25_66: - MOVQ R8, CX - ORQ AX, CX + JE LBB24_81 + SUBQ DI, R14 + LEAQ -1(R14), AX + CMPQ R10, AX + JE LBB24_73 + CMPQ R9, AX + JE LBB24_73 CMPQ R8, AX - JL LBB25_69 - TESTQ CX, CX - JS LBB25_69 + JE LBB24_73 + TESTQ R9, R9 + JLE LBB24_77 + LEAQ -1(R9), AX + CMPQ R8, AX + JE LBB24_77 + NOTQ R9 + MOVQ R9, AX + JMP LBB24_81 + +LBB24_73: + NEGQ R14 + MOVQ R14, AX + JMP LBB24_81 + +LBB24_77: + MOVQ R10, AX + ORQ R8, AX + SETPL AX + JS LBB24_80 + CMPQ R10, R8 + JL LBB24_80 + NOTQ R10 + MOVQ R10, AX + JMP LBB24_81 + +LBB24_80: + LEAQ -1(R8), CX + CMPQ R10, CX NOTQ R8 - MOVQ R8, DX + LONG $0xc6450f4d // cmovneq %r14, %r8 + TESTB AX, AX + LONG $0xc6440f4d // cmoveq %r14, %r8 MOVQ R8, AX - JMP LBB25_74 + JMP LBB24_81 -LBB25_69: - TESTQ CX, CX - LEAQ -1(AX), CX - NOTQ AX - LONG $0xc2480f49 // cmovsq %r10, %rax - CMPQ R8, CX - LONG $0xc2450f49 // cmovneq %r10, %rax - JMP LBB25_74 +LBB24_64: + MOVQ R11, R14 + MOVQ $-1, AX + TESTQ R10, R10 + JNE LBB24_68 + JMP LBB24_81 -LBB25_70: - SUBQ DI, R14 - BSFL BX, DX - ADDQ R14, DX - JMP LBB25_72 +LBB24_12: + BSFL CX, CX + JMP LBB24_13 -LBB25_71: - SUBQ DI, R10 - BSFL BX, DX - ADDQ R10, DX +LBB24_82: + MOVL CX, CX -LBB25_72: - NOTQ DX +LBB24_13: + NOTQ AX + SUBQ CX, AX + JMP LBB24_81 -LBB25_73: - MOVQ DX, AX +LBB24_33: + BSFL BX, CX + JMP LBB24_34 -LBB25_74: +LBB24_59: + SUBQ R14, DI + JMP LBB24_60 + +LBB24_84: + MOVL DX, CX + +LBB24_34: + SUBQ R14, DI + SUBQ CX, DI + +LBB24_60: + NOTQ AX + ADDQ DI, AX + +LBB24_81: 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 -LBB25_75: - MOVQ R11, R10 - MOVQ $-1, DX - TESTQ AX, AX - JNE LBB25_57 - JMP LBB25_73 - -LBB25_79: - NEGQ DX - JMP LBB25_73 - -LBB25_76: - MOVQ $-1, R9 - MOVQ $-1, AX +LBB24_7: MOVQ $-1, R8 - MOVQ DI, R10 + MOVQ $-1, R10 + MOVQ DI, R14 CMPQ SI, $16 - JAE LBB25_24 - JMP LBB25_42 + JAE LBB24_29 + JMP LBB24_49 -// .set L25_0_set_47, LBB25_47-LJTI25_0 -// .set L25_0_set_56, LBB25_56-LJTI25_0 -// .set L25_0_set_51, LBB25_51-LJTI25_0 -// .set L25_0_set_44, LBB25_44-LJTI25_0 -// .set L25_0_set_49, LBB25_49-LJTI25_0 -LJTI25_0: - LONG $0xfffffe98 // .long L25_0_set_47 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xfffffe98 // .long L25_0_set_47 - LONG $0xfffffec8 // .long L25_0_set_51 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xfffffe73 // .long L25_0_set_44 - LONG $0xfffffe73 // .long L25_0_set_44 - LONG $0xfffffe73 // .long L25_0_set_44 - LONG $0xfffffe73 // .long L25_0_set_44 - LONG $0xfffffe73 // .long L25_0_set_44 - LONG $0xfffffe73 // .long L25_0_set_44 - LONG $0xfffffe73 // .long L25_0_set_44 - LONG $0xfffffe73 // .long L25_0_set_44 - LONG $0xfffffe73 // .long L25_0_set_44 - LONG $0xfffffe73 // .long L25_0_set_44 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xfffffeb0 // .long L25_0_set_49 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xffffff09 // .long L25_0_set_56 - LONG $0xfffffeb0 // .long L25_0_set_49 +// .set L24_0_set_61, LBB24_61-LJTI24_0 +// .set L24_0_set_66, LBB24_66-LJTI24_0 +// .set L24_0_set_57, LBB24_57-LJTI24_0 +// .set L24_0_set_54, LBB24_54-LJTI24_0 +LJTI24_0: + LONG $0xfffffec3 // .long L24_0_set_61 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xfffffec3 // .long L24_0_set_61 + LONG $0xfffffed3 // .long L24_0_set_57 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xffffff0e // .long L24_0_set_66 + LONG $0xfffffe8a // .long L24_0_set_54 _skip_positive: BYTE $0x55 // pushq %rbp @@ -8083,26 +7839,27 @@ _skip_positive: BYTE $0x53 // pushq %rbx MOVQ SI, R14 MOVQ 0(SI), BX - DECQ BX + ADDQ $-1, BX MOVQ 0(DI), AX ADDQ BX, AX MOVQ 8(DI), SI SUBQ BX, SI MOVQ AX, DI - LONG $0xfffa20e8; BYTE $0xff // callq _do_skip_number + LONG $0xfffae4e8; BYTE $0xff // callq _do_skip_number TESTQ AX, AX - JS LBB26_1 + JS LBB25_1 MOVQ 0(R14), CX - LEAQ -1(AX)(CX*1), CX - JMP LBB26_3 + ADDQ AX, CX + ADDQ $-1, CX + JMP LBB25_3 -LBB26_1: +LBB25_1: MOVQ 0(R14), CX SUBQ AX, CX ADDQ $-2, CX MOVQ $-2, BX -LBB26_3: +LBB25_3: MOVQ CX, 0(R14) MOVQ BX, AX BYTE $0x5b // popq %rbx @@ -8127,22 +7884,22 @@ _skip_number: SETEQ AX ADDQ AX, BX SUBQ AX, SI - JE LBB27_6 + JE LBB26_6 CMPQ R15, SI - JAE LBB27_3 + JAE LBB26_3 MOVB 0(BX), AX ADDB $-48, AX CMPB AX, $9 - JA LBB27_8 + JA LBB26_8 -LBB27_3: +LBB26_3: MOVQ BX, DI - LONG $0xfff9b2e8; BYTE $0xff // callq _do_skip_number + LONG $0xfffa74e8; BYTE $0xff // callq _do_skip_number TESTQ AX, AX - JS LBB27_7 + JS LBB26_7 ADDQ AX, BX -LBB27_5: +LBB26_5: SUBQ R12, BX MOVQ BX, 0(R14) MOVQ R15, AX @@ -8153,17 +7910,17 @@ LBB27_5: BYTE $0x5d // popq %rbp RET -LBB27_6: +LBB26_6: MOVQ $-1, R15 - JMP LBB27_5 + JMP LBB26_5 -LBB27_7: +LBB26_7: NOTQ AX ADDQ AX, BX -LBB27_8: +LBB26_8: MOVQ $-2, R15 - JMP LBB27_5 + JMP LBB26_5 _validate_one: BYTE $0x55 // pushq %rbp @@ -8172,92 +7929,21 @@ _validate_one: MOVQ SI, DX MOVQ DI, SI MOVQ $1, 0(AX) + MOVL $32, CX MOVQ AX, DI - MOVL $1, CX BYTE $0x5d // popq %rbp JMP _fsm_exec -_find_non_ascii: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - MOVQ DI, CX - CMPQ SI, $32 - JL LBB29_5 - -LBB29_1: - LONG $0x016ffec5 // vmovdqu (%rcx), %ymm0 - LONG $0xc0d7fdc5 // vpmovmskb %ymm0, %eax - TESTL AX, AX - JNE LBB29_2 - ADDQ $32, CX - CMPQ SI, $63 - LEAQ -32(SI), SI - JG LBB29_1 - -LBB29_5: - WORD $0xf8c5; BYTE $0x77 // vzeroupper - CMPQ SI, $16 - JL LBB29_6 - -LBB29_11: - LONG $0x016ffac5 // vmovdqu (%rcx), %xmm0 - LONG $0xc0d7f9c5 // vpmovmskb %xmm0, %eax - TESTW AX, AX - JNE LBB29_12 - ADDQ $16, CX - CMPQ SI, $31 - LEAQ -16(SI), SI - JG LBB29_11 - -LBB29_6: - MOVQ $-1, AX - TESTQ SI, SI - JLE LBB29_14 - INCQ SI - -LBB29_8: - CMPB 0(CX), $0 - JS LBB29_13 - INCQ CX - DECQ SI - CMPQ SI, $1 - JG LBB29_8 - -LBB29_14: - BYTE $0x5d // popq %rbp - RET - -LBB29_13: - SUBQ DI, CX - MOVQ CX, AX - BYTE $0x5d // popq %rbp - RET - -LBB29_2: - WORD $0x9848 // cltq - JMP LBB29_3 - -LBB29_12: - MOVWLZX AX, AX - -LBB29_3: - SUBQ DI, CX - BSFQ AX, AX - ADDQ CX, AX - BYTE $0x5d // popq %rbp - WORD $0xf8c5; BYTE $0x77 // vzeroupper - RET - _print_mantissa: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp WORD $0x5641 // pushq %r14 BYTE $0x53 // pushq %rbx - MOVLQSX DX, R14 + MOVL DX, R14 ADDQ SI, R14 MOVQ DI, AX SHRQ $32, AX - JE LBB30_2 + JE LBB28_2 MOVQ $-6067343680855748867, DX MOVQ DI, AX MULQ DX @@ -8289,7 +7975,7 @@ _print_mantissa: LONG $0x64fa6b41 // imull $100, %r10d, %edi SUBL DI, AX MOVWLZX AX, R11 - LONG $0x203d8d48; WORD $0x0059; BYTE $0x00 // leaq $22816(%rip), %rdi /* _Digits(%rip) */ + LONG $0x6d3d8d48; WORD $0x0059; BYTE $0x00 // leaq $22893(%rip), %rdi /* _Digits(%rip) */ MOVWLZX 0(DI)(R8*2), AX MOVW AX, -2(R14) MOVWLZX 0(DI)(R9*2), AX @@ -8301,13 +7987,13 @@ _print_mantissa: ADDQ $-8, R14 MOVQ DX, DI -LBB30_2: +LBB28_2: CMPL DI, $10000 - JB LBB30_3 + JB LBB28_3 MOVL $3518437209, R8 - LONG $0xd80d8d4c; WORD $0x0058; BYTE $0x00 // leaq $22744(%rip), %r9 /* _Digits(%rip) */ + LONG $0x250d8d4c; WORD $0x0059; BYTE $0x00 // leaq $22821(%rip), %r9 /* _Digits(%rip) */ -LBB30_5: +LBB28_5: MOVL DI, AX IMULQ R8, AX SHRQ $45, AX @@ -8324,11 +8010,11 @@ LBB30_5: ADDQ $-4, R14 CMPL DI, $99999999 MOVL AX, DI - JA LBB30_5 + JA LBB28_5 CMPL AX, $100 - JB LBB30_8 + JB LBB28_8 -LBB30_7: +LBB28_7: MOVWLZX AX, CX SHRL $2, CX LONG $0x147bc969; WORD $0x0000 // imull $5243, %ecx, %ecx @@ -8336,17 +8022,17 @@ LBB30_7: WORD $0xd16b; BYTE $0x64 // imull $100, %ecx, %edx SUBL DX, AX MOVWLZX AX, AX - LONG $0x71158d48; WORD $0x0058; BYTE $0x00 // leaq $22641(%rip), %rdx /* _Digits(%rip) */ + LONG $0xbe158d48; WORD $0x0058; BYTE $0x00 // leaq $22718(%rip), %rdx /* _Digits(%rip) */ MOVWLZX 0(DX)(AX*2), AX MOVW AX, -2(R14) ADDQ $-2, R14 MOVL CX, AX -LBB30_8: +LBB28_8: CMPL AX, $10 - JB LBB30_10 + JB LBB28_10 MOVL AX, AX - LONG $0x540d8d48; WORD $0x0058; BYTE $0x00 // leaq $22612(%rip), %rcx /* _Digits(%rip) */ + LONG $0xa10d8d48; WORD $0x0058; BYTE $0x00 // leaq $22689(%rip), %rcx /* _Digits(%rip) */ MOVWLZX 0(CX)(AX*2), AX MOVW AX, -2(R14) BYTE $0x5b // popq %rbx @@ -8354,13 +8040,13 @@ LBB30_8: BYTE $0x5d // popq %rbp RET -LBB30_3: +LBB28_3: MOVL DI, AX CMPL AX, $100 - JAE LBB30_7 - JMP LBB30_8 + JAE LBB28_7 + JMP LBB28_8 -LBB30_10: +LBB28_10: ADDB $48, AX MOVB AX, 0(SI) BYTE $0x5b // popq %rbx @@ -8371,292 +8057,314 @@ LBB30_10: _left_shift: BYTE $0x55 // pushq %rbp WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + WORD $0x5741 // pushq %r15 WORD $0x5641 // pushq %r14 BYTE $0x53 // pushq %rbx MOVL SI, CX - IMUL3Q $104, CX, DX - LONG $0x78358d48; WORD $0x008b; BYTE $0x00 // leaq $35704(%rip), %rsi /* _LSHIFT_TAB(%rip) */ - MOVL 0(DX)(SI*1), R8 - MOVQ 0(DI), R10 + IMUL3Q $104, CX, R14 + LONG $0xc3158d48; WORD $0x008b; BYTE $0x00 // leaq $35779(%rip), %rdx /* _LSHIFT_TAB(%rip) */ + MOVL 0(R14)(DX*1), R8 + MOVQ 0(DI), R11 MOVLQSX 16(DI), R9 - MOVB 4(DX)(SI*1), AX + MOVL R9, R10 TESTQ R9, R9 - JE LBB31_6 - LEAQ 5(DX)(SI*1), DX - XORL SI, SI + JE LBB29_1 + LEAQ 0(R14)(DX*1), SI + ADDQ $4, SI + XORL BX, BX -LBB31_3: +LBB29_3: + MOVBLZX 0(SI)(BX*1), AX TESTB AX, AX - JE LBB31_8 - CMPB 0(R10)(SI*1), AX - JNE LBB31_5 - MOVBLZX 0(DX)(SI*1), AX - INCQ SI - CMPQ R9, SI - JNE LBB31_3 + JE LBB29_10 + CMPB 0(R11)(BX*1), AX + JNE LBB29_5 + ADDQ $1, BX + CMPQ R9, BX + JNE LBB29_3 + MOVL R9, SI + ADDQ R14, DX + CMPB 4(SI)(DX*1), $0 + JNE LBB29_9 + JMP LBB29_10 -LBB31_6: - TESTB AX, AX - JE LBB31_8 +LBB29_1: + XORL SI, SI + ADDQ R14, DX + CMPB 4(SI)(DX*1), $0 + JE LBB29_10 -LBB31_7: - DECL R8 +LBB29_9: + ADDL $-1, R8 -LBB31_8: - TESTL R9, R9 - JLE LBB31_23 - LEAL 0(R8)(R9*1), AX - MOVLQSX AX, R14 - DECQ R14 +LBB29_10: + TESTL R10, R10 + JLE LBB29_25 + LEAL 0(R8)(R10*1), AX + MOVLQSX AX, R15 + ADDL $-1, R9 + ADDQ $-1, R15 XORL DX, DX - MOVQ $-3689348814741910323, R11 + MOVQ $-3689348814741910323, R14 -LBB31_10: - MOVBQSX -1(R10)(R9*1), SI +LBB29_12: + MOVL R9, AX + MOVBQSX 0(R11)(AX*1), SI ADDQ $-48, SI SHLQ CX, SI ADDQ DX, SI MOVQ SI, AX - MULQ R11 + MULQ R14 SHRQ $3, DX LEAQ 0(DX)(DX*1), AX LEAQ 0(AX)(AX*4), BX MOVQ SI, AX SUBQ BX, AX - CMPQ 8(DI), R14 - JBE LBB31_16 + CMPQ 8(DI), R15 + JBE LBB29_18 ADDB $48, AX - MOVB AX, 0(R10)(R14*1) - JMP LBB31_18 + MOVB AX, 0(R11)(R15*1) + JMP LBB29_20 -LBB31_16: +LBB29_18: TESTQ AX, AX - JE LBB31_18 + JE LBB29_20 MOVL $1, 28(DI) -LBB31_18: - CMPQ R9, $2 - JL LBB31_12 - DECQ R9 - MOVQ 0(DI), R10 - DECQ R14 - JMP LBB31_10 +LBB29_20: + CMPQ R10, $2 + JL LBB29_14 + ADDQ $-1, R10 + MOVQ 0(DI), R11 + ADDL $-1, R9 + ADDQ $-1, R15 + JMP LBB29_12 -LBB31_12: +LBB29_14: CMPQ SI, $10 - JAE LBB31_13 + JAE LBB29_15 -LBB31_23: +LBB29_25: MOVLQSX 16(DI), CX MOVLQSX R8, AX ADDQ CX, AX MOVL AX, 16(DI) MOVQ 8(DI), CX CMPQ CX, AX - JA LBB31_25 + JA LBB29_27 MOVL CX, 16(DI) MOVL CX, AX -LBB31_25: +LBB29_27: ADDL R8, 20(DI) TESTL AX, AX - JLE LBB31_29 + JLE LBB29_31 MOVQ 0(DI), CX - MOVL AX, AX + MOVL AX, DX + ADDQ $1, DX + ADDL $-1, AX -LBB31_27: - CMPB -1(CX)(AX*1), $48 - JNE LBB31_31 - MOVL AX, DX - DECQ AX - DECL DX - MOVL DX, 16(DI) - LEAQ 1(AX), DX +LBB29_29: + MOVL AX, SI + CMPB 0(CX)(SI*1), $48 + JNE LBB29_33 + MOVL AX, 16(DI) + ADDQ $-1, DX + ADDL $-1, AX CMPQ DX, $1 - JG LBB31_27 + JG LBB29_29 + JMP LBB29_32 -LBB31_29: - TESTL AX, AX - JE LBB31_30 +LBB29_31: + JNE LBB29_33 -LBB31_31: +LBB29_32: + MOVL $0, 20(DI) + +LBB29_33: BYTE $0x5b // popq %rbx WORD $0x5e41 // popq %r14 + WORD $0x5f41 // popq %r15 BYTE $0x5d // popq %rbp RET -LBB31_13: - MOVLQSX R14, SI - DECQ SI - JMP LBB31_14 +LBB29_15: + ADDL R8, R9 + MOVLQSX R9, SI + ADDQ $-1, SI + JMP LBB29_16 -LBB31_15: +LBB29_17: ADDB $48, AX MOVQ 0(DI), BX MOVB AX, 0(BX)(SI*1) -LBB31_22: - DECQ SI +LBB29_24: + ADDQ $-1, SI CMPQ CX, $9 - JBE LBB31_23 + JBE LBB29_25 -LBB31_14: +LBB29_16: MOVQ DX, CX MOVQ DX, AX - MULQ R11 + MULQ R14 SHRQ $3, DX LEAQ 0(DX)(DX*1), AX LEAQ 0(AX)(AX*4), BX MOVQ CX, AX SUBQ BX, AX CMPQ 8(DI), SI - JA LBB31_15 + JA LBB29_17 TESTQ AX, AX - JE LBB31_22 + JE LBB29_24 MOVL $1, 28(DI) - JMP LBB31_22 + JMP LBB29_24 -LBB31_30: - MOVL $0, 20(DI) - BYTE $0x5b // popq %rbx - WORD $0x5e41 // popq %r14 - BYTE $0x5d // popq %rbp - RET - -LBB31_5: - JL LBB31_7 - JMP LBB31_8 +LBB29_5: + JL LBB29_9 + JMP LBB29_10 _right_shift: - BYTE $0x55 // pushq %rbp - WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp - MOVL SI, CX - MOVLQSX 16(DI), R9 - XORL SI, SI - XORL AX, AX + BYTE $0x55 // pushq %rbp + WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp + BYTE $0x53 // pushq %rbx + MOVL SI, CX + MOVL 16(DI), R8 + XORL DX, DX + TESTL R8, R8 + MOVL $0, R11 + LONG $0xd84f0f45 // cmovgl %r8d, %r11d + XORL AX, AX -LBB32_1: - CMPQ SI, R9 - JGE LBB32_2 +LBB30_1: + CMPQ R11, DX + JE LBB30_2 LEAQ 0(AX)(AX*4), AX - MOVQ 0(DI), DX - MOVBQSX 0(DX)(SI*1), DX - LEAQ -48(DX)(AX*2), AX - INCQ SI - MOVQ AX, DX - SHRQ CX, DX - TESTQ DX, DX - JE LBB32_1 + MOVQ 0(DI), SI + MOVBQSX 0(SI)(DX*1), SI + LEAQ 0(SI)(AX*2), AX + ADDQ $-48, AX + ADDQ $1, DX + MOVQ AX, SI + SHRQ CX, SI + TESTQ SI, SI + JE LBB30_1 + MOVL DX, R11 -LBB32_6: +LBB30_7: MOVL 20(DI), DX - SUBL SI, DX - INCL DX - MOVQ $-1, R8 - SHLQ CX, R8 + SUBL R11, DX + ADDL $1, DX + MOVQ $-1, R9 + SHLQ CX, R9 MOVL DX, 20(DI) - NOTQ R8 + NOTQ R9 XORL R10, R10 - CMPL SI, R9 - JGE LBB32_9 - MOVLQSX SI, R9 + CMPL R11, R8 + JGE LBB30_10 + MOVLQSX R11, R8 MOVQ 0(DI), SI XORL R10, R10 -LBB32_8: +LBB30_9: MOVQ AX, DX SHRQ CX, DX - ANDQ R8, AX + ANDQ R9, AX ADDB $48, DX MOVB DX, 0(SI)(R10*1) - LEAQ 0(AX)(AX*4), AX MOVQ 0(DI), SI - LEAQ 0(SI)(R9*1), DX - MOVBQSX 0(R10)(DX*1), DX - LEAQ -48(DX)(AX*2), AX - MOVLQSX 16(DI), R11 - LEAQ 1(R9)(R10*1), DX - INCQ R10 - CMPQ DX, R11 - JL LBB32_8 - JMP LBB32_9 + LEAQ 0(SI)(R8*1), DX + MOVBQSX 0(R10)(DX*1), R11 + LEAQ 1(R8)(R10*1), BX + ADDQ $1, R10 + LEAQ 0(AX)(AX*4), AX + LEAQ 0(R11)(AX*2), AX + ADDQ $-48, AX + MOVLQSX 16(DI), DX + CMPQ BX, DX + JL LBB30_9 + JMP LBB30_10 -LBB32_11: +LBB30_12: ADDB $48, SI - MOVQ 0(DI), DX - MOVB SI, 0(DX)(R9*1) - INCL R9 - MOVL R9, R10 + MOVQ 0(DI), BX + MOVB SI, 0(BX)(DX*1) + ADDL $1, DX + MOVL DX, R10 -LBB32_14: +LBB30_15: ADDQ AX, AX LEAQ 0(AX)(AX*4), AX -LBB32_9: +LBB30_10: TESTQ AX, AX - JE LBB32_15 + JE LBB30_16 MOVQ AX, SI SHRQ CX, SI - ANDQ R8, AX - MOVLQSX R10, R9 - CMPQ 8(DI), R9 - JA LBB32_11 + ANDQ R9, AX + MOVLQSX R10, DX + CMPQ 8(DI), DX + JA LBB30_12 TESTQ SI, SI - JE LBB32_14 + JE LBB30_15 MOVL $1, 28(DI) - JMP LBB32_14 + JMP LBB30_15 -LBB32_15: +LBB30_16: MOVL R10, 16(DI) TESTL R10, R10 - JLE LBB32_19 + JLE LBB30_20 MOVQ 0(DI), AX - MOVL R10, R10 + MOVL R10, CX + ADDQ $1, CX + ADDL $-1, R10 -LBB32_17: - CMPB -1(AX)(R10*1), $48 - JNE LBB32_21 - MOVL R10, CX - DECQ R10 - DECL CX - MOVL CX, 16(DI) - LEAQ 1(R10), CX +LBB30_18: + MOVL R10, DX + CMPB 0(AX)(DX*1), $48 + JNE LBB30_22 + MOVL R10, 16(DI) + ADDQ $-1, CX + ADDL $-1, R10 CMPQ CX, $1 - JG LBB32_17 + JG LBB30_18 + JMP LBB30_21 -LBB32_19: - TESTL R10, R10 - JE LBB32_20 +LBB30_2: + TESTQ AX, AX + JE LBB30_23 + MOVQ AX, DX + SHRQ CX, DX + TESTQ DX, DX + JNE LBB30_7 -LBB32_21: +LBB30_4: + ADDQ AX, AX + LEAQ 0(AX)(AX*4), AX + ADDL $1, R11 + MOVQ AX, DX + SHRQ CX, DX + TESTQ DX, DX + JE LBB30_4 + JMP LBB30_7 + +LBB30_20: + JE LBB30_21 + +LBB30_22: + BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB32_2: - TESTQ AX, AX - JE LBB32_22 - MOVQ AX, DX - SHRQ CX, DX - TESTQ DX, DX - JNE LBB32_6 - -LBB32_4: - ADDQ AX, AX - LEAQ 0(AX)(AX*4), AX - INCL SI - MOVQ AX, DX - SHRQ CX, DX - TESTQ DX, DX - JE LBB32_4 - JMP LBB32_6 - -LBB32_20: +LBB30_21: MOVL $0, 20(DI) + BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET -LBB32_22: +LBB30_23: MOVL $0, 16(DI) + BYTE $0x5b // popq %rbx BYTE $0x5d // popq %rbp RET @@ -10068,9 +9776,6 @@ _POW_TAB: _MASK_USE_NUMBER: LONG $0x00000002 // .long 2 -_MASK_ALLOW_CONTROL: - QUAD $0x0000000080000000 // .quad 2147483648 - _DOUBLE_POW5_INV_SPLIT: QUAD $0x0000000000000001 // .quad 1 QUAD $0x2000000000000000 // .quad 2305843009213693952 @@ -12812,73 +12517,43 @@ _LSHIFT_TAB: LONG $0x00000000 // .asciz 4, '\x00\x00\x00\x00' _P10_TAB: - QUAD $0x3ff0000000000000 // .quad 4607182418800017408 - QUAD $0x4024000000000000 // .quad 4621819117588971520 - QUAD $0x4059000000000000 // .quad 4636737291354636288 - QUAD $0x408f400000000000 // .quad 4652007308841189376 - QUAD $0x40c3880000000000 // .quad 4666723172467343360 - QUAD $0x40f86a0000000000 // .quad 4681608360884174848 - QUAD $0x412e848000000000 // .quad 4696837146684686336 - QUAD $0x416312d000000000 // .quad 4711630319722168320 - QUAD $0x4197d78400000000 // .quad 4726483295884279808 - QUAD $0x41cdcd6500000000 // .quad 4741671816366391296 - QUAD $0x4202a05f20000000 // .quad 4756540486875873280 - QUAD $0x42374876e8000000 // .quad 4771362005757984768 - QUAD $0x426d1a94a2000000 // .quad 4786511204640096256 - QUAD $0x42a2309ce5400000 // .quad 4801453603149578240 - QUAD $0x42d6bcc41e900000 // .quad 4816244402031689728 - QUAD $0x430c6bf526340000 // .quad 4831355200913801216 - QUAD $0x4341c37937e08000 // .quad 4846369599423283200 - QUAD $0x4376345785d8a000 // .quad 4861130398305394688 - QUAD $0x43abc16d674ec800 // .quad 4876203697187506176 - QUAD $0x43e158e460913d00 // .quad 4891288408196988160 - QUAD $0x4415af1d78b58c40 // .quad 4906019910204099648 - QUAD $0x444b1ae4d6e2ef50 // .quad 4921056587992461136 - QUAD $0x4480f0cf064dd592 // .quad 4936209963552724370 - -_first: - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf0f0f0f0f0f0f0f0; QUAD $0xf0f0f0f0f0f0f0f0 // .ascii 16, '\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0' - QUAD $0xf1f1f1f1f1f1f1f1; QUAD $0xf1f1f1f1f1f1f1f1 // .ascii 16, '\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1' - QUAD $0xf1f1f1f1f1f1f1f1; QUAD $0xf1f1f1f1f1f1f1f1 // .ascii 16, '\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1' - QUAD $0xf1f1f1f1f1f1f1f1; QUAD $0xf1f1f1f1f1f1f1f1 // .ascii 16, '\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1' - QUAD $0xf1f1f1f1f1f1f1f1; QUAD $0xf1f1f1f1f1f1f1f1 // .ascii 16, '\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1' - QUAD $0x020202020202f1f1; QUAD $0x0202020202020202 // .ascii 16, '\xf1\xf1\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' - QUAD $0x0202020202020202; QUAD $0x0202020202020202 // .ascii 16, '\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' - QUAD $0x0303030303030313; QUAD $0x0303230303030303 // .ascii 16, '\x13\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03#\x03\x03' - QUAD $0xf1f1f14404040434; QUAD $0xf1f1f1f1f1f1f1f1 // .ascii 16, '4\x04\x04\x04D\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1\xf1' - -_ranges: - BYTE $0x80 // .byte 128 - BYTE $0xbf // .byte 191 - BYTE $0xa0 // .byte 160 - BYTE $0xbf // .byte 191 - BYTE $0x80 // .byte 128 - BYTE $0x9f // .byte 159 - BYTE $0x90 // .byte 144 - BYTE $0xbf // .byte 191 - BYTE $0x80 // .byte 128 - BYTE $0x8f // .byte 143 + QUAD $0x3ff0000000000000 // .quad 0x3ff0000000000000 + QUAD $0x4024000000000000 // .quad 0x4024000000000000 + QUAD $0x4059000000000000 // .quad 0x4059000000000000 + QUAD $0x408f400000000000 // .quad 0x408f400000000000 + QUAD $0x40c3880000000000 // .quad 0x40c3880000000000 + QUAD $0x40f86a0000000000 // .quad 0x40f86a0000000000 + QUAD $0x412e848000000000 // .quad 0x412e848000000000 + QUAD $0x416312d000000000 // .quad 0x416312d000000000 + QUAD $0x4197d78400000000 // .quad 0x4197d78400000000 + QUAD $0x41cdcd6500000000 // .quad 0x41cdcd6500000000 + QUAD $0x4202a05f20000000 // .quad 0x4202a05f20000000 + QUAD $0x42374876e8000000 // .quad 0x42374876e8000000 + QUAD $0x426d1a94a2000000 // .quad 0x426d1a94a2000000 + QUAD $0x42a2309ce5400000 // .quad 0x42a2309ce5400000 + QUAD $0x42d6bcc41e900000 // .quad 0x42d6bcc41e900000 + QUAD $0x430c6bf526340000 // .quad 0x430c6bf526340000 + QUAD $0x4341c37937e08000 // .quad 0x4341c37937e08000 + QUAD $0x4376345785d8a000 // .quad 0x4376345785d8a000 + QUAD $0x43abc16d674ec800 // .quad 0x43abc16d674ec800 + QUAD $0x43e158e460913d00 // .quad 0x43e158e460913d00 + QUAD $0x4415af1d78b58c40 // .quad 0x4415af1d78b58c40 + QUAD $0x444b1ae4d6e2ef50 // .quad 0x444b1ae4d6e2ef50 + QUAD $0x4480f0cf064dd592 // .quad 0x4480f0cf064dd592 TEXT ·__f64toa(SB), NOSPLIT | NOFRAME, $0 - 24 NO_LOCAL_POINTERS _entry: MOVQ (TLS), R14 - LEAQ -120(SP), R12 + LEAQ -136(SP), R12 CMPQ R12, 16(R14) JBE _stack_grow _f64toa: MOVQ out+0(FP), DI MOVSD val+8(FP), X0 - CALL ·__native_entry__+903(SB) // _f64toa + CALL ·__native_entry__+814(SB) // _f64toa MOVQ AX, ret+16(FP) RET @@ -12900,7 +12575,7 @@ _html_escape: MOVQ nb+8(FP), SI MOVQ dp+16(FP), DX MOVQ dn+24(FP), CX - CALL ·__native_entry__+10249(SB) // _html_escape + CALL ·__native_entry__+10717(SB) // _html_escape MOVQ AX, ret+32(FP) RET @@ -12920,7 +12595,7 @@ _entry: _i64toa: MOVQ out+0(FP), DI MOVQ val+8(FP), SI - CALL ·__native_entry__+3915(SB) // _i64toa + CALL ·__native_entry__+3449(SB) // _i64toa MOVQ AX, ret+16(FP) RET @@ -12941,7 +12616,7 @@ _lspace: MOVQ sp+0(FP), DI MOVQ nb+8(FP), SI MOVQ off+16(FP), DX - CALL ·__native_entry__+429(SB) // _lspace + CALL ·__native_entry__+379(SB) // _lspace MOVQ AX, ret+24(FP) RET @@ -12974,7 +12649,7 @@ TEXT ·__quote(SB), NOSPLIT | NOFRAME, $0 - 48 _entry: MOVQ (TLS), R14 - LEAQ -56(SP), R12 + LEAQ -72(SP), R12 CMPQ R12, 16(R14) JBE _stack_grow @@ -12984,7 +12659,7 @@ _quote: MOVQ dp+16(FP), DX MOVQ dn+24(FP), CX MOVQ flags+32(FP), R8 - CALL ·__native_entry__+5328(SB) // _quote + CALL ·__native_entry__+4842(SB) // _quote MOVQ AX, ret+40(FP) RET @@ -12992,7 +12667,7 @@ _stack_grow: CALL runtime·morestack_noctxt<>(SB) JMP _entry -TEXT ·__skip_array(SB), NOSPLIT | NOFRAME, $0 - 32 +TEXT ·__skip_array(SB), NOSPLIT | NOFRAME, $0 - 40 NO_LOCAL_POINTERS _entry: @@ -13005,8 +12680,9 @@ _skip_array: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·__native_entry__+21867(SB) // _skip_array - MOVQ AX, ret+24(FP) + MOVQ flags+24(FP), CX + CALL ·__native_entry__+22748(SB) // _skip_array + MOVQ AX, ret+32(FP) RET _stack_grow: @@ -13018,14 +12694,14 @@ TEXT ·__skip_number(SB), NOSPLIT | NOFRAME, $0 - 24 _entry: MOVQ (TLS), R14 - LEAQ -96(SP), R12 + LEAQ -88(SP), R12 CMPQ R12, 16(R14) JBE _stack_grow _skip_number: MOVQ s+0(FP), DI MOVQ p+8(FP), SI - CALL ·__native_entry__+25515(SB) // _skip_number + CALL ·__native_entry__+24641(SB) // _skip_number MOVQ AX, ret+16(FP) RET @@ -13033,7 +12709,7 @@ _stack_grow: CALL runtime·morestack_noctxt<>(SB) JMP _entry -TEXT ·__skip_object(SB), NOSPLIT | NOFRAME, $0 - 32 +TEXT ·__skip_object(SB), NOSPLIT | NOFRAME, $0 - 40 NO_LOCAL_POINTERS _entry: @@ -13046,15 +12722,16 @@ _skip_object: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·__native_entry__+21904(SB) // _skip_object - MOVQ AX, ret+24(FP) + MOVQ flags+24(FP), CX + CALL ·__native_entry__+22783(SB) // _skip_object + MOVQ AX, ret+32(FP) RET _stack_grow: CALL runtime·morestack_noctxt<>(SB) JMP _entry -TEXT ·__skip_one(SB), NOSPLIT | NOFRAME, $0 - 32 +TEXT ·__skip_one(SB), NOSPLIT | NOFRAME, $0 - 40 NO_LOCAL_POINTERS _entry: @@ -13067,8 +12744,9 @@ _skip_one: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·__native_entry__+19172(SB) // _skip_one - MOVQ AX, ret+24(FP) + MOVQ flags+24(FP), CX + CALL ·__native_entry__+20939(SB) // _skip_one + MOVQ AX, ret+32(FP) RET _stack_grow: @@ -13087,7 +12765,7 @@ _entry: _u64toa: MOVQ out+0(FP), DI MOVQ val+8(FP), SI - CALL ·__native_entry__+4008(SB) // _u64toa + CALL ·__native_entry__+3544(SB) // _u64toa MOVQ AX, ret+16(FP) RET @@ -13110,7 +12788,7 @@ _unquote: MOVQ dp+16(FP), DX MOVQ ep+24(FP), CX MOVQ flags+32(FP), R8 - CALL ·__native_entry__+7794(SB) // _unquote + CALL ·__native_entry__+7467(SB) // _unquote MOVQ AX, ret+40(FP) RET @@ -13131,7 +12809,7 @@ _validate_one: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ m+16(FP), DX - CALL ·__native_entry__+25632(SB) // _validate_one + CALL ·__native_entry__+24758(SB) // _validate_one MOVQ AX, ret+24(FP) RET @@ -13144,7 +12822,7 @@ TEXT ·__value(SB), NOSPLIT | NOFRAME, $0 - 48 _entry: MOVQ (TLS), R14 - LEAQ -408(SP), R12 + LEAQ -416(SP), R12 CMPQ R12, 16(R14) JBE _stack_grow @@ -13153,8 +12831,8 @@ _value: MOVQ n+8(FP), SI MOVQ p+16(FP), DX MOVQ v+24(FP), CX - MOVQ allow_control+32(FP), R8 - CALL ·__native_entry__+14495(SB) // _value + MOVQ flags+32(FP), R8 + CALL ·__native_entry__+14548(SB) // _value MOVQ AX, ret+40(FP) RET @@ -13175,7 +12853,7 @@ _vnumber: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·__native_entry__+17330(SB), AX // _vnumber + LEAQ ·__native_entry__+19052(SB), AX // _vnumber JMP AX _stack_grow: @@ -13195,19 +12873,19 @@ _vsigned: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·__native_entry__+18644(SB), AX // _vsigned + LEAQ ·__native_entry__+20357(SB), AX // _vsigned JMP AX _stack_grow: CALL runtime·morestack_noctxt<>(SB) JMP _entry -TEXT ·__vstring(SB), NOSPLIT | NOFRAME, $0 - 24 +TEXT ·__vstring(SB), NOSPLIT | NOFRAME, $0 - 32 NO_LOCAL_POINTERS _entry: MOVQ (TLS), R14 - LEAQ -112(SP), R12 + LEAQ -136(SP), R12 CMPQ R12, 16(R14) JBE _stack_grow @@ -13215,7 +12893,8 @@ _vstring: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·__native_entry__+16453(SB), AX // _vstring + MOVQ flags+24(FP), CX + LEAQ ·__native_entry__+16711(SB), AX // _vstring JMP AX _stack_grow: @@ -13227,7 +12906,7 @@ TEXT ·__vunsigned(SB), NOSPLIT | NOFRAME, $0 - 24 _entry: MOVQ (TLS), R14 - LEAQ -8(SP), R12 + LEAQ -24(SP), R12 CMPQ R12, 16(R14) JBE _stack_grow @@ -13235,7 +12914,7 @@ _vunsigned: MOVQ s+0(FP), DI MOVQ p+8(FP), SI MOVQ v+16(FP), DX - LEAQ ·__native_entry__+18903(SB), AX // _vunsigned + LEAQ ·__native_entry__+20637(SB), AX // _vunsigned JMP AX _stack_grow: diff --git a/internal/native/avx2/native_amd64_test.go b/internal/native/avx2/native_amd64_test.go index 86ff5b1..f7ed7b9 100644 --- a/internal/native/avx2/native_amd64_test.go +++ b/internal/native/avx2/native_amd64_test.go @@ -237,21 +237,39 @@ func TestNative_Vstring(t *testing.T) { var v types.JsonState i := 0 s := `test"test\n2"` - __vstring(&s, &i, &v) + __vstring(&s, &i, &v, 0) assert.Equal(t, 5, i) assert.Equal(t, -1, v.Ep) assert.Equal(t, int64(0), v.Iv) - __vstring(&s, &i, &v) + __vstring(&s, &i, &v, 0) assert.Equal(t, 13, i) assert.Equal(t, 9, v.Ep) assert.Equal(t, int64(5), v.Iv) } +func TestNative_Vstring_ValidUnescapedChars(t *testing.T) { + var v types.JsonState + valid := uint64(types.F_VALIDATE_STRING) + i := 0 + s := "test\x1f\"" + __vstring(&s, &i, &v, valid) + assert.Equal(t, -int(types.ERR_INVALID_CHAR), int(v.Vt)) +} + +func TestNative_Vstring_ValidUtf8(t *testing.T) { + var v types.JsonState + valid := uint64(types.F_VALIDATE_STRING) + i := 0 + s := "test\xff\"" + __vstring(&s, &i, &v, valid) + assert.Equal(t, -int(types.ERR_INVALID_CHAR), int(v.Vt)) +} + func TestNative_VstringEscapeEOF(t *testing.T) { var v types.JsonState i := 0 s := `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"x` - __vstring(&s, &i, &v) + __vstring(&s, &i, &v, 0) assert.Equal(t, 95, i) assert.Equal(t, 63, v.Ep) assert.Equal(t, int64(0), v.Iv) @@ -312,7 +330,7 @@ func TestNative_VstringHangUpOnRandomData(t *testing.T) { p := 1 s := rt.Mem2Str(v) var js types.JsonState - __vstring(&s, &p, &js) + __vstring(&s, &p, &js, 0) fmt.Printf("js: %s\n", spew.Sdump(js)) } @@ -506,36 +524,36 @@ func TestNative_Vunsigned(t *testing.T) { func TestNative_SkipOne(t *testing.T) { p := 0 s := ` {"asdf": [null, true, false, 1, 2.0, -3]}, 1234.5` - q := __skip_one(&s, &p, &types.StateMachine{}) + q := __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 42, p) assert.Equal(t, 1, q) p = 0 s = `1 2.5 -3 "asdf\nqwer" true false null {} []` - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 1, p) assert.Equal(t, 0, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 5, p) assert.Equal(t, 2, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 8, p) assert.Equal(t, 6, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 21, p) assert.Equal(t, 9, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 26, p) assert.Equal(t, 22, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 32, p) assert.Equal(t, 27, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 37, p) assert.Equal(t, 33, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 40, p) assert.Equal(t, 38, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 43, p) assert.Equal(t, 41, q) } @@ -547,7 +565,7 @@ func TestNative_SkipOne_Error(t *testing.T) { `"asdf`, `"\\\"`, }) { p := 0 - q := __skip_one(&s, &p, &types.StateMachine{}) + q := __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.True(t, q < 0) } } @@ -555,14 +573,14 @@ func TestNative_SkipOne_Error(t *testing.T) { func TestNative_SkipArray(t *testing.T) { p := 0 s := `null, true, false, 1, 2.0, -3, {"asdf": "wqer"}],` - __skip_array(&s, &p, &types.StateMachine{}) + __skip_array(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, p, 48) } func TestNative_SkipObject(t *testing.T) { p := 0 s := `"asdf": "wqer"},` - __skip_object(&s, &p, &types.StateMachine{}) + __skip_object(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, p, 15) } diff --git a/internal/native/avx2/native_subr_amd64.go b/internal/native/avx2/native_subr_amd64.go index 6e3d813..709bd61 100644 --- a/internal/native/avx2/native_subr_amd64.go +++ b/internal/native/avx2/native_subr_amd64.go @@ -9,45 +9,45 @@ package avx2 func __native_entry__() uintptr var ( - _subr__f64toa = __native_entry__() + 903 - _subr__html_escape = __native_entry__() + 10249 - _subr__i64toa = __native_entry__() + 3915 - _subr__lspace = __native_entry__() + 429 + _subr__f64toa = __native_entry__() + 814 + _subr__html_escape = __native_entry__() + 10717 + _subr__i64toa = __native_entry__() + 3449 + _subr__lspace = __native_entry__() + 379 _subr__lzero = __native_entry__() + 13 - _subr__quote = __native_entry__() + 5328 - _subr__skip_array = __native_entry__() + 21867 - _subr__skip_number = __native_entry__() + 25515 - _subr__skip_object = __native_entry__() + 21904 - _subr__skip_one = __native_entry__() + 19172 - _subr__u64toa = __native_entry__() + 4008 - _subr__unquote = __native_entry__() + 7794 - _subr__validate_one = __native_entry__() + 25632 - _subr__value = __native_entry__() + 14495 - _subr__vnumber = __native_entry__() + 17330 - _subr__vsigned = __native_entry__() + 18644 - _subr__vstring = __native_entry__() + 16453 - _subr__vunsigned = __native_entry__() + 18903 + _subr__quote = __native_entry__() + 4842 + _subr__skip_array = __native_entry__() + 22748 + _subr__skip_number = __native_entry__() + 24641 + _subr__skip_object = __native_entry__() + 22783 + _subr__skip_one = __native_entry__() + 20939 + _subr__u64toa = __native_entry__() + 3544 + _subr__unquote = __native_entry__() + 7467 + _subr__validate_one = __native_entry__() + 24758 + _subr__value = __native_entry__() + 14548 + _subr__vnumber = __native_entry__() + 19052 + _subr__vsigned = __native_entry__() + 20357 + _subr__vstring = __native_entry__() + 16711 + _subr__vunsigned = __native_entry__() + 20637 ) const ( - _stack__f64toa = 120 + _stack__f64toa = 136 _stack__html_escape = 72 _stack__i64toa = 24 _stack__lspace = 8 _stack__lzero = 8 - _stack__quote = 56 + _stack__quote = 72 _stack__skip_array = 152 - _stack__skip_number = 96 + _stack__skip_number = 88 _stack__skip_object = 152 _stack__skip_one = 152 _stack__u64toa = 8 _stack__unquote = 72 _stack__validate_one = 152 - _stack__value = 408 + _stack__value = 416 _stack__vnumber = 312 _stack__vsigned = 16 - _stack__vstring = 112 - _stack__vunsigned = 8 + _stack__vstring = 136 + _stack__vunsigned = 24 ) var ( diff --git a/internal/native/dispatch_amd64.go b/internal/native/dispatch_amd64.go index eceac4d..3d781bf 100644 --- a/internal/native/dispatch_amd64.go +++ b/internal/native/dispatch_amd64.go @@ -77,12 +77,12 @@ func HTMLEscape(s unsafe.Pointer, nb int, dp unsafe.Pointer, dn *int) int //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func Value(s unsafe.Pointer, n int, p int, v *types.JsonState, allow_control int) int +func Value(s unsafe.Pointer, n int, p int, v *types.JsonState, flags uint64) int //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func SkipOne(s *string, p *int, m *types.StateMachine) int +func SkipOne(s *string, p *int, m *types.StateMachine, flags uint64) int //go:nosplit //go:noescape diff --git a/internal/native/dispatch_amd64.s b/internal/native/dispatch_amd64.s index c60258a..3db718d 100644 --- a/internal/native/dispatch_amd64.s +++ b/internal/native/dispatch_amd64.s @@ -48,7 +48,7 @@ TEXT ·Value(SB), NOSPLIT, $0 - 48 JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__value(SB) JMP github·com∕bytedance∕sonic∕internal∕native∕avx·__value(SB) -TEXT ·SkipOne(SB), NOSPLIT, $0 - 32 +TEXT ·SkipOne(SB), NOSPLIT, $0 - 40 CMPB github·com∕bytedance∕sonic∕internal∕cpu·HasAVX2(SB), $0 JE 2(PC) JMP github·com∕bytedance∕sonic∕internal∕native∕avx2·__skip_one(SB) diff --git a/internal/native/native_amd64.tmpl b/internal/native/native_amd64.tmpl index 0a27267..de94e4b 100644 --- a/internal/native/native_amd64.tmpl +++ b/internal/native/native_amd64.tmpl @@ -65,12 +65,12 @@ func __unquote(sp unsafe.Pointer, nb int, dp unsafe.Pointer, ep *int, flags uint //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __value(s unsafe.Pointer, n int, p int, v *types.JsonState, allow_control int) (ret int) +func __value(s unsafe.Pointer, n int, p int, v *types.JsonState, flags uint64) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __vstring(s *string, p *int, v *types.JsonState) +func __vstring(s *string, p *int, v *types.JsonState, flags uint64) //go:nosplit //go:noescape @@ -90,17 +90,17 @@ func __vunsigned(s *string, p *int, v *types.JsonState) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __skip_one(s *string, p *int, m *types.StateMachine) (ret int) +func __skip_one(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __skip_array(s *string, p *int, m *types.StateMachine) (ret int) +func __skip_array(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) //go:nosplit //go:noescape //goland:noinspection GoUnusedParameter -func __skip_object(s *string, p *int, m *types.StateMachine) (ret int) +func __skip_object(s *string, p *int, m *types.StateMachine, flags uint64) (ret int) //go:nosplit //go:noescape diff --git a/internal/native/native_amd64_test.tmpl b/internal/native/native_amd64_test.tmpl index 37952a1..8038a28 100644 --- a/internal/native/native_amd64_test.tmpl +++ b/internal/native/native_amd64_test.tmpl @@ -235,21 +235,39 @@ func TestNative_Vstring(t *testing.T) { var v types.JsonState i := 0 s := `test"test\n2"` - __vstring(&s, &i, &v) + __vstring(&s, &i, &v, 0) assert.Equal(t, 5, i) assert.Equal(t, -1, v.Ep) assert.Equal(t, int64(0), v.Iv) - __vstring(&s, &i, &v) + __vstring(&s, &i, &v, 0) assert.Equal(t, 13, i) assert.Equal(t, 9, v.Ep) assert.Equal(t, int64(5), v.Iv) } +func TestNative_Vstring_ValidUnescapedChars(t *testing.T) { + var v types.JsonState + valid := uint64(types.F_VALIDATE_STRING) + i := 0 + s := "test\x1f\"" + __vstring(&s, &i, &v, valid) + assert.Equal(t, -int(types.ERR_INVALID_CHAR), int(v.Vt)) +} + +func TestNative_Vstring_ValidUtf8(t *testing.T) { + var v types.JsonState + valid := uint64(types.F_VALIDATE_STRING) + i := 0 + s := "test\xff\"" + __vstring(&s, &i, &v, valid) + assert.Equal(t, -int(types.ERR_INVALID_CHAR), int(v.Vt)) +} + func TestNative_VstringEscapeEOF(t *testing.T) { var v types.JsonState i := 0 s := `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"x` - __vstring(&s, &i, &v) + __vstring(&s, &i, &v, 0) assert.Equal(t, 95, i) assert.Equal(t, 63, v.Ep) assert.Equal(t, int64(0), v.Iv) @@ -310,7 +328,7 @@ func TestNative_VstringHangUpOnRandomData(t *testing.T) { p := 1 s := rt.Mem2Str(v) var js types.JsonState - __vstring(&s, &p, &js) + __vstring(&s, &p, &js, 0) fmt.Printf("js: %s\n", spew.Sdump(js)) } @@ -504,36 +522,36 @@ func TestNative_Vunsigned(t *testing.T) { func TestNative_SkipOne(t *testing.T) { p := 0 s := ` {"asdf": [null, true, false, 1, 2.0, -3]}, 1234.5` - q := __skip_one(&s, &p, &types.StateMachine{}) + q := __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 42, p) assert.Equal(t, 1, q) p = 0 s = `1 2.5 -3 "asdf\nqwer" true false null {} []` - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 1, p) assert.Equal(t, 0, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 5, p) assert.Equal(t, 2, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 8, p) assert.Equal(t, 6, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 21, p) assert.Equal(t, 9, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 26, p) assert.Equal(t, 22, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 32, p) assert.Equal(t, 27, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 37, p) assert.Equal(t, 33, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 40, p) assert.Equal(t, 38, q) - q = __skip_one(&s, &p, &types.StateMachine{}) + q = __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, 43, p) assert.Equal(t, 41, q) } @@ -545,7 +563,7 @@ func TestNative_SkipOne_Error(t *testing.T) { `"asdf`, `"\\\"`, }) { p := 0 - q := __skip_one(&s, &p, &types.StateMachine{}) + q := __skip_one(&s, &p, &types.StateMachine{}, uint64(0)) assert.True(t, q < 0) } } @@ -553,14 +571,14 @@ func TestNative_SkipOne_Error(t *testing.T) { func TestNative_SkipArray(t *testing.T) { p := 0 s := `null, true, false, 1, 2.0, -3, {"asdf": "wqer"}],` - __skip_array(&s, &p, &types.StateMachine{}) + __skip_array(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, p, 48) } func TestNative_SkipObject(t *testing.T) { p := 0 s := `"asdf": "wqer"},` - __skip_object(&s, &p, &types.StateMachine{}) + __skip_object(&s, &p, &types.StateMachine{}, uint64(0)) assert.Equal(t, p, 15) } diff --git a/internal/native/types/types.go b/internal/native/types/types.go index eb9c9b6..e19f8a9 100644 --- a/internal/native/types/types.go +++ b/internal/native/types/types.go @@ -45,11 +45,13 @@ const ( const ( B_DOUBLE_UNQUOTE = 0 B_UNICODE_REPLACE = 1 + B_VALIDATE_STRING = 5 ) const ( F_DOUBLE_UNQUOTE = 1 << B_DOUBLE_UNQUOTE F_UNICODE_REPLACE = 1 << B_UNICODE_REPLACE + F_VALIDATE_STRING = 1 << B_VALIDATE_STRING ) const ( diff --git a/licenses/LICENSE-yyjson b/licenses/LICENSE-yyjson new file mode 100644 index 0000000..a09bff3 --- /dev/null +++ b/licenses/LICENSE-yyjson @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 YaoYuan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/native/native.c b/native/native.c index 8037497..a09505e 100644 --- a/native/native.c +++ b/native/native.c @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - #include "native.h" #include "fastbytes.c" #include "fastfloat.c" @@ -21,5 +20,4 @@ #include "parsing.c" #include "atof_eisel_lemire.c" #include "atof_native.c" -#include "scanning.c" -#include "utf8.c" +#include "scanning.c" \ No newline at end of file diff --git a/native/native.h b/native/native.h index fda9664..c89b8e0 100644 --- a/native/native.h +++ b/native/native.h @@ -109,22 +109,22 @@ ssize_t unquote(const char *sp, ssize_t nb, char *dp, ssize_t *ep, uint64_t flag ssize_t html_escape(const char *sp, ssize_t nb, char *dp, ssize_t *dn); long value(const char *s, size_t n, long p, JsonState *ret, uint64_t flags); -void vstring(const GoString *src, long *p, JsonState *ret); +void vstring(const GoString *src, long *p, JsonState *ret, uint64_t flags); void vnumber(const GoString *src, long *p, JsonState *ret); void vsigned(const GoString *src, long *p, JsonState *ret); void vunsigned(const GoString *src, long *p, JsonState *ret); -long skip_one(const GoString *src, long *p, StateMachine *m); -long skip_array(const GoString *src, long *p, StateMachine *m); -long skip_object(const GoString *src, long *p, StateMachine *m); +long skip_one(const GoString *src, long *p, StateMachine *m, uint64_t flags); +long skip_array(const GoString *src, long *p, StateMachine *m, uint64_t flags); +long skip_object(const GoString *src, long *p, StateMachine *m, uint64_t flags); -long skip_string(const GoString *src, long *p); +long skip_string(const GoString *src, long *p, uint64_t flags); long skip_negative(const GoString *src, long *p); long skip_positive(const GoString *src, long *p); long skip_number(const GoString *src, long *p); bool atof_eisel_lemire64(uint64_t mant, int exp10, int sgn, double *val); -double atof_native(const char *sp, ssize_t nb, char* dbuf, ssize_t cap); +double atof_native(const char *sp, ssize_t nb, char *dbuf, ssize_t cap); ssize_t utf8_validate(const char *sp, ssize_t nb); long validate_string(const GoString *src, long *p); diff --git a/native/scanning.c b/native/scanning.c index 919b6bf..9bbe30d 100644 --- a/native/scanning.c +++ b/native/scanning.c @@ -15,13 +15,16 @@ */ #include "native.h" - -static const char *CS_ARRAY = "[]{},\"[]{},\"[]{}"; -static const char *CS_OBJECT = "[]{},:\"[]{}:,\"[]"; +#include "utf8.h" +#include "test/xprintf.h" static const uint64_t ODD_MASK = 0xaaaaaaaaaaaaaaaa; static const uint64_t EVEN_MASK = 0x5555555555555555; +// NOTE: mask referenced from decoder/decoder.go +static const uint64_t MASK_VALIDATE_STRING = 1ull << 5; +static const uint64_t MASK_ALLOW_CONTROL = 1ull << 31; + static const double P10_TAB[23] = { /* <= the connvertion to double is not exact when less than 1 => */ 1e-000, 1e+001, 1e+002, 1e+003, 1e+004, 1e+005, 1e+006, 1e+007, 1e+008, 1e+009, 1e+010, @@ -110,7 +113,7 @@ 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) { +static inline ssize_t advance_string_default(const GoString *src, long p, int64_t *ep) { char ch; uint64_t es; uint64_t fe; @@ -228,7 +231,6 @@ static inline ssize_t advance_string(const GoString *src, long p, int64_t *ep) { 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)) @@ -238,7 +240,7 @@ static inline ssize_t advance_string(const GoString *src, long p, int64_t *ep) { if (unlikely(m1 != 0 || cr != 0)) { m0_mask(add64) } - + /* check for end quote */ if (m0 != 0) { return sp - ss + __builtin_ctzll(m0) + 1; @@ -273,7 +275,7 @@ static inline ssize_t advance_string(const GoString *src, long p, int64_t *ep) { 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)) @@ -283,7 +285,7 @@ static inline ssize_t advance_string(const GoString *src, long p, int64_t *ep) { if (unlikely(m1 != 0 || cr != 0)) { m0_mask(add32) } - + /* check for end quote */ if (m0 != 0) { return sp - ss + __builtin_ctzll(m0) + 1; @@ -329,17 +331,6 @@ static inline ssize_t advance_string(const GoString *src, long p, int64_t *ep) { } } -static inline int _mm_get_mask(__m128i v, __m128i t) { - return _mm_movemask_epi8(_mm_cmpeq_epi8(v, t)); -} - -// contrl char: 0x00 ~ 0x1F -static inline int _mm_cchars_mask(__m128i v) { - __m128i e1 = _mm_cmpgt_epi8 (v, _mm_set1_epi8(-1)); - __m128i e2 = _mm_cmpgt_epi8 (v, _mm_set1_epi8(31)); - return _mm_movemask_epi8 (_mm_andnot_si128 (e2, e1)); -} - #if USE_AVX2 static inline int _mm256_get_mask(__m256i v, __m256i t) { @@ -353,33 +344,52 @@ static inline int _mm256_cchars_mask(__m256i v) { return _mm256_movemask_epi8 (_mm256_andnot_si256 (e2, e1)); } +// ascii: 0x00 ~ 0x7F +static inline int _mm256_nonascii_mask(__m256i v) { + return _mm256_movemask_epi8(v); +} + #endif -static inline ssize_t advance_validate_string(const GoString *src, long p, int64_t *ep) { +static inline int _mm_get_mask(__m128i v, __m128i t) { + return _mm_movemask_epi8(_mm_cmpeq_epi8(v, t)); +} + +// contrl char: 0x00 ~ 0x1F +static inline int _mm_cchars_mask(__m128i v) { + __m128i e1 = _mm_cmpgt_epi8 (v, _mm_set1_epi8(-1)); + __m128i e2 = _mm_cmpgt_epi8 (v, _mm_set1_epi8(31)); + return _mm_movemask_epi8 (_mm_andnot_si128 (e2, e1)); +} + +// ascii: 0x00 ~ 0x7F +static inline int _mm_nonascii_mask(__m128i v) { + return _mm_movemask_epi8(v); +} + +static inline ssize_t advance_string_validate(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 m2; + uint64_t m0, m1, m2, m3; + uint64_t es, fe, os; uint64_t cr = 0; long qp = 0; long np = 0; - - /* prevent out-of-bounds accessing */ - if (unlikely(src->len == p)) { - return -ERR_EOF; - } + long up = 0; /* buffer pointers */ size_t nb = src->len; const char * sp = src->buf; const char * ss = src->buf; -#define ep_init() *ep = -1; -#define ep_setc() ep_setx(sp - ss - 1) -#define ep_setx(x) if (*ep == -1) { *ep = (x); } + /* prevent out-of-bounds accessing */ + if (unlikely(nb == p)) { + return -ERR_EOF; + } + +#define ep_init() *ep = -1; +#define ep_setc() ep_setx(sp - ss - 1) +#define ep_setx(x) if (*ep == -1) { *ep = (x); } +#define ep_seterr(x) *ep = (x); /* seek to `p` */ nb -= p; @@ -397,6 +407,7 @@ static inline ssize_t advance_validate_string(const GoString *src, long p, int64 uint32_t s0, s1; uint32_t t0, t1; uint32_t c0, c1; + uint32_t u0, u1; #else /* initialize vectors */ __m128i v0; @@ -410,6 +421,7 @@ static inline ssize_t advance_validate_string(const GoString *src, long p, int64 uint32_t s0, s1, s2, s3; uint32_t t0, t1, t2, t3; uint32_t c0, c1, c2, c3; + uint32_t u0, u1, u2, u3; #endif #define m0_mask(add) \ @@ -419,6 +431,7 @@ static inline ssize_t advance_validate_string(const GoString *src, long p, int64 es = add(os, m1, &cr) << 1; \ m0 &= ~(fe & (es ^ EVEN_MASK)); +simd_advance: /* 64-byte SIMD loop */ while (likely(nb >= 64)) { #if USE_AVX2 @@ -430,9 +443,12 @@ static inline ssize_t advance_validate_string(const GoString *src, long p, int64 t1 = _mm256_get_mask(v1, cx); c0 = _mm256_cchars_mask(v0); c1 = _mm256_cchars_mask(v1); + u0 = _mm256_nonascii_mask(v0); + u1 = _mm256_nonascii_mask(v1); m0 = ((uint64_t)s1 << 32) | (uint64_t)s0; m1 = ((uint64_t)t1 << 32) | (uint64_t)t0; m2 = ((uint64_t)c1 << 32) | (uint64_t)c0; + m3 = ((uint64_t)u1 << 32) | (uint64_t)u0; #else v0 = _mm_loadu_si128 ((const void *)(sp + 0)); v1 = _mm_loadu_si128 ((const void *)(sp + 16)); @@ -450,12 +466,17 @@ static inline ssize_t advance_validate_string(const GoString *src, long p, int64 c1 = _mm_cchars_mask(v1); c2 = _mm_cchars_mask(v2); c3 = _mm_cchars_mask(v3); + u0 = _mm_nonascii_mask(v0); + u1 = _mm_nonascii_mask(v1); + u2 = _mm_nonascii_mask(v2); + u3 = _mm_nonascii_mask(v3); 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; m2 = ((uint64_t)c3 << 48) | ((uint64_t)c2 << 32) | ((uint64_t)c1 << 16) | (uint64_t)c0; + m3 = ((uint64_t)u3 << 48) | ((uint64_t)u2 << 32) | ((uint64_t)u1 << 16) | (uint64_t)u0; #endif - + /** update first quote position */ if (unlikely(m1 != 0)) { ep_setx(sp - ss + __builtin_ctzll(m1)) @@ -466,23 +487,35 @@ static inline ssize_t advance_validate_string(const GoString *src, long p, int64 m0_mask(add64) } + qp = m0 ? __builtin_ctzll(m0) : 64; + np = m2 ? __builtin_ctzll(m2) : 64; + up = m3 ? __builtin_ctzll(m3) : 64; + /* get the position of end quote */ if (m0 != 0) { - qp = sp - ss + __builtin_ctzll(m0) + 1; /* check control chars in JSON string */ - if (unlikely(m2 !=0 && (np = sp - ss + __builtin_ctzll(m2)) < qp)) { - ep_setx(np) // set error position + if (unlikely(np < qp)) { + ep_seterr(sp - ss + np) + return -ERR_INVAL; } - return qp; + if (up < qp) { + goto valid_utf8; + } + return sp - ss + qp + 1; } /* check control chars in JSON string */ if (unlikely(m2 != 0)) { - ep_setx(sp - ss + __builtin_ctzll(m2)) + ep_setx(sp - ss + np) + return -ERR_INVAL; } + if (unlikely(m3 != 0)) { + goto valid_utf8; + } + /* move to the next block */ sp += 64; nb -= 64; @@ -495,9 +528,11 @@ static inline ssize_t advance_validate_string(const GoString *src, long p, int64 s0 = _mm256_get_mask (v0, cq); t0 = _mm256_get_mask (v0, cx); c0 = _mm256_cchars_mask(v0); + u0 = _mm256_nonascii_mask(v0); m0 = (uint64_t)s0; m1 = (uint64_t)t0; m2 = (uint64_t)c0; + m3 = (uint64_t)u0; #else v0 = _mm_loadu_si128 ((const void *)(sp + 0)); v1 = _mm_loadu_si128 ((const void *)(sp + 16)); @@ -507,11 +542,14 @@ static inline ssize_t advance_validate_string(const GoString *src, long p, int64 t1 = _mm_get_mask(v1, cx); c0 = _mm_cchars_mask(v0); c1 = _mm_cchars_mask(v1); + u0 = _mm_nonascii_mask(v0); + u1 = _mm_nonascii_mask(v1); m0 = ((uint64_t)s1 << 16) | (uint64_t)s0; m1 = ((uint64_t)t1 << 16) | (uint64_t)t0; m2 = ((uint64_t)c1 << 16) | (uint64_t)c0; + m3 = ((uint64_t)u1 << 16) | (uint64_t)u0; #endif - + /** update first quote position */ if (unlikely(m1 != 0)) { ep_setx(sp - ss + __builtin_ctzll(m1)) @@ -521,24 +559,34 @@ static inline ssize_t advance_validate_string(const GoString *src, long p, int64 if (unlikely(m1 != 0 || cr != 0)) { m0_mask(add32) } - + + qp = m0 ? __builtin_ctzll(m0) : 64; + up = m3 ? __builtin_ctzll(m3) : 64; + np = m2 ? __builtin_ctzll(m2) : 64; + + /* get the position of end quote */ if (m0 != 0) { - qp = sp - ss + __builtin_ctzll(m0) + 1; - /* check control chars in JSON string */ - if (unlikely(m2 !=0 && (np = sp - ss + __builtin_ctzll(m2)) < qp)) { - ep_setx(np) // set error position + if (unlikely(np < qp)) { + ep_seterr(sp - ss + np) return -ERR_INVAL; } - return qp; + if (up < qp) { + goto valid_utf8; + } + return sp - ss + qp + 1; } /* check control chars in JSON string */ if (unlikely(m2 != 0)) { - ep_setx(sp - ss + __builtin_ctzll(m2)) + ep_seterr(sp - ss + __builtin_ctzll(m2)) return -ERR_INVAL; } + if (m3 != 0) { + goto valid_utf8; + } + /* move to the next block */ sp += 32; nb -= 32; @@ -554,43 +602,89 @@ static inline ssize_t advance_validate_string(const GoString *src, long p, int64 } } +remain: /* handle the remaining bytes with scalar code */ - while (nb-- > 0 && (ch = *sp++) != '"') { + while (nb > 0) { + ch = *sp; + if (ch == '"') { + + return sp - ss + 1; + } + + /* valid the escaped chars */ if (unlikely(ch == '\\')) { - if (nb == 0) { + if (nb == 1) { return -ERR_EOF; - } else { - ep_setc() - sp++, nb--; } - } else if (unlikely( ch >= 0 && ch <= 0x1f)) { // control chars - ep_setc() + ep_setx(sp - ss) + sp += 2, nb -= 2; + continue; + } + + /* valid unescaped chars */ + if (unlikely( ch >= 0 && ch <= 0x1f)) { // control chars + ep_seterr(sp - ss) return -ERR_INVAL; } + + /* valid utf8 chars */ + if (ch & 0x80) { + uint32_t ubin = nb >= 4 ? *(uint32_t*)sp : less4byte_to_uint32(sp, nb); + if ((up = valid_utf8_4byte(ubin))) { + sp += up, nb -= up; + continue; + } + ep_seterr(sp - ss) + return -ERR_INVAL; + } + + sp++, nb--; } + return -ERR_EOF; + +valid_utf8: + sp += up, nb -= up; + while (likely(nb >= 4)) { + up = valid_utf8_4byte(*(uint32_t*)sp); + if (unlikely(up == 0)) { + ep_seterr(sp - ss) + return -ERR_INVAL; + } + + /* check continous utf-8 */ + sp += up, nb -= up; + if (nb > 0 && (*(uint8_t*)sp & 0x80)) { + + continue; + } + + /* clear the last carried bit */ + cr = 0; + goto simd_advance; + } + goto remain; #undef ep_init #undef ep_setc #undef ep_setx +#undef ep_seterr #undef m0_mask +} - /* check for quotes */ - if (ch == '"') { - return sp - ss; +static inline ssize_t advance_string(const GoString *src, long p, int64_t *ep, uint64_t flags) { + if ((flags & MASK_VALIDATE_STRING) != 0) { + return advance_string_validate(src, p, ep); } else { - return -ERR_EOF; + return advance_string_default(src, p, ep); } } /** Value Scanning Routines **/ -const uint64_t MASK_ALLOW_CONTROL = 1ul<<31; - long value(const char *s, size_t n, long p, JsonState *ret, uint64_t flags) { long q = p; GoString m = {.buf = s, .len = n}; - bool allow_control = (flags&MASK_ALLOW_CONTROL) != 0; - + bool allow_control = (flags & MASK_ALLOW_CONTROL) != 0; /* parse the next identifier, q is UNSAFE, may cause out-of-bounds accessing */ switch (advance_ns(&m, &q)) { case '-' : /* fallthrough */ @@ -604,7 +698,7 @@ long value(const char *s, size_t n, long p, JsonState *ret, uint64_t flags) { case '7' : /* fallthrough */ case '8' : /* fallthrough */ case '9' : vdigits(&m, &q, ret, flags) ; return q; - case '"' : vstring(&m, &q, ret) ; return q; + case '"' : vstring(&m, &q, ret, flags) ; return q; case 'n' : ret->vt = advance_dword(&m, &q, 1, V_NULL, VS_NULL) ; return q; case 't' : ret->vt = advance_dword(&m, &q, 1, V_TRUE, VS_TRUE) ; return q; case 'f' : ret->vt = advance_dword(&m, &q, 0, V_FALSE, VS_ALSE) ; return q; @@ -619,11 +713,11 @@ long value(const char *s, size_t n, long p, JsonState *ret, uint64_t flags) { } } -void vstring(const GoString *src, long *p, JsonState *ret) { +void vstring(const GoString *src, long *p, JsonState *ret, uint64_t flags) { int64_t v = -1; int64_t i = *p; - ssize_t e = advance_string(src, i, &v); - + ssize_t e = advance_string(src, i, &v, flags); + /* check for errors */ if (e < 0) { *p = src->len; @@ -992,10 +1086,7 @@ static inline long fsm_push(StateMachine *self, int vt) { } } -#define VALID_DEFAULT 0 // basic validate, except JSON string. -#define VALID_FULL 1 // also validate JSON string, including control chars or invalid UTF-8. - -static inline long fsm_exec(StateMachine *self, const GoString *src, long *p, int validate_flag) { +static inline long fsm_exec(StateMachine *self, const GoString *src, long *p, uint64_t flags) { int vt; char ch; long vi = -1; @@ -1042,7 +1133,7 @@ static inline long fsm_exec(StateMachine *self, const GoString *src, long *p, in case FSM_KEY: { FSM_CHAR('"'); FSM_REPL(self, FSM_ELEM); - FSM_XERR(skip_string(src, p)); + FSM_XERR(skip_string(src, p, flags)); continue; } @@ -1080,11 +1171,7 @@ static inline long fsm_exec(StateMachine *self, const GoString *src, long *p, in /* the quote of the first key */ case '"': { FSM_REPL(self, FSM_OBJ); - if (validate_flag == VALID_DEFAULT) { - FSM_XERR(skip_string(src, p)); - } else if (validate_flag == VALID_FULL) { - FSM_XERR(validate_string(src, p)); - } + FSM_XERR(skip_string(src, p, flags)); FSM_XERR(fsm_push(self, FSM_ELEM)); continue; } @@ -1110,14 +1197,8 @@ static inline long fsm_exec(StateMachine *self, const GoString *src, long *p, in case 'f' : FSM_XERR(advance_dword(src, p, 0, *p - 1, VS_ALSE)); break; case '[' : FSM_XERR(fsm_push(self, FSM_ARR_0)); break; case '{' : FSM_XERR(fsm_push(self, FSM_OBJ_0)); break; - case '"' : { - if (validate_flag == VALID_DEFAULT) { - FSM_XERR(skip_string(src, p)); - } else if (validate_flag == VALID_FULL) { - FSM_XERR(validate_string(src, p)); - } - break; - } + case '"' : FSM_XERR(skip_string(src, p, flags)); break; + case 0 : return -ERR_EOF; default : return -ERR_INVAL; } } @@ -1343,58 +1424,36 @@ check_index: #undef check_sidx #undef check_vidx -long skip_one(const GoString *src, long *p, StateMachine *m) { +long skip_one(const GoString *src, long *p, StateMachine *m, uint64_t flags) { fsm_init(m, FSM_VAL); - return fsm_exec(m, src, p, VALID_DEFAULT); + return fsm_exec(m, src, p, flags); } -long skip_array(const GoString *src, long *p, StateMachine *m) { +long skip_array(const GoString *src, long *p, StateMachine *m, uint64_t flags) { fsm_init(m, FSM_ARR_0); - return fsm_exec(m, src, p, VALID_DEFAULT); + return fsm_exec(m, src, p, flags); } -long skip_object(const GoString *src, long *p, StateMachine *m) { +long skip_object(const GoString *src, long *p, StateMachine *m, uint64_t flags) { fsm_init(m, FSM_OBJ_0); - return fsm_exec(m, src, p, VALID_DEFAULT); + return fsm_exec(m, src, p, flags); } -long skip_string(const GoString *src, long *p) { +long skip_string(const GoString *src, long *p, uint64_t flags) { int64_t v; ssize_t q = *p - 1; - ssize_t e = advance_string(src, *p, &v); + ssize_t e = advance_string(src, *p, &v, flags); /* check for errors, and update the position */ if (e >= 0) { *p = e; return q; } else { - *p = src->len; + *p = v; return e; } } -long validate_string(const GoString *src, long *p) { - int64_t v; - ssize_t q = *p - 1; - ssize_t e = advance_validate_string(src, *p, &v); - - /* check for errors in string advance */ - if (e < 0) { - *p = e == -ERR_EOF ? src->len : v; - return e; - } - - /* check for errors in UTF-8 validate */ - ssize_t nb = e - *p - 1; - ssize_t r = utf8_validate(src->buf + *p, nb); - if (r >= 0) { - *p += r; - return -ERR_INVAL; - } - *p = e; - return q; -} - long skip_negative(const GoString *src, long *p) { long i = *p; long r = do_skip_number(src->buf + i, src->len - i); @@ -1456,5 +1515,5 @@ long skip_number(const GoString *src, long *p) { long validate_one(const GoString *src, long *p, StateMachine *m) { fsm_init(m, FSM_VAL); - return fsm_exec(m, src, p, VALID_FULL); + return fsm_exec(m, src, p, MASK_VALIDATE_STRING); } \ No newline at end of file diff --git a/native/test/xprintf.h b/native/test/xprintf.h new file mode 100644 index 0000000..b39d62c --- /dev/null +++ b/native/test/xprintf.h @@ -0,0 +1,204 @@ +/* + * Copyright 2022 ByteDance Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef XPRINTF_H +#define XPRINTF_H + +#include + +static void __attribute__((naked)) write_syscall(const char *s, size_t n) +{ + asm volatile( + "movq %rsi, %rdx" + "\n" + "movq %rdi, %rsi" + "\n" + "movq $1, %rdi" + "\n" + "movq $0x02000004, %rax" + "\n" + "syscall" + "\n" + "retq" + "\n"); +} + +static void printch(const char ch) +{ + write_syscall(&ch, 1); +} + +static void printstr(const char *s) +{ + size_t n = 0; + const char *p = s; + while (*p++) + n++; + write_syscall(s, n); +} + +static void printint(int64_t v) +{ + char neg = 0; + char buf[32] = {}; + char *p = &buf[31]; + if (v == 0) + { + printch('0'); + return; + } + if (v < 0) + { + v = -v; + neg = 1; + } + while (v) + { + *--p = (v % 10) + '0'; + v /= 10; + } + if (neg) + { + *--p = '-'; + } + printstr(p); +} + +static const char tab[] = "0123456789abcdef"; + +static void printhex(uintptr_t v) +{ + if (v == 0) + { + printch('0'); + return; + } + char buf[32] = {}; + char *p = &buf[31]; + + while (v) + { + *--p = tab[v & 0x0f]; + v >>= 4; + } + printstr(p); +} + +#define MAX_BUF_LEN 100 + +static void printbytes(GoSlice *s) +{ + printch('['); + int i = 0; + if (s->len > MAX_BUF_LEN) + { + i = s->len - MAX_BUF_LEN; + } + for (; i < s->len; i++) + { + printch(tab[((s->buf[i]) & 0xf0) >> 4]); + printch(tab[(s->buf[i]) & 0x0f]); + if (i != s->len - 1) + printch(','); + } + printch(']'); +} + +static void printgostr(GoString *s) +{ + printch('"'); + if (s->len < MAX_BUF_LEN) + { + write_syscall(s->buf, s->len); + } + else + { + write_syscall(&s->buf[s->len - MAX_BUF_LEN], MAX_BUF_LEN); + } + printch('"'); +} + +static void xprintf(const char *fmt, ...) +{ +#ifdef DEBUG + __builtin_va_list va; + char buf[256] = {}; + char *p = buf; + __builtin_va_start(va, fmt); + for (;;) + { + if (*fmt == 0) + { + break; + } + if (*fmt != '%') + { + *p++ = *fmt++; + continue; + } + *p = 0; + p = buf; + fmt++; + printstr(buf); + switch (*fmt++) + { + case '%': + { + printch('%'); + break; + } + case 's': + { + printgostr(__builtin_va_arg(va, GoString *)); + break; + } + case 'd': + { + printint(__builtin_va_arg(va, int64_t)); + break; + } + case 'f': + { + printint(__builtin_va_arg(va, double)); + break; + } + case 'c': + { + printch(__builtin_va_arg(va, const char)); + break; + } + case 'x': + { + printhex(__builtin_va_arg(va, uintptr_t)); + break; + } + case 'l': + { + printbytes(__builtin_va_arg(va, GoSlice *)); + break; + } + } + } + __builtin_va_end(va); + if (p != buf) + { + *p = 0; + printstr(buf); + } +#endif +} + +#endif // XPRINTF_H \ No newline at end of file diff --git a/native/utf8.c b/native/utf8.c deleted file mode 100644 index 6b95337..0000000 --- a/native/utf8.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (c) 2009 The Go Authors. All rights reserved. - * Modifications Copyright 2021 ByteDance Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "native.h" - -// ascii: 0x00 ~ 0x7F -static inline int _mm_ascii_mask(__m128i vv) { - return _mm_movemask_epi8(vv); -} - -#if USE_AVX2 - -// ascii: 0x00 ~ 0x7F -static inline int _mm256_ascii_mask(__m256i vv) { - return _mm256_movemask_epi8(vv); -} - -#endif - -static inline bool is_ascii(uint8_t ch) { - return ch < 0x80; -} - -// The default lowest and highest continuation byte. -const static uint8_t locb = 0x80; -const static uint8_t hicb = 0xBF; -const static uint8_t xx = 0xF1; // invalid: size 1 -const static uint8_t as = 0xF0; // ASCII: size 1 -const static uint8_t s1 = 0x02; // accept 0, size 2 -const static uint8_t s2 = 0x13; // accept 1, size 3 -const static uint8_t s3 = 0x03; // accept 0, size 3 -const static uint8_t s4 = 0x23; // accept 2, size 3 -const static uint8_t s5 = 0x34; // accept 3, size 4 -const static uint8_t s6 = 0x04; // accept 0, size 4 -const static uint8_t s7 = 0x44; // accept 4, size 4 - -// first is information about the first byte in a UTF-8 sequence. -static const uint8_t first[256] = { - // 1 2 3 4 5 6 7 8 9 A B C D E F - as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x00-0x0F - as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x10-0x1F - as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x20-0x2F - as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x30-0x3F - as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x40-0x4F - as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x50-0x5F - as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x60-0x6F - as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x70-0x7F - // 1 2 3 4 5 6 7 8 9 A B C D E F - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x80-0x8F - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x90-0x9F - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xA0-0xAF - xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xB0-0xBF - xx, xx, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xC0-0xCF - s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xD0-0xDF - s2, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s4, s3, s3, // 0xE0-0xEF - s5, s6, s6, s6, s7, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xF0-0xFF -}; - -// AcceptRange gives the range of valid values for the second byte in a UTF-8 -// sequence. -struct AcceptRange { - uint8_t lo; // lowest value for second byte. - uint8_t hi; // highest value for second byte. -}; - -// ranges has size 16 to avoid bounds checks in the code that uses it. -const static struct AcceptRange ranges[5] = { - {locb, hicb}, // 0 - {0xA0, hicb}, // 1 - {locb, 0x9F}, // 2 - {0x90, hicb}, // 3 - {locb, 0x8F}, // 4 -}; - -// UTF-8 code point | first byte | second byte | third byte | fourth byte -// U+0000 - U+007F | 0___ ____ -// U+0080 - U+07FF | 110_ ____ | 10__ ____ -// U+0800 - U+D7FF | 1110 ____ | 10__ ____ | 10__ ____ -// U+D800 - U+DFFF | reserved for UTF-16 surrogate pairs -// U+E000 - U+FFFF | 1110 ____ | 10__ ____ | 10__ ____ -// U+10000 - U+10FFFF | 1111 0___ | 10__ ____ | 10__ ____ | 10__ ____ -// checks non-ascii characters, and returns the utf-8 length -static inline ssize_t nonascii_is_utf8(const uint8_t* sp, size_t n) { - uint8_t mask = first[sp[0]]; - uint8_t size = mask & 7; - if (n < size) { - return 0; - } - struct AcceptRange accept = ranges[mask >> 4]; - switch (size) { - case 4 : if (sp[3] < locb || hicb < sp[3]) return 0; - case 3 : if (sp[2] < locb || hicb < sp[2]) return 0; - case 2 : if (sp[1] < accept.lo || accept.hi < sp[1]) return 0; break; - case 1 : return 0; // invalid chars - case 0 : return 1; // ascii chars - default: return 0; - } - return size; -} - -ssize_t find_non_ascii(const uint8_t*sp, ssize_t nb) { - const uint8_t* ss = sp; - int64_t m; - -#if USE_AVX2 - while (nb >= 32) { - __m256i v = _mm256_loadu_si256 ((const void *)(sp)); - if (unlikely((m = _mm256_ascii_mask(v)) != 0)) { - return sp - ss + __builtin_ctzll(m); - } - nb -= 32; - sp += 32; - } - - /* clear spper half to avoid AVX-SSE transition penalty */ - _mm256_zeroupper(); -#endif - - while (nb >= 16) { - __m128i v = _mm_loadu_si128 ((const void *)(sp)); - if (unlikely((m = _mm_ascii_mask(v)) != 0)) { - return sp - ss + __builtin_ctzll(m); - } - nb -= 16; - sp += 16; - } - - /* remaining bytes, do with scalar code */ - while (nb-- > 0) { - if (is_ascii(*sp)) { - sp++; - } else { - return sp - ss; - } - } - - /* nothing found */ - return -1; -} - -// utf8_validate validates whether the JSON string is valid UTF-8. -// return -1 if validate, otherwise, return the error postion. -ssize_t utf8_validate(const char *sp, ssize_t nb) { - const uint8_t* p = (const uint8_t*)sp; - const uint8_t* s = (const uint8_t*)sp; - ssize_t n; - ssize_t b; - - // Optimize for the continuous non-ascii chars */ - while (nb > 0 && (n = (!is_ascii(*p) ? 0 : find_non_ascii(p, nb))) != -1) { - /* not found non-ascii in string */ - if (n >= nb) { - return -1; - } - - nb -= n; - p += n; - - /* validate the non-ascii */ - if (unlikely((b = nonascii_is_utf8(p, nb)) == 0)) { - return p - s; - } - - nb -= b; - p += b; - } - - return -1; -} \ No newline at end of file diff --git a/native/utf8.h b/native/utf8.h new file mode 100644 index 0000000..631df51 --- /dev/null +++ b/native/utf8.h @@ -0,0 +1,121 @@ +#ifndef UTF8_H +#define UTF8_H +/* + * Copyright (C) 2019 Yaoyuan . + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file may have been modified by ByteDance authors. All ByteDance + * Modifications are Copyright 2022 ByteDance Authors. + */ + +static inline ssize_t valid_utf8_4byte(uint32_t ubin) { + /* + Each unicode code point is encoded as 1 to 4 bytes in UTF-8 encoding, + we use 4-byte mask and pattern value to validate UTF-8 byte sequence, + this requires the input data to have 4-byte zero padding. + --------------------------------------------------- + 1 byte + unicode range [U+0000, U+007F] + unicode min [.......0] + unicode max [.1111111] + bit pattern [0.......] + --------------------------------------------------- + 2 byte + unicode range [U+0080, U+07FF] + unicode min [......10 ..000000] + unicode max [...11111 ..111111] + bit require [...xxxx. ........] (1E 00) + bit mask [xxx..... xx......] (E0 C0) + bit pattern [110..... 10......] (C0 80) + // 1101 0100 10110000 + // 0001 1110 + --------------------------------------------------- + 3 byte + unicode range [U+0800, U+FFFF] + unicode min [........ ..100000 ..000000] + unicode max [....1111 ..111111 ..111111] + bit require [....xxxx ..x..... ........] (0F 20 00) + bit mask [xxxx.... xx...... xx......] (F0 C0 C0) + bit pattern [1110.... 10...... 10......] (E0 80 80) + --------------------------------------------------- + 3 byte invalid (reserved for surrogate halves) + unicode range [U+D800, U+DFFF] + unicode min [....1101 ..100000 ..000000] + unicode max [....1101 ..111111 ..111111] + bit mask [....xxxx ..x..... ........] (0F 20 00) + bit pattern [....1101 ..1..... ........] (0D 20 00) + --------------------------------------------------- + 4 byte + unicode range [U+10000, U+10FFFF] + unicode min [........ ...10000 ..000000 ..000000] + unicode max [.....100 ..001111 ..111111 ..111111] + bit err0 [.....100 ........ ........ ........] (04 00 00 00) + bit err1 [.....011 ..110000 ........ ........] (03 30 00 00) + bit require [.....xxx ..xx.... ........ ........] (07 30 00 00) + bit mask [xxxxx... xx...... xx...... xx......] (F8 C0 C0 C0) + bit pattern [11110... 10...... 10...... 10......] (F0 80 80 80) + --------------------------------------------------- + */ + const uint32_t b1_mask = 0x00000080UL; + const uint32_t b1_patt = 0x00000000UL; + const uint32_t b2_mask = 0x0000C0E0UL; + const uint32_t b2_patt = 0x000080C0UL; + const uint32_t b2_requ = 0x0000001EUL; + const uint32_t b3_mask = 0x00C0C0F0UL; + const uint32_t b3_patt = 0x008080E0UL; + const uint32_t b3_requ = 0x0000200FUL; + const uint32_t b3_erro = 0x0000200DUL; + const uint32_t b4_mask = 0xC0C0C0F8UL; + const uint32_t b4_patt = 0x808080F0UL; + const uint32_t b4_requ = 0x00003007UL; + const uint32_t b4_err0 = 0x00000004UL; + const uint32_t b4_err1 = 0x00003003UL; + +#define is_valid_seq_1(uni) ( \ + ((uni & b1_mask) == b1_patt) \ +) + +#define is_valid_seq_2(uni) ( \ + ((uni & b2_mask) == b2_patt) && \ + ((uni & b2_requ)) \ +) + +#define is_valid_seq_3(uni) ( \ + ((uni & b3_mask) == b3_patt) && \ + ((tmp = (uni & b3_requ))) && \ + ((tmp != b3_erro)) \ +) + +#define is_valid_seq_4(uni) ( \ + ((uni & b4_mask) == b4_patt) && \ + ((tmp = (uni & b4_requ))) && \ + ((tmp & b4_err0) == 0 || (tmp & b4_err1) == 0) \ +) + uint32_t tmp = 0; + + if (is_valid_seq_3(ubin)) return 3; + if (is_valid_seq_2(ubin)) return 2; + if (is_valid_seq_4(ubin)) return 4; + return 0; +} + +static inline uint32_t less4byte_to_uint32(const char* sp, size_t nb) { + if (nb == 1) return *(uint8_t*)sp; + if (nb == 2) return *(uint16_t*)sp; + uint32_t hi_1 = (*(uint8_t*)(sp + 2)); + uint32_t lo_2 = *(uint16_t*)(sp); + return hi_1 << 16 | lo_2; +} + +#endif \ No newline at end of file diff --git a/sonic.go b/sonic.go index 86b9e8a..9c88e95 100644 --- a/sonic.go +++ b/sonic.go @@ -61,6 +61,8 @@ type frozenConfig struct { // Froze convert the Config to API func (cfg Config) Froze() API { api := &frozenConfig{Config: cfg} + + // configure encoder options: if cfg.EscapeHTML { api.encoderOpts |= encoder.EscapeHTML } @@ -73,6 +75,11 @@ func (cfg Config) Froze() API { if cfg.NoQuoteTextMarshaler { api.encoderOpts |= encoder.NoQuoteTextMarshaler } + if cfg.NoNullSliceOrMap { + api.encoderOpts |= encoder.NoNullSliceOrMap + } + + // configure decoder options: if cfg.UseInt64 { api.decoderOpts |= decoder.OptionUseInt64 } @@ -85,8 +92,8 @@ func (cfg Config) Froze() API { if cfg.CopyString { api.decoderOpts |= decoder.OptionCopyString } - if cfg.NoNullSliceOrMap { - api.encoderOpts |= encoder.NoNullSliceOrMap + if cfg.ValidateString { + api.decoderOpts |= decoder.OptionValidateString } return api } @@ -111,7 +118,6 @@ func (cfg *frozenConfig) MarshalIndent(val interface{}, prefix, indent string) ( func (cfg *frozenConfig) UnmarshalFromString(buf string, val interface{}) error { dec := decoder.NewDecoder(buf) dec.SetOptions(cfg.decoderOpts) - err := dec.Decode(val) pos := dec.Pos()