2
0
Fork 0
mirror of https://github.com/ii64/sonic.git synced 2026-06-20 16:45:22 +08:00

fix: skip exponent number that begin with zero in skip_number() (#109)

This commit is contained in:
liu 2021-09-23 15:02:09 +08:00 committed by GitHub
parent a577eafc25
commit a7ace8cd03
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 403 additions and 357 deletions

View file

@ -264,7 +264,7 @@ LBB2_5:
LONG $0x4fdc6941; WORD $0x1293; BYTE $0x00 // imull $1217359, %r12d, %ebx
MOVQ R12, AX
SHLQ $4, AX
LONG $0x700d8d48; WORD $0x0072; BYTE $0x00 // leaq $29296(%rip), %rcx /* _DOUBLE_POW5_INV_SPLIT(%rip) */
LONG $0x8c0d8d48; WORD $0x0072; BYTE $0x00 // leaq $29324(%rip), %rcx /* _DOUBLE_POW5_INV_SPLIT(%rip) */
MOVQ R8, DI
ORQ $2, DI
MOVQ 0(AX)(CX*1), R10
@ -351,7 +351,7 @@ LBB2_12:
SHRL $19, BX
MOVLQSX AX, SI
SHLQ $4, SI
LONG $0x9b0d8d4c; WORD $0x0086; BYTE $0x00 // leaq $34459(%rip), %r9 /* _DOUBLE_POW5_SPLIT(%rip) */
LONG $0xb70d8d4c; WORD $0x0086; BYTE $0x00 // leaq $34487(%rip), %r9 /* _DOUBLE_POW5_SPLIT(%rip) */
MOVQ R8, DI
ORQ $2, DI
MOVQ 0(SI)(R9*1), R15
@ -755,7 +755,7 @@ LBB2_60:
LEAQ 1(R13), BX
MOVQ BX, SI
MOVL R15, DX
LONG $0x003b7de8; BYTE $0x00 // callq _print_mantissa
LONG $0x003b99e8; BYTE $0x00 // callq _print_mantissa
MOVB 1(R13), AX
MOVB AX, 0(R13)
MOVL $1, CX
@ -784,7 +784,7 @@ LBB2_65:
LEAL 0(DX)(DX*1), CX
LEAL 0(CX)(CX*4), CX
SUBL CX, AX
LONG $0x7e0d8d48; WORD $0x0095; BYTE $0x00 // leaq $38270(%rip), %rcx /* _Digits(%rip) */
LONG $0x9a0d8d48; WORD $0x0095; BYTE $0x00 // leaq $38298(%rip), %rcx /* _Digits(%rip) */
MOVWLZX 0(CX)(DX*2), CX
MOVL BX, DX
MOVW CX, 0(R13)(DX*1)
@ -807,7 +807,7 @@ LBB2_68:
MOVL BX, SI
ADDQ -56(BP), SI
MOVL R15, DX
LONG $0x003ad9e8; BYTE $0x00 // callq _print_mantissa
LONG $0x003af5e8; BYTE $0x00 // callq _print_mantissa
TESTL R13, R13
JE LBB2_79
LEAL 0(R13)(BX*1), AX
@ -839,7 +839,7 @@ LBB2_73:
CMPL AX, $10
JL LBB2_81
WORD $0x9848 // cltq
LONG $0xd10d8d48; WORD $0x0094; BYTE $0x00 // leaq $38097(%rip), %rcx /* _Digits(%rip) */
LONG $0xed0d8d48; WORD $0x0094; BYTE $0x00 // leaq $38125(%rip), %rcx /* _Digits(%rip) */
MOVWLZX 0(CX)(AX*2), AX
MOVL BX, CX
MOVW AX, 0(R13)(CX*1)
@ -1041,7 +1041,7 @@ LBB2_104:
MOVQ R13, SI
MOVL R15, DX
WORD $0xf8c5; BYTE $0x77 // vzeroupper
LONG $0x003758e8; BYTE $0x00 // callq _print_mantissa
LONG $0x003774e8; BYTE $0x00 // callq _print_mantissa
ADDL BX, R15
MOVL R15, BX
@ -1134,7 +1134,7 @@ _u64toa:
ADDQ AX, AX
CMPL SI, $1000
JB LBB4_3
LONG $0xc90d8d48; WORD $0x0090; BYTE $0x00 // leaq $37065(%rip), %rcx /* _Digits(%rip) */
LONG $0xe50d8d48; WORD $0x0090; BYTE $0x00 // leaq $37093(%rip), %rcx /* _Digits(%rip) */
MOVB 0(DX)(CX*1), CX
MOVB CX, 0(DI)
MOVL $1, CX
@ -1148,14 +1148,14 @@ LBB4_3:
LBB4_4:
MOVWLZX DX, DX
ORQ $1, DX
LONG $0xa8358d48; WORD $0x0090; BYTE $0x00 // leaq $37032(%rip), %rsi /* _Digits(%rip) */
LONG $0xc4358d48; WORD $0x0090; BYTE $0x00 // leaq $37060(%rip), %rsi /* _Digits(%rip) */
MOVB 0(DX)(SI*1), DX
MOVL CX, SI
INCL CX
MOVB DX, 0(DI)(SI*1)
LBB4_6:
LONG $0x97158d48; WORD $0x0090; BYTE $0x00 // leaq $37015(%rip), %rdx /* _Digits(%rip) */
LONG $0xb3158d48; WORD $0x0090; BYTE $0x00 // leaq $37043(%rip), %rdx /* _Digits(%rip) */
MOVB 0(AX)(DX*1), DX
MOVL CX, SI
INCL CX
@ -1164,7 +1164,7 @@ LBB4_6:
LBB4_7:
MOVWLZX AX, AX
ORQ $1, AX
LONG $0x7f158d48; WORD $0x0090; BYTE $0x00 // leaq $36991(%rip), %rdx /* _Digits(%rip) */
LONG $0x9b158d48; WORD $0x0090; BYTE $0x00 // leaq $37019(%rip), %rdx /* _Digits(%rip) */
MOVB 0(AX)(DX*1), AX
MOVL CX, DX
INCL CX
@ -1211,7 +1211,7 @@ LBB4_8:
ADDQ R11, R11
CMPL SI, $10000000
JB LBB4_11
LONG $0xe8058d48; WORD $0x008f; BYTE $0x00 // leaq $36840(%rip), %rax /* _Digits(%rip) */
LONG $0x04058d48; WORD $0x0090; BYTE $0x00 // leaq $36868(%rip), %rax /* _Digits(%rip) */
MOVB 0(R10)(AX*1), AX
MOVB AX, 0(DI)
MOVL $1, CX
@ -1225,14 +1225,14 @@ LBB4_11:
LBB4_12:
MOVL R10, AX
ORQ $1, AX
LONG $0xc3358d48; WORD $0x008f; BYTE $0x00 // leaq $36803(%rip), %rsi /* _Digits(%rip) */
LONG $0xdf358d48; WORD $0x008f; BYTE $0x00 // leaq $36831(%rip), %rsi /* _Digits(%rip) */
MOVB 0(AX)(SI*1), AX
MOVL CX, SI
INCL CX
MOVB AX, 0(DI)(SI*1)
LBB4_14:
LONG $0xb2058d48; WORD $0x008f; BYTE $0x00 // leaq $36786(%rip), %rax /* _Digits(%rip) */
LONG $0xce058d48; WORD $0x008f; BYTE $0x00 // leaq $36814(%rip), %rax /* _Digits(%rip) */
MOVB 0(R9)(AX*1), AX
MOVL CX, SI
INCL CX
@ -1241,7 +1241,7 @@ LBB4_14:
LBB4_15:
MOVWLZX R9, AX
ORQ $1, AX
LONG $0x98358d48; WORD $0x008f; BYTE $0x00 // leaq $36760(%rip), %rsi /* _Digits(%rip) */
LONG $0xb4358d48; WORD $0x008f; BYTE $0x00 // leaq $36788(%rip), %rsi /* _Digits(%rip) */
MOVB 0(AX)(SI*1), AX
MOVL CX, DX
MOVB AX, 0(DI)(DX*1)
@ -1323,7 +1323,7 @@ LBB4_16:
MOVL $16, CX
SUBL AX, CX
SHLQ $4, AX
LONG $0x0d158d48; WORD $0x008f; BYTE $0x00 // leaq $36621(%rip), %rdx /* _VecShiftShuffles(%rip) */
LONG $0x29158d48; WORD $0x008f; BYTE $0x00 // leaq $36649(%rip), %rdx /* _VecShiftShuffles(%rip) */
LONG $0x0071e2c4; WORD $0x1004 // vpshufb (%rax,%rdx), %xmm1, %xmm0
LONG $0x077ffac5 // vmovdqu %xmm0, (%rdi)
MOVL CX, AX
@ -1349,7 +1349,7 @@ LBB4_20:
CMPL DX, $99
JA LBB4_22
MOVL DX, AX
LONG $0xf00d8d48; WORD $0x008d; BYTE $0x00 // leaq $36336(%rip), %rcx /* _Digits(%rip) */
LONG $0x0c0d8d48; WORD $0x008e; BYTE $0x00 // leaq $36364(%rip), %rcx /* _Digits(%rip) */
MOVB 0(CX)(AX*2), DX
MOVB 1(CX)(AX*2), AX
MOVB DX, 0(DI)
@ -1374,7 +1374,7 @@ LBB4_22:
WORD $0xc96b; BYTE $0x64 // imull $100, %ecx, %ecx
SUBL CX, AX
MOVWLZX AX, AX
LONG $0x9f0d8d48; WORD $0x008d; BYTE $0x00 // leaq $36255(%rip), %rcx /* _Digits(%rip) */
LONG $0xbb0d8d48; WORD $0x008d; BYTE $0x00 // leaq $36283(%rip), %rcx /* _Digits(%rip) */
MOVB 0(CX)(AX*2), DX
MOVB 1(CX)(AX*2), AX
MOVB DX, 1(DI)
@ -1386,7 +1386,7 @@ LBB4_24:
WORD $0xc86b; BYTE $0x64 // imull $100, %eax, %ecx
SUBL CX, DX
MOVWLZX AX, AX
LONG $0x7c058d4c; WORD $0x008d; BYTE $0x00 // leaq $36220(%rip), %r8 /* _Digits(%rip) */
LONG $0x98058d4c; WORD $0x008d; BYTE $0x00 // leaq $36248(%rip), %r8 /* _Digits(%rip) */
MOVB 0(R8)(AX*2), CX
MOVB 1(R8)(AX*2), AX
MOVB CX, 0(DI)
@ -1472,8 +1472,8 @@ _quote:
MOVQ CX, R10
MOVQ DX, CX
TESTB $1, R8
LONG $0x7b058d48; WORD $0x008d; BYTE $0x00 // leaq $36219(%rip), %rax /* __SingleQuoteTab(%rip) */
LONG $0x74158d48; WORD $0x009d; BYTE $0x00 // leaq $40308(%rip), %rdx /* __DoubleQuoteTab(%rip) */
LONG $0x97058d48; WORD $0x008d; BYTE $0x00 // leaq $36247(%rip), %rax /* __SingleQuoteTab(%rip) */
LONG $0x90158d48; WORD $0x009d; BYTE $0x00 // leaq $40336(%rip), %rdx /* __DoubleQuoteTab(%rip) */
LONG $0xd0440f48 // cmoveq %rax, %rdx
MOVQ CX, R8
MOVQ DI, AX
@ -1581,7 +1581,7 @@ LBB5_14:
TESTQ R10, R10
MOVQ -48(BP), CX
MOVQ -56(BP), DI
LONG $0x002d8d4c; WORD $0x008c; BYTE $0x00 // leaq $35840(%rip), %r13 /* __SingleQuoteTab(%rip) */
LONG $0x1c2d8d4c; WORD $0x008c; BYTE $0x00 // leaq $35868(%rip), %r13 /* __SingleQuoteTab(%rip) */
JLE LBB5_29
LBB5_16:
@ -1843,7 +1843,7 @@ _unquote:
MOVQ R8, AX
MOVQ R8, -72(BP)
ANDL $1, R8
LONG $0x6d3d8d48; WORD $0x00a9; BYTE $0x00 // leaq $43373(%rip), %rdi /* __UnquoteTab(%rip) */
LONG $0x893d8d48; WORD $0x00a9; BYTE $0x00 // leaq $43401(%rip), %rdi /* __UnquoteTab(%rip) */
QUAD $0xffffffb5056ffac5 // vmovdqu $-75(%rip), %xmm0 /* LCPI6_0(%rip) */
MOVQ BX, AX
MOVQ BX, -56(BP)
@ -2585,14 +2585,14 @@ _atof_eisel_lemire64:
MOVQ CX, R14
MOVL DX, R15
MOVQ DI, R13
LONG $0x0025d8e8; BYTE $0x00 // callq _count_len_u64
LONG $0x0025f4e8; BYTE $0x00 // callq _count_len_u64
MOVL AX, R8
MOVL AX, CX
NEGL CX
SHLQ CX, R13
MOVL BX, CX
SHLQ $4, CX
LONG $0x1d158d4c; WORD $0x0029; BYTE $0x00 // leaq $10525(%rip), %r10 /* _POW10_M128_TAB(%rip) */
LONG $0x39158d4c; WORD $0x0029; BYTE $0x00 // leaq $10553(%rip), %r10 /* _POW10_M128_TAB(%rip) */
MOVQ R13, AX
MULQ 8(CX)(R10*1)
MOVQ AX, R9
@ -2714,7 +2714,7 @@ LBB8_5:
MOVQ BX, -48(BP)
JLE LBB8_12
XORL R12, R12
LONG $0x32358d4c; WORD $0x0053; BYTE $0x00 // leaq $21298(%rip), %r14 /* _POW_TAB(%rip) */
LONG $0x4e358d4c; WORD $0x0053; BYTE $0x00 // leaq $21326(%rip), %r14 /* _POW_TAB(%rip) */
JMP LBB8_8
LBB8_10:
@ -2726,7 +2726,7 @@ LBB8_10:
LBB8_11:
MOVQ R15, DI
MOVL BX, SI
LONG $0x0025f1e8; BYTE $0x00 // callq _right_shift
LONG $0x00260de8; BYTE $0x00 // callq _right_shift
LBB8_7:
ADDL BX, R12
@ -2743,7 +2743,7 @@ LBB8_8:
JMP LBB8_7
LBB8_12:
LONG $0xeb358d4c; WORD $0x0052; BYTE $0x00 // leaq $21227(%rip), %r14 /* _POW_TAB(%rip) */
LONG $0x07358d4c; WORD $0x0053; BYTE $0x00 // leaq $21255(%rip), %r14 /* _POW_TAB(%rip) */
JMP LBB8_14
LBB8_18:
@ -2754,7 +2754,7 @@ LBB8_18:
LBB8_20:
MOVQ R15, DI
MOVL BX, SI
LONG $0x002444e8; BYTE $0x00 // callq _left_shift
LONG $0x002460e8; BYTE $0x00 // callq _left_shift
MOVL 804(R15), AX
LBB8_13:
@ -2794,7 +2794,7 @@ LBB8_21:
LBB8_25:
MOVQ R15, DI
MOVL $60, SI
LONG $0x002543e8; BYTE $0x00 // callq _right_shift
LONG $0x00255fe8; BYTE $0x00 // callq _right_shift
ADDL $60, R12
CMPL R12, $-120
JL LBB8_25
@ -2820,7 +2820,7 @@ LBB8_31:
NEGL R12
MOVQ R15, DI
MOVL R12, SI
LONG $0x0024fde8; BYTE $0x00 // callq _right_shift
LONG $0x002519e8; BYTE $0x00 // callq _right_shift
MOVL $-1022, R14
LBB8_32:
@ -2828,7 +2828,7 @@ LBB8_32:
JE LBB8_34
MOVQ R15, DI
MOVL $53, SI
LONG $0x002379e8; BYTE $0x00 // callq _left_shift
LONG $0x002395e8; BYTE $0x00 // callq _left_shift
LBB8_34:
MOVL 804(R15), AX
@ -4342,7 +4342,7 @@ LBB14_63:
CMPL BX, $23
JL LBB14_72
LEAL -22(BX), AX
LONG $0x4f0d8d48; WORD $0x014d; BYTE $0x00 // leaq $85327(%rip), %rcx /* _P10_TAB(%rip) */
LONG $0x6b0d8d48; WORD $0x014d; BYTE $0x00 // leaq $85355(%rip), %rcx /* _P10_TAB(%rip) */
LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0
LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp)
MOVL $22, AX
@ -4358,7 +4358,7 @@ LBB14_69:
CMPL BX, $-22
JB LBB14_76
NEGL BX
LONG $0x17058d48; WORD $0x014d; BYTE $0x00 // leaq $85271(%rip), %rax /* _P10_TAB(%rip) */
LONG $0x33058d48; WORD $0x014d; BYTE $0x00 // leaq $85299(%rip), %rax /* _P10_TAB(%rip) */
LONG $0x045efbc5; BYTE $0xd8 // vdivsd (%rax,%rbx,8), %xmm0, %xmm0
LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp)
JMP LBB14_82
@ -4387,7 +4387,7 @@ LBB14_73:
LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1
JA LBB14_76
MOVL AX, AX
LONG $0xaa0d8d48; WORD $0x014c; BYTE $0x00 // leaq $85162(%rip), %rcx /* _P10_TAB(%rip) */
LONG $0xc60d8d48; WORD $0x014c; BYTE $0x00 // leaq $85190(%rip), %rcx /* _P10_TAB(%rip) */
LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0
LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp)
JMP LBB14_82
@ -5391,38 +5391,44 @@ LCPI23_6:
QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE'
_skip_number:
BYTE $0x55 // pushq %rbp
WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp
WORD $0x5741 // pushq %r15
WORD $0x5641 // pushq %r14
BYTE $0x53 // pushq %rbx
TESTQ SI, SI
JE LBB23_31
CMPB 0(DI), $48
JNE LBB23_4
MOVL $1, AX
CMPQ SI, $1
JE LBB23_32
CMPB 1(DI), $46
JNE LBB23_32
BYTE $0x55 // pushq %rbp
WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp
WORD $0x5741 // pushq %r15
WORD $0x5641 // pushq %r14
BYTE $0x53 // pushq %rbx
TESTQ SI, SI
JE LBB23_32
CMPB 0(DI), $48
JNE LBB23_5
MOVL $1, AX
CMPQ SI, $1
JE LBB23_48
MOVB 1(DI), CX
ADDB $-46, CX
CMPB CX, $55
JA LBB23_48
MOVBLZX CX, CX
MOVQ $36028797027352577, DX
BTQ CX, DX
JAE LBB23_48
LBB23_4:
LBB23_5:
MOVQ $-1, R10
CMPQ SI, $16
JB LBB23_51
QUAD $0xffffff47056f7ac5 // vmovdqu $-185(%rip), %xmm8 /* LCPI23_0(%rip) */
QUAD $0xffffff4f0d6f7ac5 // vmovdqu $-177(%rip), %xmm9 /* LCPI23_1(%rip) */
QUAD $0xffffff57156f7ac5 // vmovdqu $-169(%rip), %xmm10 /* LCPI23_2(%rip) */
QUAD $0xffffff5f1d6f7ac5 // vmovdqu $-161(%rip), %xmm11 /* LCPI23_3(%rip) */
QUAD $0xffffff67256ffac5 // vmovdqu $-153(%rip), %xmm4 /* LCPI23_4(%rip) */
QUAD $0xffffff6f2d6ffac5 // vmovdqu $-145(%rip), %xmm5 /* LCPI23_5(%rip) */
QUAD $0xffffff77356ffac5 // vmovdqu $-137(%rip), %xmm6 /* LCPI23_6(%rip) */
JB LBB23_52
QUAD $0xffffff2b056f7ac5 // vmovdqu $-213(%rip), %xmm8 /* LCPI23_0(%rip) */
QUAD $0xffffff330d6f7ac5 // vmovdqu $-205(%rip), %xmm9 /* LCPI23_1(%rip) */
QUAD $0xffffff3b156f7ac5 // vmovdqu $-197(%rip), %xmm10 /* LCPI23_2(%rip) */
QUAD $0xffffff431d6f7ac5 // vmovdqu $-189(%rip), %xmm11 /* LCPI23_3(%rip) */
QUAD $0xffffff4b256ffac5 // vmovdqu $-181(%rip), %xmm4 /* LCPI23_4(%rip) */
QUAD $0xffffff532d6ffac5 // vmovdqu $-173(%rip), %xmm5 /* LCPI23_5(%rip) */
QUAD $0xffffff5b356ffac5 // vmovdqu $-165(%rip), %xmm6 /* LCPI23_6(%rip) */
MOVL $4294967295, R11
MOVQ $-1, R8
MOVQ $-1, R9
MOVQ DI, DX
LBB23_6:
LBB23_7:
LONG $0x3a6ffac5 // vmovdqu (%rdx), %xmm7
LONG $0x6441c1c4; BYTE $0xc0 // vpcmpgtb %xmm8, %xmm7, %xmm0
LONG $0xcf64b1c5 // vpcmpgtb %xmm7, %xmm9, %xmm1
@ -5443,7 +5449,7 @@ LBB23_6:
XORQ R11, CX
BSFQ CX, CX
CMPL CX, $16
JE LBB23_8
JE LBB23_9
MOVL $-1, BX
SHLL CX, BX
NOTL BX
@ -5452,7 +5458,7 @@ LBB23_6:
ANDL R14, BX
MOVL BX, R14
LBB23_8:
LBB23_9:
LEAL -1(AX), BX
ANDL AX, BX
JNE LBB23_46
@ -5463,7 +5469,7 @@ LBB23_8:
ANDL R14, BX
JNE LBB23_46
TESTL AX, AX
JE LBB23_14
JE LBB23_15
MOVQ DX, BX
SUBQ DI, BX
BSFL AX, AX
@ -5472,9 +5478,9 @@ LBB23_8:
JNE LBB23_47
MOVQ AX, R9
LBB23_14:
LBB23_15:
TESTL R15, R15
JE LBB23_17
JE LBB23_18
MOVQ DX, BX
SUBQ DI, BX
BSFL R15, AX
@ -5483,9 +5489,9 @@ LBB23_14:
JNE LBB23_47
MOVQ AX, R8
LBB23_17:
LBB23_18:
TESTL R14, R14
JE LBB23_20
JE LBB23_21
MOVQ DX, BX
SUBQ DI, BX
BSFL R14, AX
@ -5494,18 +5500,18 @@ LBB23_17:
JNE LBB23_47
MOVQ AX, R10
LBB23_20:
LBB23_21:
CMPL CX, $16
JNE LBB23_33
ADDQ $16, DX
ADDQ $-16, SI
CMPQ SI, $15
JA LBB23_6
LBB23_22:
LONG $0xfd358d48; WORD $0x0000; BYTE $0x00 // leaq $253(%rip), %rsi /* LJTI23_0(%rip) */
JA LBB23_7
LBB23_23:
LONG $0xfd358d48; WORD $0x0000; BYTE $0x00 // leaq $253(%rip), %rsi /* LJTI23_0(%rip) */
LBB23_24:
MOVQ DX, CX
MOVBLSX 0(DX), AX
ADDL $-43, AX
@ -5516,42 +5522,36 @@ LBB23_23:
ADDQ SI, AX
JMP AX
LBB23_25:
LBB23_26:
MOVQ DX, AX
SUBQ DI, AX
CMPQ R10, $-1
JNE LBB23_50
JNE LBB23_51
DECQ AX
MOVQ AX, R10
JMP LBB23_23
JMP LBB23_24
LBB23_27:
LBB23_28:
MOVQ DX, AX
SUBQ DI, AX
CMPQ R8, $-1
JNE LBB23_50
JNE LBB23_51
DECQ AX
MOVQ AX, R8
JMP LBB23_23
JMP LBB23_24
LBB23_29:
LBB23_30:
MOVQ DX, AX
SUBQ DI, AX
CMPQ R9, $-1
JNE LBB23_50
JNE LBB23_51
DECQ AX
MOVQ AX, R9
JMP LBB23_23
LBB23_31:
MOVQ $-1, AX
JMP LBB23_24
LBB23_32:
BYTE $0x5b // popq %rbx
WORD $0x5e41 // popq %r14
WORD $0x5f41 // popq %r15
BYTE $0x5d // popq %rbp
RET
MOVQ $-1, AX
JMP LBB23_48
LBB23_33:
ADDQ CX, DX
@ -5560,9 +5560,9 @@ LBB23_33:
LBB23_34:
MOVQ $-1, AX
TESTQ R10, R10
JE LBB23_32
JE LBB23_48
TESTQ R9, R9
JE LBB23_32
JE LBB23_48
TESTQ R10, R10
JLE LBB23_39
LEAQ -1(R10), AX
@ -5570,7 +5570,7 @@ LBB23_34:
JE LBB23_39
NOTQ R10
MOVQ R10, AX
JMP LBB23_32
JMP LBB23_48
LBB23_39:
MOVQ R9, AX
@ -5581,7 +5581,7 @@ LBB23_39:
JS LBB23_42
NOTQ R9
MOVQ R9, AX
JMP LBB23_32
JMP LBB23_48
LBB23_42:
LEAQ -1(R8), DX
@ -5591,12 +5591,12 @@ LBB23_42:
JS LBB23_45
NOTQ R8
MOVQ R8, AX
JMP LBB23_32
JMP LBB23_48
LBB23_45:
SUBQ DI, CX
MOVQ CX, AX
JMP LBB23_32
JMP LBB23_48
LBB23_46:
SUBQ DI, DX
@ -5605,83 +5605,89 @@ LBB23_46:
LBB23_47:
NOTQ AX
JMP LBB23_32
LBB23_50:
NEGQ AX
JMP LBB23_32
LBB23_48:
BYTE $0x5b // popq %rbx
WORD $0x5e41 // popq %r14
WORD $0x5f41 // popq %r15
BYTE $0x5d // popq %rbp
RET
LBB23_51:
NEGQ AX
JMP LBB23_48
LBB23_52:
MOVQ $-1, R8
MOVQ $-1, R9
MOVQ DI, DX
JMP LBB23_22
JMP LBB23_23
// .set L23_0_set_25, LBB23_25-LJTI23_0
// .set L23_0_set_26, LBB23_26-LJTI23_0
// .set L23_0_set_34, LBB23_34-LJTI23_0
// .set L23_0_set_29, LBB23_29-LJTI23_0
// .set L23_0_set_23, LBB23_23-LJTI23_0
// .set L23_0_set_27, LBB23_27-LJTI23_0
// .set L23_0_set_30, LBB23_30-LJTI23_0
// .set L23_0_set_24, LBB23_24-LJTI23_0
// .set L23_0_set_28, LBB23_28-LJTI23_0
LJTI23_0:
LONG $0xffffff1e // .long L23_0_set_25
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff1e // .long L23_0_set_25
LONG $0xffffff4e // .long L23_0_set_29
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff03 // .long L23_0_set_23
LONG $0xffffff03 // .long L23_0_set_23
LONG $0xffffff03 // .long L23_0_set_23
LONG $0xffffff03 // .long L23_0_set_23
LONG $0xffffff03 // .long L23_0_set_23
LONG $0xffffff03 // .long L23_0_set_23
LONG $0xffffff03 // .long L23_0_set_23
LONG $0xffffff03 // .long L23_0_set_23
LONG $0xffffff03 // .long L23_0_set_23
LONG $0xffffff03 // .long L23_0_set_23
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff36 // .long L23_0_set_27
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff7a // .long L23_0_set_34
LONG $0xffffff36 // .long L23_0_set_27
LONG $0xffffff1e // .long L23_0_set_26
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff1e // .long L23_0_set_26
LONG $0xffffff4e // .long L23_0_set_30
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff03 // .long L23_0_set_24
LONG $0xffffff03 // .long L23_0_set_24
LONG $0xffffff03 // .long L23_0_set_24
LONG $0xffffff03 // .long L23_0_set_24
LONG $0xffffff03 // .long L23_0_set_24
LONG $0xffffff03 // .long L23_0_set_24
LONG $0xffffff03 // .long L23_0_set_24
LONG $0xffffff03 // .long L23_0_set_24
LONG $0xffffff03 // .long L23_0_set_24
LONG $0xffffff03 // .long L23_0_set_24
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff36 // .long L23_0_set_28
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff75 // .long L23_0_set_34
LONG $0xffffff36 // .long L23_0_set_28
_skip_positive:
BYTE $0x55 // pushq %rbp
@ -5698,7 +5704,7 @@ _skip_positive:
MOVQ 8(DI), SI
SUBQ BX, SI
MOVQ AX, DI
LONG $0xfffc57e8; BYTE $0xff // callq _skip_number
LONG $0xfffc3be8; BYTE $0xff // callq _skip_number
LEAQ -1(AX), DX
MOVQ $-2, CX
MOVQ $-2, SI

