RyuDouble.smali
.class public final Lcom/alibaba/fastjson/util/RyuDouble;
.super Ljava/lang/Object;
.source "RyuDouble.java"
# static fields
.field private static final POW5_INV_SPLIT:[[I
.field private static final POW5_SPLIT:[[I
# direct methods
.method static constructor <clinit>()V
.registers 13
.line 23
const-class v0, I
const/4 v1, 0x2
new-array v2, v1, [I
fill-array-data v2, :array_e8
invoke-static {v0, v2}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
move-result-object v2
check-cast v2, [[I
sput-object v2, Lcom/alibaba/fastjson/util/RyuDouble;->POW5_SPLIT:[[I
new-array v1, v1, [I
.line 24
fill-array-data v1, :array_f0
invoke-static {v0, v1}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
move-result-object v0
check-cast v0, [[I
sput-object v0, Lcom/alibaba/fastjson/util/RyuDouble;->POW5_INV_SPLIT:[[I
.line 27
sget-object v0, Ljava/math/BigInteger;->ONE:Ljava/math/BigInteger;
const/16 v1, 0x1f
invoke-virtual {v0, v1}, Ljava/math/BigInteger;->shiftLeft(I)Ljava/math/BigInteger;
move-result-object v0
sget-object v2, Ljava/math/BigInteger;->ONE:Ljava/math/BigInteger;
invoke-virtual {v0, v2}, Ljava/math/BigInteger;->subtract(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v0
.line 28
sget-object v2, Ljava/math/BigInteger;->ONE:Ljava/math/BigInteger;
invoke-virtual {v2, v1}, Ljava/math/BigInteger;->shiftLeft(I)Ljava/math/BigInteger;
move-result-object v2
sget-object v3, Ljava/math/BigInteger;->ONE:Ljava/math/BigInteger;
invoke-virtual {v2, v3}, Ljava/math/BigInteger;->subtract(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v2
const/4 v3, 0x0
move v4, v3
:goto_39
const/16 v5, 0x146
if-ge v4, v5, :cond_e7
const-wide/16 v5, 0x5
.line 30
invoke-static {v5, v6}, Ljava/math/BigInteger;->valueOf(J)Ljava/math/BigInteger;
move-result-object v5
invoke-virtual {v5, v4}, Ljava/math/BigInteger;->pow(I)Ljava/math/BigInteger;
move-result-object v5
.line 31
invoke-virtual {v5}, Ljava/math/BigInteger;->bitLength()I
move-result v6
if-nez v4, :cond_4f
const/4 v7, 0x1
goto :goto_5d
:cond_4f
int-to-long v7, v4
const-wide/32 v9, 0x1624c50
mul-long/2addr v7, v9
const-wide/32 v9, 0x989680
add-long/2addr v7, v9
const-wide/16 v11, 0x1
sub-long/2addr v7, v11
.line 32
div-long/2addr v7, v9
long-to-int v7, v7
:goto_5d
if-ne v7, v6, :cond_cd
.line 36
sget-object v7, Lcom/alibaba/fastjson/util/RyuDouble;->POW5_SPLIT:[[I
array-length v7, v7
const/4 v8, 0x4
if-ge v4, v7, :cond_83
move v7, v3
:goto_66
if-ge v7, v8, :cond_83
.line 38
sget-object v9, Lcom/alibaba/fastjson/util/RyuDouble;->POW5_SPLIT:[[I
aget-object v9, v9, v4
add-int/lit8 v10, v6, -0x79
rsub-int/lit8 v11, v7, 0x3
mul-int/2addr v11, v1
add-int/2addr v10, v11
.line 39
invoke-virtual {v5, v10}, Ljava/math/BigInteger;->shiftRight(I)Ljava/math/BigInteger;
move-result-object v10
.line 40
invoke-virtual {v10, v0}, Ljava/math/BigInteger;->and(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v10
.line 41
invoke-virtual {v10}, Ljava/math/BigInteger;->intValue()I
move-result v10
aput v10, v9, v7
add-int/lit8 v7, v7, 0x1
goto :goto_66
.line 45
:cond_83
sget-object v7, Lcom/alibaba/fastjson/util/RyuDouble;->POW5_INV_SPLIT:[[I
array-length v7, v7
if-ge v4, v7, :cond_c9
add-int/lit8 v6, v6, 0x79
.line 48
sget-object v7, Ljava/math/BigInteger;->ONE:Ljava/math/BigInteger;
.line 49
invoke-virtual {v7, v6}, Ljava/math/BigInteger;->shiftLeft(I)Ljava/math/BigInteger;
move-result-object v6
.line 50
invoke-virtual {v6, v5}, Ljava/math/BigInteger;->divide(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v5
sget-object v6, Ljava/math/BigInteger;->ONE:Ljava/math/BigInteger;
.line 51
invoke-virtual {v5, v6}, Ljava/math/BigInteger;->add(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v5
move v6, v3
:goto_9b
if-ge v6, v8, :cond_c9
if-nez v6, :cond_b1
.line 54
sget-object v7, Lcom/alibaba/fastjson/util/RyuDouble;->POW5_INV_SPLIT:[[I
aget-object v7, v7, v4
rsub-int/lit8 v9, v6, 0x3
mul-int/2addr v9, v1
.line 55
invoke-virtual {v5, v9}, Ljava/math/BigInteger;->shiftRight(I)Ljava/math/BigInteger;
move-result-object v9
.line 56
invoke-virtual {v9}, Ljava/math/BigInteger;->intValue()I
move-result v9
aput v9, v7, v6
goto :goto_c6
.line 58
:cond_b1
sget-object v7, Lcom/alibaba/fastjson/util/RyuDouble;->POW5_INV_SPLIT:[[I
aget-object v7, v7, v4
rsub-int/lit8 v9, v6, 0x3
mul-int/2addr v9, v1
.line 59
invoke-virtual {v5, v9}, Ljava/math/BigInteger;->shiftRight(I)Ljava/math/BigInteger;
move-result-object v9
.line 60
invoke-virtual {v9, v2}, Ljava/math/BigInteger;->and(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v9
.line 61
invoke-virtual {v9}, Ljava/math/BigInteger;->intValue()I
move-result v9
aput v9, v7, v6
:goto_c6
add-int/lit8 v6, v6, 0x1
goto :goto_9b
:cond_c9
add-int/lit8 v4, v4, 0x1
goto/16 :goto_39
.line 34
:cond_cd
new-instance v0, Ljava/lang/IllegalStateException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v2, " != "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, v7}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
:cond_e7
return-void
:array_e8
.array-data 4
0x146
0x4
.end array-data
:array_f0
.array-data 4
0x123
0x4
.end array-data
.end method
.method public constructor <init>()V
.registers 1
.line 22
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static toString(D[CI)I
.registers 45
.line 84
invoke-static/range {p0 .. p1}, Ljava/lang/Double;->isNaN(D)Z
move-result v0
if-eqz v0, :cond_1b
add-int/lit8 v0, p3, 0x1
const/16 v1, 0x4e
.line 85
aput-char v1, p2, p3
add-int/lit8 v1, v0, 0x1
const/16 v2, 0x61
.line 86
aput-char v2, p2, v0
add-int/lit8 v0, v1, 0x1
const/16 v2, 0x4e
.line 87
aput-char v2, p2, v1
:goto_18
sub-int v0, v0, p3
return v0
:cond_1b
const-wide/high16 v0, 0x7ff0000000000000L # Double.POSITIVE_INFINITY
cmpl-double v0, p0, v0
const/16 v1, 0x69
const/16 v2, 0x6e
if-nez v0, :cond_50
add-int/lit8 v0, p3, 0x1
const/16 v3, 0x49
.line 92
aput-char v3, p2, p3
add-int/lit8 v3, v0, 0x1
.line 93
aput-char v2, p2, v0
add-int/lit8 v0, v3, 0x1
const/16 v4, 0x66
.line 94
aput-char v4, p2, v3
add-int/lit8 v3, v0, 0x1
.line 95
aput-char v1, p2, v0
add-int/lit8 v0, v3, 0x1
.line 96
aput-char v2, p2, v3
add-int/lit8 v2, v0, 0x1
.line 97
aput-char v1, p2, v0
add-int/lit8 v0, v2, 0x1
const/16 v1, 0x74
.line 98
aput-char v1, p2, v2
add-int/lit8 v1, v0, 0x1
const/16 v2, 0x79
.line 99
aput-char v2, p2, v0
:goto_4d
sub-int v1, v1, p3
return v1
:cond_50
const-wide/high16 v3, -0x10000000000000L # Double.NEGATIVE_INFINITY
cmpl-double v0, p0, v3
const/16 v3, 0x2d
if-nez v0, :cond_85
add-int/lit8 v0, p3, 0x1
.line 104
aput-char v3, p2, p3
add-int/lit8 v3, v0, 0x1
const/16 v4, 0x49
.line 105
aput-char v4, p2, v0
add-int/lit8 v0, v3, 0x1
.line 106
aput-char v2, p2, v3
add-int/lit8 v3, v0, 0x1
const/16 v4, 0x66
.line 107
aput-char v4, p2, v0
add-int/lit8 v0, v3, 0x1
.line 108
aput-char v1, p2, v3
add-int/lit8 v3, v0, 0x1
.line 109
aput-char v2, p2, v0
add-int/lit8 v0, v3, 0x1
.line 110
aput-char v1, p2, v3
add-int/lit8 v1, v0, 0x1
const/16 v2, 0x74
.line 111
aput-char v2, p2, v0
add-int/lit8 v0, v1, 0x1
const/16 v2, 0x79
.line 112
aput-char v2, p2, v1
goto :goto_18
.line 116
:cond_85
invoke-static/range {p0 .. p1}, Ljava/lang/Double;->doubleToLongBits(D)J
move-result-wide v0
const-wide/16 v4, 0x0
cmp-long v2, v0, v4
const/16 v6, 0x2e
const/16 v7, 0x30
if-nez v2, :cond_a1
add-int/lit8 v0, p3, 0x1
.line 118
aput-char v7, p2, p3
add-int/lit8 v1, v0, 0x1
.line 119
aput-char v6, p2, v0
add-int/lit8 v0, v1, 0x1
.line 120
aput-char v7, p2, v1
goto/16 :goto_18
:cond_a1
const-wide/high16 v8, -0x8000000000000000L
cmp-long v8, v0, v8
if-nez v8, :cond_b8
add-int/lit8 v0, p3, 0x1
.line 124
aput-char v3, p2, p3
add-int/lit8 v1, v0, 0x1
.line 125
aput-char v7, p2, v0
add-int/lit8 v0, v1, 0x1
.line 126
aput-char v6, p2, v1
add-int/lit8 v1, v0, 0x1
.line 127
aput-char v7, p2, v0
goto :goto_4d
:cond_b8
const/16 v8, 0x34
ushr-long v8, v0, v8
const-wide/16 v10, 0x7ff
and-long/2addr v8, v10
long-to-int v8, v8
const-wide v9, 0xfffffffffffffL
and-long/2addr v0, v9
if-nez v8, :cond_cb
const/16 v9, -0x432
goto :goto_d2
:cond_cb
add-int/lit16 v9, v8, -0x3ff
add-int/lit8 v9, v9, -0x34
const-wide/high16 v10, 0x10000000000000L
or-long/2addr v0, v10
:goto_d2
const/4 v10, 0x0
const/4 v11, 0x1
if-gez v2, :cond_d8
move v2, v11
goto :goto_d9
:cond_d8
move v2, v10
:goto_d9
const-wide/16 v12, 0x1
and-long v14, v0, v12
cmp-long v14, v14, v4
if-nez v14, :cond_e3
move v14, v11
goto :goto_e4
:cond_e3
move v14, v10
:goto_e4
const-wide/16 v15, 0x4
mul-long/2addr v15, v0
const-wide/16 v17, 0x2
add-long v17, v15, v17
const-wide/high16 v19, 0x10000000000000L
cmp-long v0, v0, v19
if-nez v0, :cond_f6
if-gt v8, v11, :cond_f4
goto :goto_f6
:cond_f4
move v0, v10
goto :goto_f7
:cond_f6
:goto_f6
move v0, v11
:goto_f7
sub-long v19, v15, v12
int-to-long v6, v0
sub-long v19, v19, v6
add-int/lit8 v9, v9, -0x2
const-wide/32 v6, 0x7fffffff
const-wide/32 v21, 0x989680
const/16 v8, 0x15
const/16 v23, 0x3
const/16 v24, 0x2
const/16 v25, 0x1f
if-ltz v9, :cond_30c
int-to-long v3, v9
const-wide/32 v26, 0x2deefb
mul-long v3, v3, v26
.line 163
div-long v3, v3, v21
long-to-int v0, v3
sub-int/2addr v0, v11
invoke-static {v10, v0}, Ljava/lang/Math;->max(II)I
move-result v0
if-nez v0, :cond_120
move v3, v11
goto :goto_12c
:cond_120
int-to-long v3, v0
const-wide/32 v26, 0x1624c50
mul-long v3, v3, v26
add-long v3, v3, v21
sub-long/2addr v3, v12
.line 166
div-long v3, v3, v21
long-to-int v3, v3
:goto_12c
add-int/lit8 v3, v3, 0x7a
sub-int/2addr v3, v11
neg-int v4, v9
add-int/2addr v4, v0
add-int/2addr v4, v3
add-int/lit8 v4, v4, -0x5d
sub-int/2addr v4, v8
if-ltz v4, :cond_2f5
.line 174
sget-object v3, Lcom/alibaba/fastjson/util/RyuDouble;->POW5_INV_SPLIT:[[I
aget-object v3, v3, v0
ushr-long v26, v15, v25
and-long v28, v15, v6
.line 178
aget v9, v3, v10
int-to-long v12, v9
mul-long v12, v12, v26
.line 179
aget v9, v3, v10
int-to-long v5, v9
mul-long v5, v5, v28
.line 180
aget v9, v3, v11
move/from16 v32, v2
int-to-long v1, v9
mul-long v1, v1, v26
.line 181
aget v9, v3, v11
int-to-long v10, v9
mul-long v10, v10, v28
.line 182
aget v9, v3, v24
int-to-long v7, v9
mul-long v7, v7, v26
.line 183
aget v9, v3, v24
move/from16 v34, v14
move-wide/from16 v35, v15
int-to-long v14, v9
mul-long v14, v14, v28
.line 184
aget v9, v3, v23
move-wide/from16 v37, v12
int-to-long v12, v9
mul-long v26, v26, v12
.line 185
aget v9, v3, v23
int-to-long v12, v9
mul-long v28, v28, v12
ushr-long v12, v28, v25
add-long/2addr v12, v14
add-long v12, v12, v26
ushr-long v12, v12, v25
add-long/2addr v12, v10
add-long/2addr v12, v7
ushr-long v7, v12, v25
add-long/2addr v7, v5
add-long/2addr v7, v1
const/16 v1, 0x15
ushr-long v5, v7, v1
const/16 v1, 0xa
shl-long v7, v37, v1
add-long/2addr v5, v7
ushr-long v1, v5, v4
ushr-long v5, v17, v25
const-wide/32 v7, 0x7fffffff
and-long v9, v17, v7
const/4 v7, 0x0
.line 197
aget v8, v3, v7
int-to-long v11, v8
mul-long/2addr v11, v5
.line 198
aget v8, v3, v7
int-to-long v7, v8
mul-long/2addr v7, v9
const/4 v13, 0x1
.line 199
aget v14, v3, v13
int-to-long v14, v14
mul-long/2addr v14, v5
move-wide/from16 v26, v1
.line 200
aget v1, v3, v13
int-to-long v1, v1
mul-long/2addr v1, v9
.line 201
aget v13, v3, v24
move-wide/from16 v28, v11
int-to-long v11, v13
mul-long/2addr v11, v5
.line 202
aget v13, v3, v24
move-wide/from16 v37, v14
int-to-long v13, v13
mul-long/2addr v13, v9
.line 203
aget v15, v3, v23
move-wide/from16 v39, v7
int-to-long v7, v15
mul-long/2addr v5, v7
.line 204
aget v7, v3, v23
int-to-long v7, v7
mul-long/2addr v9, v7
ushr-long v7, v9, v25
add-long/2addr v7, v13
add-long/2addr v7, v5
ushr-long v5, v7, v25
add-long/2addr v5, v1
add-long/2addr v5, v11
ushr-long v1, v5, v25
add-long v1, v1, v39
add-long v1, v1, v37
const/16 v5, 0x15
ushr-long/2addr v1, v5
const/16 v5, 0xa
shl-long v6, v28, v5
add-long/2addr v1, v6
ushr-long/2addr v1, v4
ushr-long v5, v19, v25
const-wide/32 v7, 0x7fffffff
and-long v7, v19, v7
const/4 v9, 0x0
.line 215
aget v10, v3, v9
int-to-long v10, v10
mul-long/2addr v10, v5
.line 216
aget v12, v3, v9
int-to-long v12, v12
mul-long/2addr v12, v7
const/4 v9, 0x1
.line 217
aget v14, v3, v9
int-to-long v14, v14
mul-long/2addr v14, v5
move-wide/from16 v28, v1
.line 218
aget v1, v3, v9
int-to-long v1, v1
mul-long/2addr v1, v7
.line 219
aget v9, v3, v24
move-wide/from16 v30, v10
int-to-long v9, v9
mul-long/2addr v9, v5
.line 220
aget v11, v3, v24
move-wide/from16 v37, v14
int-to-long v14, v11
mul-long/2addr v14, v7
.line 221
aget v11, v3, v23
move-wide/from16 v39, v12
int-to-long v11, v11
mul-long/2addr v5, v11
.line 222
aget v3, v3, v23
int-to-long v11, v3
mul-long/2addr v7, v11
ushr-long v7, v7, v25
add-long/2addr v7, v14
add-long/2addr v7, v5
ushr-long v5, v7, v25
add-long/2addr v5, v1
add-long/2addr v5, v9
ushr-long v1, v5, v25
add-long v1, v1, v39
add-long v1, v1, v37
const/16 v3, 0x15
ushr-long/2addr v1, v3
const/16 v5, 0xa
shl-long v6, v30, v5
add-long/2addr v1, v6
ushr-long/2addr v1, v4
if-gt v0, v3, :cond_2ec
const-wide/16 v3, 0x5
.line 234
rem-long v15, v35, v3
const-wide/16 v5, 0x0
cmp-long v7, v15, v5
const-wide/16 v8, 0x271
if-nez v7, :cond_264
if-eqz v7, :cond_229
const/4 v7, 0x0
goto :goto_25b
:cond_229
const-wide/16 v10, 0x19
.line 240
rem-long v15, v35, v10
cmp-long v7, v15, v5
if-eqz v7, :cond_233
const/4 v7, 0x1
goto :goto_25b
:cond_233
const-wide/16 v10, 0x7d
.line 242
rem-long v15, v35, v10
cmp-long v7, v15, v5
if-eqz v7, :cond_23e
move/from16 v7, v24
goto :goto_25b
.line 244
:cond_23e
rem-long v15, v35, v8
cmp-long v7, v15, v5
if-eqz v7, :cond_247
move/from16 v7, v23
goto :goto_25b
.line 248
:cond_247
div-long v15, v35, v8
const/4 v7, 0x4
:goto_24a
cmp-long v8, v15, v5
if-lez v8, :cond_25b
.line 250
rem-long v8, v15, v3
cmp-long v8, v8, v5
if-eqz v8, :cond_255
goto :goto_25b
.line 253
:cond_255
div-long/2addr v15, v3
add-int/lit8 v7, v7, 0x1
const-wide/16 v5, 0x0
goto :goto_24a
:cond_25b
:goto_25b
if-lt v7, v0, :cond_25f
const/4 v3, 0x1
goto :goto_260
:cond_25f
const/4 v3, 0x0
:goto_260
move v4, v3
const/4 v3, 0x0
goto/16 :goto_2ee
:cond_264
if-eqz v34, :cond_2a7
.line 263
rem-long v5, v19, v3
const-wide/16 v10, 0x0
cmp-long v5, v5, v10
if-eqz v5, :cond_270
const/4 v5, 0x0
goto :goto_2a3
:cond_270
const-wide/16 v5, 0x19
.line 265
rem-long v5, v19, v5
cmp-long v5, v5, v10
if-eqz v5, :cond_27a
const/4 v5, 0x1
goto :goto_2a3
:cond_27a
const-wide/16 v5, 0x7d
.line 267
rem-long v5, v19, v5
cmp-long v5, v5, v10
if-eqz v5, :cond_285
move/from16 v5, v24
goto :goto_2a3
.line 269
:cond_285
rem-long v5, v19, v8
cmp-long v5, v5, v10
if-eqz v5, :cond_28e
move/from16 v5, v23
goto :goto_2a3
.line 273
:cond_28e
div-long v19, v19, v8
const/4 v5, 0x4
:goto_291
cmp-long v6, v19, v10
if-lez v6, :cond_2a3
.line 275
rem-long v6, v19, v3
cmp-long v6, v6, v10
if-eqz v6, :cond_29c
goto :goto_2a3
.line 278
:cond_29c
div-long v19, v19, v3
add-int/lit8 v5, v5, 0x1
const-wide/16 v10, 0x0
goto :goto_291
:cond_2a3
:goto_2a3
if-lt v5, v0, :cond_2ec
const/4 v3, 0x1
goto :goto_2ed
.line 289
:cond_2a7
rem-long v5, v17, v3
const-wide/16 v10, 0x0
cmp-long v5, v5, v10
if-eqz v5, :cond_2b1
const/4 v5, 0x0
goto :goto_2e4
:cond_2b1
const-wide/16 v5, 0x19
.line 291
rem-long v5, v17, v5
cmp-long v5, v5, v10
if-eqz v5, :cond_2bb
const/4 v5, 0x1
goto :goto_2e4
:cond_2bb
const-wide/16 v5, 0x7d
.line 293
rem-long v5, v17, v5
cmp-long v5, v5, v10
if-eqz v5, :cond_2c6
move/from16 v5, v24
goto :goto_2e4
.line 295
:cond_2c6
rem-long v5, v17, v8
cmp-long v5, v5, v10
if-eqz v5, :cond_2cf
move/from16 v5, v23
goto :goto_2e4
.line 299
:cond_2cf
div-long v17, v17, v8
const/4 v5, 0x4
:goto_2d2
cmp-long v6, v17, v10
if-lez v6, :cond_2e4
.line 301
rem-long v6, v17, v3
cmp-long v6, v6, v10
if-eqz v6, :cond_2dd
goto :goto_2e4
.line 304
:cond_2dd
div-long v17, v17, v3
add-int/lit8 v5, v5, 0x1
const-wide/16 v10, 0x0
goto :goto_2d2
:cond_2e4
:goto_2e4
if-lt v5, v0, :cond_2ec
const-wide/16 v3, 0x1
sub-long v3, v28, v3
move-wide/from16 v28, v3
:cond_2ec
const/4 v3, 0x0
:goto_2ed
const/4 v4, 0x0
:goto_2ee
move v7, v3
move-wide/from16 v17, v26
move v3, v0
const/4 v0, 0x0
goto/16 :goto_455
.line 171
:cond_2f5
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, ""
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
:cond_30c
move/from16 v32, v2
move/from16 v34, v14
move-wide/from16 v35, v15
neg-int v1, v9
int-to-long v2, v1
const-wide/32 v4, 0x6aa784
mul-long/2addr v2, v4
.line 316
div-long v2, v2, v21
long-to-int v2, v2
const/4 v3, 0x1
sub-int/2addr v2, v3
const/4 v3, 0x0
invoke-static {v3, v2}, Ljava/lang/Math;->max(II)I
move-result v2
sub-int/2addr v1, v2
if-nez v1, :cond_327
const/4 v3, 0x1
goto :goto_334
:cond_327
int-to-long v3, v1
const-wide/32 v5, 0x1624c50
mul-long/2addr v3, v5
add-long v3, v3, v21
const-wide/16 v5, 0x1
sub-long/2addr v3, v5
.line 318
div-long v3, v3, v21
long-to-int v3, v3
:goto_334
add-int/lit8 v3, v3, -0x79
sub-int v3, v2, v3
add-int/lit8 v3, v3, -0x5d
const/16 v4, 0x15
sub-int/2addr v3, v4
if-ltz v3, :cond_6e7
.line 325
sget-object v4, Lcom/alibaba/fastjson/util/RyuDouble;->POW5_SPLIT:[[I
aget-object v1, v4, v1
ushr-long v4, v35, v25
const-wide/32 v6, 0x7fffffff
and-long v10, v35, v6
const/4 v6, 0x0
.line 329
aget v7, v1, v6
int-to-long v7, v7
mul-long/2addr v7, v4
.line 330
aget v12, v1, v6
int-to-long v12, v12
mul-long/2addr v12, v10
const/4 v6, 0x1
.line 331
aget v14, v1, v6
int-to-long v14, v14
mul-long/2addr v14, v4
move/from16 v16, v0
.line 332
aget v0, v1, v6
move v6, v2
move/from16 v26, v3
int-to-long v2, v0
mul-long/2addr v2, v10
.line 333
aget v0, v1, v24
move-wide/from16 v27, v7
move v8, v6
int-to-long v6, v0
mul-long/2addr v6, v4
.line 334
aget v0, v1, v24
move/from16 v37, v8
move/from16 v29, v9
int-to-long v8, v0
mul-long/2addr v8, v10
.line 335
aget v0, v1, v23
move-wide/from16 v38, v14
int-to-long v14, v0
mul-long/2addr v4, v14
.line 336
aget v0, v1, v23
int-to-long v14, v0
mul-long/2addr v10, v14
ushr-long v10, v10, v25
add-long/2addr v10, v8
add-long/2addr v10, v4
ushr-long v4, v10, v25
add-long/2addr v4, v2
add-long/2addr v4, v6
ushr-long v2, v4, v25
add-long/2addr v2, v12
add-long v2, v2, v38
const/16 v0, 0x15
ushr-long/2addr v2, v0
const/16 v0, 0xa
shl-long v4, v27, v0
add-long/2addr v2, v4
ushr-long v2, v2, v26
ushr-long v4, v17, v25
const-wide/32 v6, 0x7fffffff
and-long v8, v17, v6
const/4 v0, 0x0
.line 347
aget v6, v1, v0
int-to-long v6, v6
mul-long/2addr v6, v4
.line 348
aget v10, v1, v0
int-to-long v10, v10
mul-long/2addr v10, v8
const/4 v0, 0x1
.line 349
aget v12, v1, v0
int-to-long v12, v12
mul-long/2addr v12, v4
.line 350
aget v14, v1, v0
int-to-long v14, v14
mul-long/2addr v14, v8
.line 351
aget v0, v1, v24
move-wide/from16 v17, v2
int-to-long v2, v0
mul-long/2addr v2, v4
.line 352
aget v0, v1, v24
move-wide/from16 v27, v6
int-to-long v6, v0
mul-long/2addr v6, v8
.line 353
aget v0, v1, v23
move-wide/from16 v38, v12
int-to-long v12, v0
mul-long/2addr v4, v12
.line 354
aget v0, v1, v23
int-to-long v12, v0
mul-long/2addr v8, v12
ushr-long v8, v8, v25
add-long/2addr v8, v6
add-long/2addr v8, v4
ushr-long v4, v8, v25
add-long/2addr v4, v14
add-long/2addr v4, v2
ushr-long v2, v4, v25
add-long/2addr v2, v10
add-long v2, v2, v38
const/16 v0, 0x15
ushr-long/2addr v2, v0
const/16 v0, 0xa
shl-long v4, v27, v0
add-long/2addr v2, v4
ushr-long v2, v2, v26
ushr-long v4, v19, v25
const-wide/32 v6, 0x7fffffff
and-long v6, v19, v6
const/4 v0, 0x0
.line 364
aget v8, v1, v0
int-to-long v8, v8
mul-long/2addr v8, v4
.line 365
aget v10, v1, v0
int-to-long v10, v10
mul-long/2addr v10, v6
const/4 v12, 0x1
.line 366
aget v13, v1, v12
int-to-long v13, v13
mul-long/2addr v13, v4
.line 367
aget v15, v1, v12
move-wide/from16 v19, v2
int-to-long v2, v15
mul-long/2addr v2, v6
.line 368
aget v12, v1, v24
move-wide/from16 v27, v8
int-to-long v8, v12
mul-long/2addr v8, v4
.line 369
aget v12, v1, v24
move-wide/from16 v30, v13
int-to-long v12, v12
mul-long/2addr v12, v6
.line 370
aget v14, v1, v23
int-to-long v14, v14
mul-long/2addr v4, v14
.line 371
aget v1, v1, v23
int-to-long v14, v1
mul-long/2addr v6, v14
ushr-long v6, v6, v25
add-long/2addr v6, v12
add-long/2addr v6, v4
ushr-long v4, v6, v25
add-long/2addr v4, v2
add-long/2addr v4, v8
ushr-long v1, v4, v25
add-long/2addr v1, v10
add-long v1, v1, v30
const/16 v3, 0x15
ushr-long/2addr v1, v3
const/16 v3, 0xa
shl-long v4, v27, v3
add-long/2addr v1, v4
ushr-long v1, v1, v26
add-int v3, v37, v29
move/from16 v5, v37
const/4 v4, 0x1
if-gt v5, v4, :cond_43a
if-eqz v34, :cond_434
move/from16 v10, v16
if-ne v10, v4, :cond_42d
move/from16 v33, v4
goto :goto_42f
:cond_42d
move/from16 v33, v0
:goto_42f
move-wide/from16 v28, v19
move/from16 v7, v33
goto :goto_455
:cond_434
const-wide/16 v6, 0x1
sub-long v28, v19, v6
move v7, v0
goto :goto_455
:cond_43a
const-wide/16 v6, 0x1
const/16 v8, 0x3f
if-ge v5, v8, :cond_451
sub-int/2addr v5, v4
shl-long v4, v6, v5
sub-long/2addr v4, v6
and-long v4, v35, v4
const-wide/16 v6, 0x0
cmp-long v4, v4, v6
if-nez v4, :cond_44e
const/4 v4, 0x1
goto :goto_44f
:cond_44e
move v4, v0
:goto_44f
move v7, v0
goto :goto_453
:cond_451
move v4, v0
move v7, v4
:goto_453
move-wide/from16 v28, v19
:goto_455
const-wide v5, 0xde0b6b3a7640000L
cmp-long v5, v28, v5
const/4 v6, 0x5
const-wide/16 v8, 0x64
const-wide/16 v10, 0xa
if-ltz v5, :cond_467
const/16 v23, 0x13
goto/16 :goto_51c
:cond_467
const-wide v12, 0x16345785d8a0000L
cmp-long v5, v28, v12
if-ltz v5, :cond_474
const/16 v23, 0x12
goto/16 :goto_51c
:cond_474
const-wide v12, 0x2386f26fc10000L
cmp-long v5, v28, v12
if-ltz v5, :cond_481
const/16 v23, 0x11
goto/16 :goto_51c
:cond_481
const-wide v12, 0x38d7ea4c68000L
cmp-long v5, v28, v12
if-ltz v5, :cond_48e
const/16 v23, 0x10
goto/16 :goto_51c
:cond_48e
const-wide v12, 0x5af3107a4000L
cmp-long v5, v28, v12
if-ltz v5, :cond_49b
const/16 v23, 0xf
goto/16 :goto_51c
:cond_49b
const-wide v12, 0x9184e72a000L
cmp-long v5, v28, v12
if-ltz v5, :cond_4a8
const/16 v23, 0xe
goto/16 :goto_51c
:cond_4a8
const-wide v12, 0xe8d4a51000L
cmp-long v5, v28, v12
if-ltz v5, :cond_4b5
const/16 v23, 0xd
goto/16 :goto_51c
:cond_4b5
const-wide v12, 0x174876e800L
cmp-long v5, v28, v12
if-ltz v5, :cond_4c1
const/16 v23, 0xc
goto :goto_51c
:cond_4c1
const-wide v12, 0x2540be400L
cmp-long v5, v28, v12
if-ltz v5, :cond_4cd
const/16 v23, 0xb
goto :goto_51c
:cond_4cd
const-wide/32 v12, 0x3b9aca00
cmp-long v5, v28, v12
if-ltz v5, :cond_4d7
const/16 v23, 0xa
goto :goto_51c
:cond_4d7
const-wide/32 v12, 0x5f5e100
cmp-long v5, v28, v12
if-ltz v5, :cond_4e1
const/16 v23, 0x9
goto :goto_51c
:cond_4e1
cmp-long v5, v28, v21
if-ltz v5, :cond_4e8
const/16 v23, 0x8
goto :goto_51c
:cond_4e8
const-wide/32 v12, 0xf4240
cmp-long v5, v28, v12
if-ltz v5, :cond_4f2
const/16 v23, 0x7
goto :goto_51c
:cond_4f2
const-wide/32 v12, 0x186a0
cmp-long v5, v28, v12
if-ltz v5, :cond_4fc
const/16 v23, 0x6
goto :goto_51c
:cond_4fc
const-wide/16 v12, 0x2710
cmp-long v5, v28, v12
if-ltz v5, :cond_505
move/from16 v23, v6
goto :goto_51c
:cond_505
const-wide/16 v12, 0x3e8
cmp-long v5, v28, v12
if-ltz v5, :cond_50e
const/16 v23, 0x4
goto :goto_51c
:cond_50e
cmp-long v5, v28, v8
if-ltz v5, :cond_513
goto :goto_51c
:cond_513
cmp-long v5, v28, v10
if-ltz v5, :cond_51a
move/from16 v23, v24
goto :goto_51c
:cond_51a
const/16 v23, 0x1
:goto_51c
add-int v3, v3, v23
const/4 v5, 0x1
sub-int/2addr v3, v5
const/4 v5, -0x3
if-lt v3, v5, :cond_529
const/4 v5, 0x7
if-lt v3, v5, :cond_527
goto :goto_529
:cond_527
move v12, v0
goto :goto_52a
:cond_529
:goto_529
const/4 v12, 0x1
:goto_52a
if-nez v7, :cond_55a
if-eqz v4, :cond_52f
goto :goto_55a
:cond_52f
move v4, v0
move v7, v4
.line 485
:goto_531
div-long v13, v28, v10
div-long v15, v1, v10
cmp-long v5, v13, v15
if-lez v5, :cond_54b
cmp-long v5, v28, v8
if-gez v5, :cond_540
if-eqz v12, :cond_540
goto :goto_54b
.line 490
:cond_540
rem-long v1, v17, v10
long-to-int v4, v1
.line 492
div-long v17, v17, v10
add-int/lit8 v7, v7, 0x1
move-wide/from16 v28, v13
move-wide v1, v15
goto :goto_531
:cond_54b
:goto_54b
cmp-long v1, v17, v1
if-eqz v1, :cond_554
if-lt v4, v6, :cond_552
goto :goto_554
:cond_552
move v1, v0
goto :goto_555
:cond_554
:goto_554
const/4 v1, 0x1
:goto_555
int-to-long v1, v1
add-long v17, v17, v1
goto/16 :goto_5cc
:cond_55a
:goto_55a
move v5, v0
move v13, v5
.line 451
:goto_55c
div-long v14, v28, v10
div-long v19, v1, v10
cmp-long v16, v14, v19
if-lez v16, :cond_588
cmp-long v16, v28, v8
if-gez v16, :cond_56b
if-eqz v12, :cond_56b
goto :goto_588
.line 456
:cond_56b
rem-long/2addr v1, v10
const-wide/16 v21, 0x0
cmp-long v1, v1, v21
if-nez v1, :cond_574
const/4 v1, 0x1
goto :goto_575
:cond_574
move v1, v0
:goto_575
and-int/2addr v7, v1
if-nez v5, :cond_57a
const/4 v1, 0x1
goto :goto_57b
:cond_57a
move v1, v0
:goto_57b
and-int/2addr v4, v1
.line 458
rem-long v1, v17, v10
long-to-int v5, v1
.line 460
div-long v17, v17, v10
add-int/lit8 v13, v13, 0x1
move-wide/from16 v28, v14
move-wide/from16 v1, v19
goto :goto_55c
:cond_588
:goto_588
if-eqz v7, :cond_5ac
if-eqz v34, :cond_5ac
.line 465
:goto_58c
rem-long v14, v1, v10
const-wide/16 v19, 0x0
cmp-long v14, v14, v19
if-nez v14, :cond_5ac
cmp-long v14, v28, v8
if-gez v14, :cond_59b
if-eqz v12, :cond_59b
goto :goto_5ac
:cond_59b
if-nez v5, :cond_59f
const/4 v5, 0x1
goto :goto_5a0
:cond_59f
move v5, v0
:goto_5a0
and-int/2addr v4, v5
.line 471
rem-long v14, v17, v10
long-to-int v5, v14
.line 472
div-long v28, v28, v10
.line 473
div-long v17, v17, v10
.line 474
div-long/2addr v1, v10
add-int/lit8 v13, v13, 0x1
goto :goto_58c
:cond_5ac
:goto_5ac
if-eqz v4, :cond_5bb
if-ne v5, v6, :cond_5bb
const-wide/16 v8, 0x2
.line 478
rem-long v8, v17, v8
const-wide/16 v14, 0x0
cmp-long v4, v8, v14
if-nez v4, :cond_5bb
const/4 v5, 0x4
:cond_5bb
cmp-long v1, v17, v1
if-nez v1, :cond_5c3
if-eqz v7, :cond_5c5
if-eqz v34, :cond_5c5
:cond_5c3
if-lt v5, v6, :cond_5c7
:cond_5c5
const/4 v1, 0x1
goto :goto_5c8
:cond_5c7
move v1, v0
:goto_5c8
int-to-long v1, v1
add-long v17, v17, v1
move v7, v13
:goto_5cc
sub-int v1, v23, v7
if-eqz v32, :cond_5d7
add-int/lit8 v2, p3, 0x1
const/16 v4, 0x2d
.line 503
aput-char v4, p2, p3
goto :goto_5d9
:cond_5d7
move/from16 v2, p3
:goto_5d9
if-eqz v12, :cond_650
:goto_5db
add-int/lit8 v4, v1, -0x1
if-ge v0, v4, :cond_5f0
.line 510
rem-long v6, v17, v10
long-to-int v4, v6
.line 511
div-long v17, v17, v10
add-int v6, v2, v1
sub-int/2addr v6, v0
const/16 v7, 0x30
add-int/2addr v4, v7
int-to-char v4, v4
.line 512
aput-char v4, p2, v6
add-int/lit8 v0, v0, 0x1
goto :goto_5db
:cond_5f0
const-wide/16 v6, 0x30
.line 514
rem-long v17, v17, v10
add-long v6, v17, v6
long-to-int v0, v6
int-to-char v0, v0
aput-char v0, p2, v2
add-int/lit8 v0, v2, 0x1
const/16 v4, 0x2e
.line 515
aput-char v4, p2, v0
add-int/lit8 v0, v1, 0x1
add-int/2addr v2, v0
const/4 v0, 0x1
if-ne v1, v0, :cond_60d
add-int/lit8 v0, v2, 0x1
const/16 v1, 0x30
.line 518
aput-char v1, p2, v2
move v2, v0
:cond_60d
add-int/lit8 v0, v2, 0x1
const/16 v1, 0x45
.line 522
aput-char v1, p2, v2
if-gez v3, :cond_61d
add-int/lit8 v1, v0, 0x1
const/16 v2, 0x2d
.line 524
aput-char v2, p2, v0
neg-int v3, v3
move v0, v1
:cond_61d
const/16 v1, 0x64
if-lt v3, v1, :cond_636
add-int/lit8 v1, v0, 0x1
.line 528
div-int/lit8 v2, v3, 0x64
const/16 v4, 0x30
add-int/2addr v2, v4
int-to-char v2, v2
aput-char v2, p2, v0
.line 529
rem-int/lit8 v3, v3, 0x64
add-int/lit8 v0, v1, 0x1
.line 530
div-int/lit8 v2, v3, 0xa
add-int/2addr v2, v4
int-to-char v2, v2
aput-char v2, p2, v1
goto :goto_645
:cond_636
const/16 v1, 0xa
const/16 v4, 0x30
if-lt v3, v1, :cond_645
add-int/lit8 v1, v0, 0x1
.line 532
div-int/lit8 v2, v3, 0xa
add-int/2addr v2, v4
int-to-char v2, v2
aput-char v2, p2, v0
move v0, v1
:cond_645
:goto_645
add-int/lit8 v1, v0, 0x1
const/16 v2, 0xa
.line 534
rem-int/2addr v3, v2
add-int/2addr v3, v4
int-to-char v2, v3
aput-char v2, p2, v0
goto/16 :goto_4d
:cond_650
const/16 v4, 0x30
if-gez v3, :cond_683
add-int/lit8 v5, v2, 0x1
.line 540
aput-char v4, p2, v2
add-int/lit8 v2, v5, 0x1
const/16 v6, 0x2e
.line 541
aput-char v6, p2, v5
const/4 v5, -0x1
:goto_65f
if-le v5, v3, :cond_66b
add-int/lit8 v6, v2, 0x1
.line 543
aput-char v4, p2, v2
add-int/lit8 v5, v5, -0x1
move v2, v6
const/16 v4, 0x30
goto :goto_65f
:cond_66b
move v3, v2
:goto_66c
if-ge v0, v1, :cond_6e4
add-int v4, v2, v1
sub-int/2addr v4, v0
const/4 v5, 0x1
sub-int/2addr v4, v5
const-wide/16 v5, 0x30
.line 547
rem-long v7, v17, v10
add-long/2addr v7, v5
long-to-int v5, v7
int-to-char v5, v5
aput-char v5, p2, v4
.line 548
div-long v17, v17, v10
add-int/lit8 v3, v3, 0x1
add-int/lit8 v0, v0, 0x1
goto :goto_66c
:cond_683
add-int/lit8 v4, v3, 0x1
if-lt v4, v1, :cond_6b7
:goto_687
if-ge v0, v1, :cond_69c
add-int v3, v2, v1
sub-int/2addr v3, v0
const/4 v5, 0x1
sub-int/2addr v3, v5
const-wide/16 v5, 0x30
.line 554
rem-long v7, v17, v10
add-long/2addr v7, v5
long-to-int v5, v7
int-to-char v5, v5
aput-char v5, p2, v3
.line 555
div-long v17, v17, v10
add-int/lit8 v0, v0, 0x1
goto :goto_687
:cond_69c
add-int/2addr v2, v1
:goto_69d
if-ge v1, v4, :cond_6a9
add-int/lit8 v0, v2, 0x1
const/16 v3, 0x30
.line 559
aput-char v3, p2, v2
add-int/lit8 v1, v1, 0x1
move v2, v0
goto :goto_69d
:cond_6a9
const/16 v3, 0x30
add-int/lit8 v0, v2, 0x1
const/16 v1, 0x2e
.line 561
aput-char v1, p2, v2
add-int/lit8 v1, v0, 0x1
.line 562
aput-char v3, p2, v0
move v3, v1
goto :goto_6e4
:cond_6b7
add-int/lit8 v4, v2, 0x1
:goto_6b9
if-ge v0, v1, :cond_6e0
sub-int v5, v1, v0
const/4 v6, 0x1
sub-int/2addr v5, v6
if-ne v5, v3, :cond_6cc
add-int v5, v4, v1
sub-int/2addr v5, v0
sub-int/2addr v5, v6
const/16 v7, 0x2e
.line 568
aput-char v7, p2, v5
add-int/lit8 v4, v4, -0x1
goto :goto_6ce
:cond_6cc
const/16 v7, 0x2e
:goto_6ce
add-int v5, v4, v1
sub-int/2addr v5, v0
sub-int/2addr v5, v6
const-wide/16 v8, 0x30
.line 571
rem-long v12, v17, v10
add-long/2addr v12, v8
long-to-int v8, v12
int-to-char v8, v8
aput-char v8, p2, v5
.line 572
div-long v17, v17, v10
add-int/lit8 v0, v0, 0x1
goto :goto_6b9
:cond_6e0
const/4 v6, 0x1
add-int/2addr v1, v6
add-int v3, v2, v1
:cond_6e4
:goto_6e4
sub-int v3, v3, p3
return v3
:cond_6e7
move/from16 v26, v3
.line 323
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, ""
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public static toString(D)Ljava/lang/String;
.registers 4
const/16 v0, 0x18
new-array v0, v0, [C
const/4 v1, 0x0
.line 70
invoke-static {p0, p1, v0, v1}, Lcom/alibaba/fastjson/util/RyuDouble;->toString(D[CI)I
move-result p0
.line 71
new-instance p1, Ljava/lang/String;
invoke-direct {p1, v0, v1, p0}, Ljava/lang/String;-><init>([CII)V
return-object p1
.end method