View file

@ -316,7 +316,7 @@ LBB2_5:
LONG $0x4fdc6941; WORD $0x1293; BYTE $0x00 // imull $1217359, %r12d, %ebx
MOVQ R12, AX
SHLQ $4, AX
LONG $0x390d8d48; WORD $0x007b; BYTE $0x00 // leaq $31545(%rip), %rcx /* _DOUBLE_POW5_INV_SPLIT(%rip) */
LONG $0x4f0d8d48; WORD $0x007b; BYTE $0x00 // leaq $31567(%rip), %rcx /* _DOUBLE_POW5_INV_SPLIT(%rip) */
MOVQ R8, DI
ORQ $2, DI
MOVQ 0(AX)(CX*1), R10
@ -403,7 +403,7 @@ LBB2_12:
SHRL $19, BX
MOVLQSX AX, SI
SHLQ $4, SI
LONG $0x640d8d4c; WORD $0x008f; BYTE $0x00 // leaq $36708(%rip), %r9 /* _DOUBLE_POW5_SPLIT(%rip) */
LONG $0x7a0d8d4c; WORD $0x008f; BYTE $0x00 // leaq $36730(%rip), %r9 /* _DOUBLE_POW5_SPLIT(%rip) */
MOVQ R8, DI
ORQ $2, DI
MOVQ 0(SI)(R9*1), R15
@ -807,7 +807,7 @@ LBB2_60:
LEAQ 1(R13), BX
MOVQ BX, SI
MOVL R15, DX
LONG $0x004446e8; BYTE $0x00 // callq _print_mantissa
LONG $0x00445ce8; BYTE $0x00 // callq _print_mantissa
MOVB 1(R13), AX
MOVB AX, 0(R13)
MOVL $1, CX
@ -836,7 +836,7 @@ LBB2_65:
LEAL 0(DX)(DX*1), CX
LEAL 0(CX)(CX*4), CX
SUBL CX, AX
LONG $0x470d8d48; WORD $0x009e; BYTE $0x00 // leaq $40519(%rip), %rcx /* _Digits(%rip) */
LONG $0x5d0d8d48; WORD $0x009e; BYTE $0x00 // leaq $40541(%rip), %rcx /* _Digits(%rip) */
MOVWLZX 0(CX)(DX*2), CX
MOVL BX, DX
MOVW CX, 0(R13)(DX*1)
@ -859,7 +859,7 @@ LBB2_68:
MOVL BX, SI
ADDQ -56(BP), SI
MOVL R15, DX
LONG $0x0043a2e8; BYTE $0x00 // callq _print_mantissa
LONG $0x0043b8e8; BYTE $0x00 // callq _print_mantissa
TESTL R13, R13
JE LBB2_79
LEAL 0(R13)(BX*1), AX
@ -891,7 +891,7 @@ LBB2_73:
CMPL AX, $10
JL LBB2_81
WORD $0x9848 // cltq
LONG $0x9a0d8d48; WORD $0x009d; BYTE $0x00 // leaq $40346(%rip), %rcx /* _Digits(%rip) */
LONG $0xb00d8d48; WORD $0x009d; BYTE $0x00 // leaq $40368(%rip), %rcx /* _Digits(%rip) */
MOVWLZX 0(CX)(AX*2), AX
MOVL BX, CX
MOVW AX, 0(R13)(CX*1)
@ -1093,7 +1093,7 @@ LBB2_104:
MOVQ R13, SI
MOVL R15, DX
WORD $0xf8c5; BYTE $0x77 // vzeroupper
LONG $0x004021e8; BYTE $0x00 // callq _print_mantissa
LONG $0x004037e8; BYTE $0x00 // callq _print_mantissa
ADDL BX, R15
MOVL R15, BX
@ -1186,7 +1186,7 @@ _u64toa:
ADDQ AX, AX
CMPL SI, $1000
JB LBB4_3
LONG $0x920d8d48; WORD $0x0099; BYTE $0x00 // leaq $39314(%rip), %rcx /* _Digits(%rip) */
LONG $0xa80d8d48; WORD $0x0099; BYTE $0x00 // leaq $39336(%rip), %rcx /* _Digits(%rip) */
MOVB 0(DX)(CX*1), CX
MOVB CX, 0(DI)
MOVL $1, CX
@ -1200,14 +1200,14 @@ LBB4_3:
LBB4_4:
MOVWLZX DX, DX
ORQ $1, DX
LONG $0x71358d48; WORD $0x0099; BYTE $0x00 // leaq $39281(%rip), %rsi /* _Digits(%rip) */
LONG $0x87358d48; WORD $0x0099; BYTE $0x00 // leaq $39303(%rip), %rsi /* _Digits(%rip) */
MOVB 0(DX)(SI*1), DX
MOVL CX, SI
INCL CX
MOVB DX, 0(DI)(SI*1)
LBB4_6:
LONG $0x60158d48; WORD $0x0099; BYTE $0x00 // leaq $39264(%rip), %rdx /* _Digits(%rip) */
LONG $0x76158d48; WORD $0x0099; BYTE $0x00 // leaq $39286(%rip), %rdx /* _Digits(%rip) */
MOVB 0(AX)(DX*1), DX
MOVL CX, SI
INCL CX
@ -1216,7 +1216,7 @@ LBB4_6:
LBB4_7:
MOVWLZX AX, AX
ORQ $1, AX
LONG $0x48158d48; WORD $0x0099; BYTE $0x00 // leaq $39240(%rip), %rdx /* _Digits(%rip) */
LONG $0x5e158d48; WORD $0x0099; BYTE $0x00 // leaq $39262(%rip), %rdx /* _Digits(%rip) */
MOVB 0(AX)(DX*1), AX
MOVL CX, DX
INCL CX
@ -1263,7 +1263,7 @@ LBB4_8:
ADDQ R11, R11
CMPL SI, $10000000
JB LBB4_11
LONG $0xb1058d48; WORD $0x0098; BYTE $0x00 // leaq $39089(%rip), %rax /* _Digits(%rip) */
LONG $0xc7058d48; WORD $0x0098; BYTE $0x00 // leaq $39111(%rip), %rax /* _Digits(%rip) */
MOVB 0(R10)(AX*1), AX
MOVB AX, 0(DI)
MOVL $1, CX
@ -1277,14 +1277,14 @@ LBB4_11:
LBB4_12:
MOVL R10, AX
ORQ $1, AX
LONG $0x8c358d48; WORD $0x0098; BYTE $0x00 // leaq $39052(%rip), %rsi /* _Digits(%rip) */
LONG $0xa2358d48; WORD $0x0098; BYTE $0x00 // leaq $39074(%rip), %rsi /* _Digits(%rip) */
MOVB 0(AX)(SI*1), AX
MOVL CX, SI
INCL CX
MOVB AX, 0(DI)(SI*1)
LBB4_14:
LONG $0x7b058d48; WORD $0x0098; BYTE $0x00 // leaq $39035(%rip), %rax /* _Digits(%rip) */
LONG $0x91058d48; WORD $0x0098; BYTE $0x00 // leaq $39057(%rip), %rax /* _Digits(%rip) */
MOVB 0(R9)(AX*1), AX
MOVL CX, SI
INCL CX
@ -1293,7 +1293,7 @@ LBB4_14:
LBB4_15:
MOVWLZX R9, AX
ORQ $1, AX
LONG $0x61358d48; WORD $0x0098; BYTE $0x00 // leaq $39009(%rip), %rsi /* _Digits(%rip) */
LONG $0x77358d48; WORD $0x0098; BYTE $0x00 // leaq $39031(%rip), %rsi /* _Digits(%rip) */
MOVB 0(AX)(SI*1), AX
MOVL CX, DX
MOVB AX, 0(DI)(DX*1)
@ -1375,7 +1375,7 @@ LBB4_16:
MOVL $16, CX
SUBL AX, CX
SHLQ $4, AX
LONG $0xd4158d48; WORD $0x0097; BYTE $0x00 // leaq $38868(%rip), %rdx /* _VecShiftShuffles(%rip) */
LONG $0xea158d48; WORD $0x0097; BYTE $0x00 // leaq $38890(%rip), %rdx /* _VecShiftShuffles(%rip) */
LONG $0x0071e2c4; WORD $0x1004 // vpshufb (%rax,%rdx), %xmm1, %xmm0
LONG $0x077ffac5 // vmovdqu %xmm0, (%rdi)
MOVL CX, AX
@ -1401,7 +1401,7 @@ LBB4_20:
CMPL DX, $99
JA LBB4_22
MOVL DX, AX
LONG $0xb70d8d48; WORD $0x0096; BYTE $0x00 // leaq $38583(%rip), %rcx /* _Digits(%rip) */
LONG $0xcd0d8d48; WORD $0x0096; BYTE $0x00 // leaq $38605(%rip), %rcx /* _Digits(%rip) */
MOVB 0(CX)(AX*2), DX
MOVB 1(CX)(AX*2), AX
MOVB DX, 0(DI)
@ -1426,7 +1426,7 @@ LBB4_22:
WORD $0xc96b; BYTE $0x64 // imull $100, %ecx, %ecx
SUBL CX, AX
MOVWLZX AX, AX
LONG $0x660d8d48; WORD $0x0096; BYTE $0x00 // leaq $38502(%rip), %rcx /* _Digits(%rip) */
LONG $0x7c0d8d48; WORD $0x0096; BYTE $0x00 // leaq $38524(%rip), %rcx /* _Digits(%rip) */
MOVB 0(CX)(AX*2), DX
MOVB 1(CX)(AX*2), AX
MOVB DX, 1(DI)
@ -1438,7 +1438,7 @@ LBB4_24:
WORD $0xc86b; BYTE $0x64 // imull $100, %eax, %ecx
SUBL CX, DX
MOVWLZX AX, AX
LONG $0x43058d4c; WORD $0x0096; BYTE $0x00 // leaq $38467(%rip), %r8 /* _Digits(%rip) */
LONG $0x59058d4c; WORD $0x0096; BYTE $0x00 // leaq $38489(%rip), %r8 /* _Digits(%rip) */
MOVB 0(R8)(AX*2), CX
MOVB 1(R8)(AX*2), AX
MOVB CX, 0(DI)
@ -1536,8 +1536,8 @@ _quote:
MOVQ CX, R14
MOVQ DI, R12
TESTB $1, R8
LONG $0xe0058d48; WORD $0x0095; BYTE $0x00 // leaq $38368(%rip), %rax /* __SingleQuoteTab(%rip) */
LONG $0xd9158d4c; WORD $0x00a5; BYTE $0x00 // leaq $42457(%rip), %r10 /* __DoubleQuoteTab(%rip) */
LONG $0xf6058d48; WORD $0x0095; BYTE $0x00 // leaq $38390(%rip), %rax /* __SingleQuoteTab(%rip) */
LONG $0xef158d4c; WORD $0x00a5; BYTE $0x00 // leaq $42479(%rip), %r10 /* __DoubleQuoteTab(%rip) */
LONG $0xd0440f4c // cmoveq %rax, %r10
MOVQ DX, R8
MOVQ DI, AX
@ -1762,7 +1762,7 @@ LBB5_26:
LBB5_27:
TESTQ CX, CX
MOVQ BX, R14
LONG $0x7f0d8d4c; WORD $0x0092; BYTE $0x00 // leaq $37503(%rip), %r9 /* __SingleQuoteTab(%rip) */
LONG $0x950d8d4c; WORD $0x0092; BYTE $0x00 // leaq $37525(%rip), %r9 /* __SingleQuoteTab(%rip) */
JLE LBB5_60
MOVQ SI, DX
TESTQ SI, SI
@ -2134,7 +2134,7 @@ _unquote:
MOVQ R8, AX
MOVQ R8, -64(BP)
ANDL $1, R8
LONG $0xa90d8d4c; WORD $0x00ae; BYTE $0x00 // leaq $44713(%rip), %r9 /* __UnquoteTab(%rip) */
LONG $0xbf0d8d4c; WORD $0x00ae; BYTE $0x00 // leaq $44735(%rip), %r9 /* __UnquoteTab(%rip) */
QUAD $0xffffff9c0d6ffec5 // vmovdqu $-100(%rip), %ymm1 /* LCPI6_0(%rip) */
QUAD $0xffffffb4156ffac5 // vmovdqu $-76(%rip), %xmm2 /* LCPI6_1(%rip) */
MOVQ DI, AX
@ -2925,14 +2925,14 @@ _atof_eisel_lemire64:
MOVQ CX, R14
MOVL DX, R15
MOVQ DI, R13
LONG $0x002a6be8; BYTE $0x00 // callq _count_len_u64
LONG $0x002a81e8; BYTE $0x00 // callq _count_len_u64
MOVL AX, R8
MOVL AX, CX
NEGL CX
SHLQ CX, R13
MOVL BX, CX
SHLQ $4, CX
LONG $0xb0158d4c; WORD $0x002d; BYTE $0x00 // leaq $11696(%rip), %r10 /* _POW10_M128_TAB(%rip) */
LONG $0xc6158d4c; WORD $0x002d; BYTE $0x00 // leaq $11718(%rip), %r10 /* _POW10_M128_TAB(%rip) */
MOVQ R13, AX
MULQ 8(CX)(R10*1)
MOVQ AX, R9
@ -3069,7 +3069,7 @@ LBB8_5:
MOVQ BX, -48(BP)
JLE LBB8_12
XORL R12, R12
LONG $0x8d358d4c; WORD $0x0057; BYTE $0x00 // leaq $22413(%rip), %r14 /* _POW_TAB(%rip) */
LONG $0xa3358d4c; WORD $0x0057; BYTE $0x00 // leaq $22435(%rip), %r14 /* _POW_TAB(%rip) */
JMP LBB8_8
LBB8_10:
@ -3081,7 +3081,7 @@ LBB8_10:
LBB8_11:
MOVQ R15, DI
MOVL BX, SI
LONG $0x002a4ce8; BYTE $0x00 // callq _right_shift
LONG $0x002a62e8; BYTE $0x00 // callq _right_shift
LBB8_7:
ADDL BX, R12
@ -3098,7 +3098,7 @@ LBB8_8:
JMP LBB8_7
LBB8_12:
LONG $0x46358d4c; WORD $0x0057; BYTE $0x00 // leaq $22342(%rip), %r14 /* _POW_TAB(%rip) */
LONG $0x5c358d4c; WORD $0x0057; BYTE $0x00 // leaq $22364(%rip), %r14 /* _POW_TAB(%rip) */
JMP LBB8_14
LBB8_18:
@ -3109,7 +3109,7 @@ LBB8_18:
LBB8_20:
MOVQ R15, DI
MOVL BX, SI
LONG $0x00289fe8; BYTE $0x00 // callq _left_shift
LONG $0x0028b5e8; BYTE $0x00 // callq _left_shift
MOVL 804(R15), AX
LBB8_13:
@ -3149,7 +3149,7 @@ LBB8_21:
LBB8_25:
MOVQ R15, DI
MOVL $60, SI
LONG $0x00299ee8; BYTE $0x00 // callq _right_shift
LONG $0x0029b4e8; BYTE $0x00 // callq _right_shift
ADDL $60, R12
CMPL R12, $-120
JL LBB8_25
@ -3175,7 +3175,7 @@ LBB8_31:
NEGL R12
MOVQ R15, DI
MOVL R12, SI
LONG $0x002958e8; BYTE $0x00 // callq _right_shift
LONG $0x00296ee8; BYTE $0x00 // callq _right_shift
MOVL $-1022, R14
LBB8_32:
@ -3183,7 +3183,7 @@ LBB8_32:
JE LBB8_34
MOVQ R15, DI
MOVL $53, SI
LONG $0x0027d4e8; BYTE $0x00 // callq _left_shift
LONG $0x0027eae8; BYTE $0x00 // callq _left_shift
LBB8_34:
MOVL 804(R15), AX
@ -4830,7 +4830,7 @@ LBB14_63:
CMPL BX, $23
JL LBB14_72
LEAL -22(BX), AX
LONG $0x4a0d8d48; WORD $0x014f; BYTE $0x00 // leaq $85834(%rip), %rcx /* _P10_TAB(%rip) */
LONG $0x600d8d48; WORD $0x014f; BYTE $0x00 // leaq $85856(%rip), %rcx /* _P10_TAB(%rip) */
LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0
LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp)
MOVL $22, AX
@ -4846,7 +4846,7 @@ LBB14_69:
CMPL BX, $-22
JB LBB14_76
NEGL BX
LONG $0x12058d48; WORD $0x014f; BYTE $0x00 // leaq $85778(%rip), %rax /* _P10_TAB(%rip) */
LONG $0x28058d48; WORD $0x014f; BYTE $0x00 // leaq $85800(%rip), %rax /* _P10_TAB(%rip) */
LONG $0x045efbc5; BYTE $0xd8 // vdivsd (%rax,%rbx,8), %xmm0, %xmm0
LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp)
JMP LBB14_82
@ -4875,7 +4875,7 @@ LBB14_73:
LONG $0xc82ef9c5 // vucomisd %xmm0, %xmm1
JA LBB14_76
MOVL AX, AX
LONG $0xa50d8d48; WORD $0x014e; BYTE $0x00 // leaq $85669(%rip), %rcx /* _P10_TAB(%rip) */
LONG $0xbb0d8d48; WORD $0x014e; BYTE $0x00 // leaq $85691(%rip), %rcx /* _P10_TAB(%rip) */
LONG $0x0459fbc5; BYTE $0xc1 // vmulsd (%rcx,%rax,8), %xmm0, %xmm0
LONG $0x4511fbc5; BYTE $0xc8 // vmovsd %xmm0, $-56(%rbp)
JMP LBB14_82
@ -5896,37 +5896,43 @@ LCPI23_13:
QUAD $0x4545454545454545; QUAD $0x4545454545454545 // .space 16, 'EEEEEEEEEEEEEEEE'
_skip_number:
BYTE $0x55 // pushq %rbp
WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp
WORD $0x5741 // pushq %r15
WORD $0x5641 // pushq %r14
BYTE $0x53 // pushq %rbx
TESTQ SI, SI
JE LBB23_49
CMPB 0(DI), $48
JNE LBB23_4
MOVL $1, AX
CMPQ SI, $1
JE LBB23_50
CMPB 1(DI), $46
JNE LBB23_50
BYTE $0x55 // pushq %rbp
WORD $0x8948; BYTE $0xe5 // movq %rsp, %rbp
WORD $0x5741 // pushq %r15
WORD $0x5641 // pushq %r14
BYTE $0x53 // pushq %rbx
TESTQ SI, SI
JE LBB23_50
CMPB 0(DI), $48
JNE LBB23_5
MOVL $1, AX
CMPQ SI, $1
JE LBB23_69
MOVB 1(DI), CX
ADDB $-46, CX
CMPB CX, $55
JA LBB23_69
MOVBLZX CX, CX
MOVQ $36028797027352577, DX
BTQ CX, DX
JAE LBB23_69
LBB23_4:
LBB23_5:
MOVQ $-1, R10
CMPQ SI, $32
JB LBB23_69
QUAD $0xfffffe67056ffec5 // vmovdqu $-409(%rip), %ymm0 /* LCPI23_0(%rip) */
QUAD $0xfffffe7f0d6ffec5 // vmovdqu $-385(%rip), %ymm1 /* LCPI23_1(%rip) */
QUAD $0xfffffe97156ffec5 // vmovdqu $-361(%rip), %ymm2 /* LCPI23_2(%rip) */
QUAD $0xfffffeaf1d6ffec5 // vmovdqu $-337(%rip), %ymm3 /* LCPI23_3(%rip) */
QUAD $0xfffffec7256ffec5 // vmovdqu $-313(%rip), %ymm4 /* LCPI23_4(%rip) */
QUAD $0xfffffedf2d6ffec5 // vmovdqu $-289(%rip), %ymm5 /* LCPI23_5(%rip) */
QUAD $0xfffffef7356ffec5 // vmovdqu $-265(%rip), %ymm6 /* LCPI23_6(%rip) */
JB LBB23_73
QUAD $0xfffffe4b056ffec5 // vmovdqu $-437(%rip), %ymm0 /* LCPI23_0(%rip) */
QUAD $0xfffffe630d6ffec5 // vmovdqu $-413(%rip), %ymm1 /* LCPI23_1(%rip) */
QUAD $0xfffffe7b156ffec5 // vmovdqu $-389(%rip), %ymm2 /* LCPI23_2(%rip) */
QUAD $0xfffffe931d6ffec5 // vmovdqu $-365(%rip), %ymm3 /* LCPI23_3(%rip) */
QUAD $0xfffffeab256ffec5 // vmovdqu $-341(%rip), %ymm4 /* LCPI23_4(%rip) */
QUAD $0xfffffec32d6ffec5 // vmovdqu $-317(%rip), %ymm5 /* LCPI23_5(%rip) */
QUAD $0xfffffedb356ffec5 // vmovdqu $-293(%rip), %ymm6 /* LCPI23_6(%rip) */
MOVQ $-1, R8
MOVQ $-1, R9
MOVQ DI, R14
LBB23_6:
LBB23_7:
LONG $0x6f7ec1c4; BYTE $0x3e // vmovdqu (%r14), %ymm7
LONG $0xc06445c5 // vpcmpgtb %ymm0, %ymm7, %ymm8
LONG $0xcf6475c5 // vpcmpgtb %ymm7, %ymm1, %ymm9
@ -5947,7 +5953,7 @@ LBB23_6:
NOTQ CX
BSFQ CX, CX
CMPL CX, $32
JE LBB23_8
JE LBB23_9
MOVL $-1, DX
SHLL CX, DX
NOTL DX
@ -5956,7 +5962,7 @@ LBB23_6:
ANDL R11, DX
MOVL DX, R11
LBB23_8:
LBB23_9:
LEAL -1(AX), DX
ANDL AX, DX
JNE LBB23_66
@ -5967,59 +5973,59 @@ LBB23_8:
ANDL R11, DX
JNE LBB23_66
TESTL AX, AX
JE LBB23_14
JE LBB23_15
MOVQ R14, DX
SUBQ DI, DX
BSFL AX, AX
ADDQ DX, AX
CMPQ R9, $-1
JNE LBB23_67
JNE LBB23_68
MOVQ AX, R9
LBB23_14:
LBB23_15:
TESTL BX, BX
JE LBB23_17
JE LBB23_18
MOVQ R14, DX
SUBQ DI, DX
BSFL BX, AX
ADDQ DX, AX
CMPQ R8, $-1
JNE LBB23_67
JNE LBB23_68
MOVQ AX, R8
LBB23_17:
LBB23_18:
TESTL R11, R11
JE LBB23_20
JE LBB23_21
MOVQ R14, DX
SUBQ DI, DX
BSFL R11, AX
ADDQ DX, AX
CMPQ R10, $-1
JNE LBB23_67
JNE LBB23_68
MOVQ AX, R10
LBB23_20:
LBB23_21:
CMPL CX, $32
JNE LBB23_51
ADDQ $32, R14
ADDQ $-32, SI
CMPQ SI, $31
JA LBB23_6
JA LBB23_7
WORD $0xf8c5; BYTE $0x77 // vzeroupper
CMPQ SI, $16
JB LBB23_40
LBB23_23:
QUAD $0xfffffdf1056f7ac5 // vmovdqu $-527(%rip), %xmm8 /* LCPI23_7(%rip) */
QUAD $0xfffffdf90d6f7ac5 // vmovdqu $-519(%rip), %xmm9 /* LCPI23_8(%rip) */
QUAD $0xfffffe01156f7ac5 // vmovdqu $-511(%rip), %xmm10 /* LCPI23_9(%rip) */
QUAD $0xfffffe091d6f7ac5 // vmovdqu $-503(%rip), %xmm11 /* LCPI23_10(%rip) */
QUAD $0xfffffe11256ffac5 // vmovdqu $-495(%rip), %xmm4 /* LCPI23_11(%rip) */
QUAD $0xfffffe192d6ffac5 // vmovdqu $-487(%rip), %xmm5 /* LCPI23_12(%rip) */
QUAD $0xfffffe21356ffac5 // vmovdqu $-479(%rip), %xmm6 /* LCPI23_13(%rip) */
MOVL $4294967295, R11
JB LBB23_41
LBB23_24:
QUAD $0xfffffdd5056f7ac5 // vmovdqu $-555(%rip), %xmm8 /* LCPI23_7(%rip) */
QUAD $0xfffffddd0d6f7ac5 // vmovdqu $-547(%rip), %xmm9 /* LCPI23_8(%rip) */
QUAD $0xfffffde5156f7ac5 // vmovdqu $-539(%rip), %xmm10 /* LCPI23_9(%rip) */
QUAD $0xfffffded1d6f7ac5 // vmovdqu $-531(%rip), %xmm11 /* LCPI23_10(%rip) */
QUAD $0xfffffdf5256ffac5 // vmovdqu $-523(%rip), %xmm4 /* LCPI23_11(%rip) */
QUAD $0xfffffdfd2d6ffac5 // vmovdqu $-515(%rip), %xmm5 /* LCPI23_12(%rip) */
QUAD $0xfffffe05356ffac5 // vmovdqu $-507(%rip), %xmm6 /* LCPI23_13(%rip) */
MOVL $4294967295, R11
LBB23_25:
LONG $0x6f7ac1c4; BYTE $0x3e // vmovdqu (%r14), %xmm7
LONG $0x6441c1c4; BYTE $0xc0 // vpcmpgtb %xmm8, %xmm7, %xmm0
LONG $0xcf64b1c5 // vpcmpgtb %xmm7, %xmm9, %xmm1
@ -6040,7 +6046,7 @@ LBB23_24:
XORQ R11, CX
BSFQ CX, CX
CMPL CX, $16
JE LBB23_26
JE LBB23_27
MOVL $-1, DX
SHLL CX, DX
NOTL DX
@ -6049,7 +6055,7 @@ LBB23_24:
ANDL R15, DX
MOVL DX, R15
LBB23_26:
LBB23_27:
LEAL -1(AX), DX
ANDL AX, DX
JNE LBB23_66
@ -6060,49 +6066,49 @@ LBB23_26:
ANDL R15, DX
JNE LBB23_66
TESTL AX, AX
JE LBB23_32
JE LBB23_33
MOVQ R14, DX
SUBQ DI, DX
BSFL AX, AX
ADDQ DX, AX
CMPQ R9, $-1
JNE LBB23_67
JNE LBB23_68
MOVQ AX, R9
LBB23_32:
LBB23_33:
TESTL BX, BX
JE LBB23_35
JE LBB23_36
MOVQ R14, DX
SUBQ DI, DX
BSFL BX, AX
ADDQ DX, AX
CMPQ R8, $-1
JNE LBB23_67
JNE LBB23_68
MOVQ AX, R8
LBB23_35:
LBB23_36:
TESTL R15, R15
JE LBB23_38
JE LBB23_39
MOVQ R14, DX
SUBQ DI, DX
BSFL R15, AX
ADDQ DX, AX
CMPQ R10, $-1
JNE LBB23_67
JNE LBB23_68
MOVQ AX, R10
LBB23_38:
LBB23_39:
CMPL CX, $16
JNE LBB23_52
ADDQ $16, R14
ADDQ $-16, SI
CMPQ SI, $15
JA LBB23_24
LBB23_40:
LONG $0x19158d48; WORD $0x0001; BYTE $0x00 // leaq $281(%rip), %rdx /* LJTI23_0(%rip) */
JA LBB23_25
LBB23_41:
LONG $0x13158d48; WORD $0x0001; BYTE $0x00 // leaq $275(%rip), %rdx /* LJTI23_0(%rip) */
LBB23_42:
MOVQ R14, CX
MOVBLSX 0(R14), AX
ADDL $-43, AX
@ -6113,43 +6119,36 @@ LBB23_41:
ADDQ DX, AX
JMP AX
LBB23_43:
LBB23_44:
MOVQ R14, AX
SUBQ DI, AX
CMPQ R10, $-1
JNE LBB23_68
JNE LBB23_72
DECQ AX
MOVQ AX, R10
JMP LBB23_41
JMP LBB23_42
LBB23_45:
LBB23_46:
MOVQ R14, AX
SUBQ DI, AX
CMPQ R8, $-1
JNE LBB23_68
JNE LBB23_72
DECQ AX
MOVQ AX, R8
JMP LBB23_41
JMP LBB23_42
LBB23_47:
LBB23_48:
MOVQ R14, AX
SUBQ DI, AX
CMPQ R9, $-1
JNE LBB23_68
JNE LBB23_72
DECQ AX
MOVQ AX, R9
JMP LBB23_41
LBB23_49:
MOVQ $-1, AX
JMP LBB23_42
LBB23_50:
BYTE $0x5b // popq %rbx
WORD $0x5e41 // popq %r14
WORD $0x5f41 // popq %r15
BYTE $0x5d // popq %rbp
WORD $0xf8c5; BYTE $0x77 // vzeroupper
RET
MOVQ $-1, AX
JMP LBB23_69
LBB23_51:
ADDQ CX, R14
@ -6165,9 +6164,9 @@ LBB23_53:
LBB23_54:
MOVQ $-1, AX
TESTQ R10, R10
JE LBB23_50
JE LBB23_69
TESTQ R9, R9
JE LBB23_50
JE LBB23_69
TESTQ R10, R10
JLE LBB23_59
LEAQ -1(R10), AX
@ -6175,7 +6174,7 @@ LBB23_54:
JE LBB23_59
NOTQ R10
MOVQ R10, AX
JMP LBB23_50
JMP LBB23_69
LBB23_59:
MOVQ R9, AX
@ -6186,7 +6185,7 @@ LBB23_59:
JS LBB23_62
NOTQ R9
MOVQ R9, AX
JMP LBB23_50
JMP LBB23_69
LBB23_62:
LEAQ -1(R8), DX
@ -6196,99 +6195,106 @@ LBB23_62:
JS LBB23_65
NOTQ R8
MOVQ R8, AX
JMP LBB23_50
JMP LBB23_69
LBB23_65:
SUBQ DI, CX
MOVQ CX, AX
JMP LBB23_50
JMP LBB23_69
LBB23_66:
SUBQ DI, R14
BSFL DX, AX
ADDQ R14, AX
LBB23_67:
NOTQ AX
JMP LBB23_50
LBB23_68:
NEGQ AX
JMP LBB23_50
NOTQ AX
LBB23_69:
BYTE $0x5b // popq %rbx
WORD $0x5e41 // popq %r14
WORD $0x5f41 // popq %r15
BYTE $0x5d // popq %rbp
WORD $0xf8c5; BYTE $0x77 // vzeroupper
RET
LBB23_72:
NEGQ AX
JMP LBB23_69
LBB23_73:
MOVQ $-1, R8
MOVQ $-1, R9
MOVQ DI, R14
CMPQ SI, $16
JAE LBB23_23
JMP LBB23_40
JAE LBB23_24
JMP LBB23_41
// .set L23_0_set_43, LBB23_43-LJTI23_0
// .set L23_0_set_44, LBB23_44-LJTI23_0
// .set L23_0_set_54, LBB23_54-LJTI23_0
// .set L23_0_set_47, LBB23_47-LJTI23_0
// .set L23_0_set_41, LBB23_41-LJTI23_0
// .set L23_0_set_45, LBB23_45-LJTI23_0
// .set L23_0_set_48, LBB23_48-LJTI23_0
// .set L23_0_set_42, LBB23_42-LJTI23_0
// .set L23_0_set_46, LBB23_46-LJTI23_0
LJTI23_0:
LONG $0xffffff03 // .long L23_0_set_43
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff03 // .long L23_0_set_43
LONG $0xffffff33 // .long L23_0_set_47
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xfffffee7 // .long L23_0_set_41
LONG $0xfffffee7 // .long L23_0_set_41
LONG $0xfffffee7 // .long L23_0_set_41
LONG $0xfffffee7 // .long L23_0_set_41
LONG $0xfffffee7 // .long L23_0_set_41
LONG $0xfffffee7 // .long L23_0_set_41
LONG $0xfffffee7 // .long L23_0_set_41
LONG $0xfffffee7 // .long L23_0_set_41
LONG $0xfffffee7 // .long L23_0_set_41
LONG $0xfffffee7 // .long L23_0_set_41
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff1b // .long L23_0_set_45
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff6a // .long L23_0_set_54
LONG $0xffffff1b // .long L23_0_set_45
LONG $0xffffff09 // .long L23_0_set_44
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff09 // .long L23_0_set_44
LONG $0xffffff39 // .long L23_0_set_48
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xfffffeed // .long L23_0_set_42
LONG $0xfffffeed // .long L23_0_set_42
LONG $0xfffffeed // .long L23_0_set_42
LONG $0xfffffeed // .long L23_0_set_42
LONG $0xfffffeed // .long L23_0_set_42
LONG $0xfffffeed // .long L23_0_set_42
LONG $0xfffffeed // .long L23_0_set_42
LONG $0xfffffeed // .long L23_0_set_42
LONG $0xfffffeed // .long L23_0_set_42
LONG $0xfffffeed // .long L23_0_set_42
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff21 // .long L23_0_set_46
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff68 // .long L23_0_set_54
LONG $0xffffff21 // .long L23_0_set_46
_skip_positive:
BYTE $0x55 // pushq %rbp
@ -6303,7 +6309,7 @@ _skip_positive:
MOVQ 8(DI), SI
SUBQ BX, SI
MOVQ AX, DI
LONG $0xfffafee8; BYTE $0xff // callq _skip_number
LONG $0xfffae8e8; BYTE $0xff // callq _skip_number
TESTQ AX, AX
JS LBB24_1
MOVQ 0(R14), CX

View file

@ -0,0 +1,34 @@
/*
* 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.
*/
package issue_test
import (
`testing`
. `github.com/bytedance/sonic`
`github.com/stretchr/testify/require`
)
type Issue108_SkipNumberTest struct {
}
func TestIssue108_SkipExponentWithZeroBase(t *testing.T) {
var obj Issue108_SkipNumberTest
err := Unmarshal([]byte(`{"X":0e0}`), &obj)
require.NoError(t, err)
}

View file

@ -873,7 +873,7 @@ static inline long skip_number(const char *sp, size_t nb) {
}
/* special case of '0' */
if (*sp == '0' && (nb == 1 || sp[1] != '.')) {
if (*sp == '0' && (nb == 1 || (sp[1] != '.' && sp[1] != 'e' && sp[1] != 'E'))) {
return 1;
}