3200 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			Smali
		
	
	
	
	
	
			
		
		
	
	
			3200 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			Smali
		
	
	
	
	
	
| .class public final Lcom/google/common/math/LongMath;
 | |
| .super Ljava/lang/Object;
 | |
| .source "LongMath.java"
 | |
| 
 | |
| 
 | |
| # annotations
 | |
| .annotation build Lcom/google/common/annotations/GwtCompatible;
 | |
|     emulated = true
 | |
| .end annotation
 | |
| 
 | |
| .annotation runtime Lcom/google/common/math/ElementTypesAreNonnullByDefault;
 | |
| .end annotation
 | |
| 
 | |
| .annotation system Ldalvik/annotation/MemberClasses;
 | |
|     value = {
 | |
|         Lcom/google/common/math/LongMath$MillerRabinTester;
 | |
|     }
 | |
| .end annotation
 | |
| 
 | |
| 
 | |
| # static fields
 | |
| .field public static final FLOOR_SQRT_MAX_LONG:J = 0xb504f333L
 | |
|     .annotation build Lcom/google/common/annotations/VisibleForTesting;
 | |
|     .end annotation
 | |
| .end field
 | |
| 
 | |
| .field public static final MAX_POWER_OF_SQRT2_UNSIGNED:J = -0x4afb0ccc06219b7cL
 | |
|     .annotation build Lcom/google/common/annotations/VisibleForTesting;
 | |
|     .end annotation
 | |
| .end field
 | |
| 
 | |
| .field public static final MAX_SIGNED_POWER_OF_TWO:J = 0x4000000000000000L
 | |
|     .annotation build Lcom/google/common/annotations/VisibleForTesting;
 | |
|     .end annotation
 | |
| .end field
 | |
| 
 | |
| .field private static final SIEVE_30:I = -0x208a2883
 | |
| 
 | |
| .field public static final biggestBinomials:[I
 | |
| 
 | |
| .field public static final biggestSimpleBinomials:[I
 | |
|     .annotation build Lcom/google/common/annotations/VisibleForTesting;
 | |
|     .end annotation
 | |
| .end field
 | |
| 
 | |
| .field public static final factorials:[J
 | |
| 
 | |
| .field public static final halfPowersOf10:[J
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     .annotation build Lcom/google/common/annotations/VisibleForTesting;
 | |
|     .end annotation
 | |
| .end field
 | |
| 
 | |
| .field public static final maxLog10ForLeadingZeros:[B
 | |
|     .annotation build Lcom/google/common/annotations/VisibleForTesting;
 | |
|     .end annotation
 | |
| .end field
 | |
| 
 | |
| .field private static final millerRabinBaseSets:[[J
 | |
| 
 | |
| .field public static final powersOf10:[J
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     .annotation build Lcom/google/common/annotations/VisibleForTesting;
 | |
|     .end annotation
 | |
| .end field
 | |
| 
 | |
| 
 | |
| # direct methods
 | |
| .method public static constructor <clinit>()V
 | |
|     .locals 6
 | |
| 
 | |
|     const/16 v0, 0x40
 | |
| 
 | |
|     new-array v0, v0, [B
 | |
| 
 | |
|     .line 1
 | |
|     fill-array-data v0, :array_0
 | |
| 
 | |
|     sput-object v0, Lcom/google/common/math/LongMath;->maxLog10ForLeadingZeros:[B
 | |
| 
 | |
|     const/16 v0, 0x13
 | |
| 
 | |
|     new-array v1, v0, [J
 | |
| 
 | |
|     .line 2
 | |
|     fill-array-data v1, :array_1
 | |
| 
 | |
|     sput-object v1, Lcom/google/common/math/LongMath;->powersOf10:[J
 | |
| 
 | |
|     new-array v0, v0, [J
 | |
| 
 | |
|     .line 3
 | |
|     fill-array-data v0, :array_2
 | |
| 
 | |
|     sput-object v0, Lcom/google/common/math/LongMath;->halfPowersOf10:[J
 | |
| 
 | |
|     const/16 v0, 0x15
 | |
| 
 | |
|     new-array v0, v0, [J
 | |
| 
 | |
|     .line 4
 | |
|     fill-array-data v0, :array_3
 | |
| 
 | |
|     sput-object v0, Lcom/google/common/math/LongMath;->factorials:[J
 | |
| 
 | |
|     const/16 v0, 0x22
 | |
| 
 | |
|     new-array v0, v0, [I
 | |
| 
 | |
|     .line 5
 | |
|     fill-array-data v0, :array_4
 | |
| 
 | |
|     sput-object v0, Lcom/google/common/math/LongMath;->biggestBinomials:[I
 | |
| 
 | |
|     const/16 v0, 0x1f
 | |
| 
 | |
|     new-array v0, v0, [I
 | |
| 
 | |
|     .line 6
 | |
|     fill-array-data v0, :array_5
 | |
| 
 | |
|     sput-object v0, Lcom/google/common/math/LongMath;->biggestSimpleBinomials:[I
 | |
| 
 | |
|     const/4 v0, 0x7
 | |
| 
 | |
|     new-array v1, v0, [[J
 | |
| 
 | |
|     const/4 v2, 0x2
 | |
| 
 | |
|     new-array v3, v2, [J
 | |
| 
 | |
|     .line 7
 | |
|     fill-array-data v3, :array_6
 | |
| 
 | |
|     const/4 v4, 0x0
 | |
| 
 | |
|     aput-object v3, v1, v4
 | |
| 
 | |
|     const/4 v3, 0x3
 | |
| 
 | |
|     new-array v4, v3, [J
 | |
| 
 | |
|     fill-array-data v4, :array_7
 | |
| 
 | |
|     const/4 v5, 0x1
 | |
| 
 | |
|     aput-object v4, v1, v5
 | |
| 
 | |
|     const/4 v4, 0x4
 | |
| 
 | |
|     new-array v5, v4, [J
 | |
| 
 | |
|     fill-array-data v5, :array_8
 | |
| 
 | |
|     aput-object v5, v1, v2
 | |
| 
 | |
|     const/4 v2, 0x5
 | |
| 
 | |
|     new-array v5, v2, [J
 | |
| 
 | |
|     fill-array-data v5, :array_9
 | |
| 
 | |
|     aput-object v5, v1, v3
 | |
| 
 | |
|     const/4 v3, 0x6
 | |
| 
 | |
|     new-array v5, v3, [J
 | |
| 
 | |
|     fill-array-data v5, :array_a
 | |
| 
 | |
|     aput-object v5, v1, v4
 | |
| 
 | |
|     new-array v0, v0, [J
 | |
| 
 | |
|     fill-array-data v0, :array_b
 | |
| 
 | |
|     aput-object v0, v1, v2
 | |
| 
 | |
|     const/16 v0, 0x8
 | |
| 
 | |
|     new-array v0, v0, [J
 | |
| 
 | |
|     fill-array-data v0, :array_c
 | |
| 
 | |
|     aput-object v0, v1, v3
 | |
| 
 | |
|     sput-object v1, Lcom/google/common/math/LongMath;->millerRabinBaseSets:[[J
 | |
| 
 | |
|     return-void
 | |
| 
 | |
|     :array_0
 | |
|     .array-data 1
 | |
|         0x13t
 | |
|         0x12t
 | |
|         0x12t
 | |
|         0x12t
 | |
|         0x12t
 | |
|         0x11t
 | |
|         0x11t
 | |
|         0x11t
 | |
|         0x10t
 | |
|         0x10t
 | |
|         0x10t
 | |
|         0xft
 | |
|         0xft
 | |
|         0xft
 | |
|         0xft
 | |
|         0xet
 | |
|         0xet
 | |
|         0xet
 | |
|         0xdt
 | |
|         0xdt
 | |
|         0xdt
 | |
|         0xct
 | |
|         0xct
 | |
|         0xct
 | |
|         0xct
 | |
|         0xbt
 | |
|         0xbt
 | |
|         0xbt
 | |
|         0xat
 | |
|         0xat
 | |
|         0xat
 | |
|         0x9t
 | |
|         0x9t
 | |
|         0x9t
 | |
|         0x9t
 | |
|         0x8t
 | |
|         0x8t
 | |
|         0x8t
 | |
|         0x7t
 | |
|         0x7t
 | |
|         0x7t
 | |
|         0x6t
 | |
|         0x6t
 | |
|         0x6t
 | |
|         0x6t
 | |
|         0x5t
 | |
|         0x5t
 | |
|         0x5t
 | |
|         0x4t
 | |
|         0x4t
 | |
|         0x4t
 | |
|         0x3t
 | |
|         0x3t
 | |
|         0x3t
 | |
|         0x3t
 | |
|         0x2t
 | |
|         0x2t
 | |
|         0x2t
 | |
|         0x1t
 | |
|         0x1t
 | |
|         0x1t
 | |
|         0x0t
 | |
|         0x0t
 | |
|         0x0t
 | |
|     .end array-data
 | |
| 
 | |
|     :array_1
 | |
|     .array-data 8
 | |
|         0x1
 | |
|         0xa
 | |
|         0x64
 | |
|         0x3e8
 | |
|         0x2710
 | |
|         0x186a0
 | |
|         0xf4240
 | |
|         0x989680
 | |
|         0x5f5e100
 | |
|         0x3b9aca00
 | |
|         0x2540be400L
 | |
|         0x174876e800L
 | |
|         0xe8d4a51000L
 | |
|         0x9184e72a000L
 | |
|         0x5af3107a4000L
 | |
|         0x38d7ea4c68000L
 | |
|         0x2386f26fc10000L
 | |
|         0x16345785d8a0000L
 | |
|         0xde0b6b3a7640000L
 | |
|     .end array-data
 | |
| 
 | |
|     :array_2
 | |
|     .array-data 8
 | |
|         0x3
 | |
|         0x1f
 | |
|         0x13c
 | |
|         0xc5a
 | |
|         0x7b86
 | |
|         0x4d343
 | |
|         0x3040a5
 | |
|         0x1e28678
 | |
|         0x12d940b6
 | |
|         0xbc7c871cL
 | |
|         0x75cdd4719L
 | |
|         0x49a0a4c700L
 | |
|         0x2e0466fc608L
 | |
|         0x1cc2c05dbc53L
 | |
|         0x11f9b83a95b45L
 | |
|         0xb3c13249d90bbL
 | |
|         0x7058bf6e27a751L
 | |
|         0x463777a4d8c892dL
 | |
|         0x2be2aac7077d5bc3L    # 2.731041190138108E-97
 | |
|     .end array-data
 | |
| 
 | |
|     :array_3
 | |
|     .array-data 8
 | |
|         0x1
 | |
|         0x1
 | |
|         0x2
 | |
|         0x6
 | |
|         0x18
 | |
|         0x78
 | |
|         0x2d0
 | |
|         0x13b0
 | |
|         0x9d80
 | |
|         0x58980
 | |
|         0x375f00
 | |
|         0x2611500
 | |
|         0x1c8cfc00
 | |
|         0x17328cc00L
 | |
|         0x144c3b2800L
 | |
|         0x13077775800L
 | |
|         0x130777758000L
 | |
|         0x1437eeecd8000L
 | |
|         0x16beecca730000L
 | |
|         0x1b02b9306890000L
 | |
|         0x21c3677c82b40000L
 | |
|     .end array-data
 | |
| 
 | |
|     :array_4
 | |
|     .array-data 4
 | |
|         0x7fffffff
 | |
|         0x7fffffff
 | |
|         0x7fffffff
 | |
|         0x3a25db
 | |
|         0x1dc79
 | |
|         0x3f2f
 | |
|         0x10f1
 | |
|         0x6c5
 | |
|         0x377
 | |
|         0x216
 | |
|         0x169
 | |
|         0x109
 | |
|         0xce
 | |
|         0xa9
 | |
|         0x8f
 | |
|         0x7d
 | |
|         0x6f
 | |
|         0x65
 | |
|         0x5e
 | |
|         0x58
 | |
|         0x53
 | |
|         0x4f
 | |
|         0x4c
 | |
|         0x4a
 | |
|         0x48
 | |
|         0x46
 | |
|         0x45
 | |
|         0x44
 | |
|         0x43
 | |
|         0x43
 | |
|         0x42
 | |
|         0x42
 | |
|         0x42
 | |
|         0x42
 | |
|     .end array-data
 | |
| 
 | |
|     :array_5
 | |
|     .array-data 4
 | |
|         0x7fffffff
 | |
|         0x7fffffff
 | |
|         0x7fffffff
 | |
|         0x285146
 | |
|         0x150eb
 | |
|         0x2dcc
 | |
|         0xc92
 | |
|         0x521
 | |
|         0x2ac
 | |
|         0x1a3
 | |
|         0x11f
 | |
|         0xd6
 | |
|         0xa9
 | |
|         0x8b
 | |
|         0x77
 | |
|         0x69
 | |
|         0x5f
 | |
|         0x57
 | |
|         0x51
 | |
|         0x4c
 | |
|         0x49
 | |
|         0x46
 | |
|         0x44
 | |
|         0x42
 | |
|         0x40
 | |
|         0x3f
 | |
|         0x3e
 | |
|         0x3e
 | |
|         0x3d
 | |
|         0x3d
 | |
|         0x3d
 | |
|     .end array-data
 | |
| 
 | |
|     :array_6
 | |
|     .array-data 8
 | |
|         0x473f6
 | |
|         0x1c1111acd0b9428L    # 3.1855675420061E-300
 | |
|     .end array-data
 | |
| 
 | |
|     :array_7
 | |
|     .array-data 8
 | |
|         0x34c91838
 | |
|         0xa10ad7d5c6610c1L
 | |
|         0x318a8c12ce9c70e7L    # 4.808051585655767E-70
 | |
|     .end array-data
 | |
| 
 | |
|     :array_8
 | |
|     .array-data 8
 | |
|         0x3fc6e038e0L
 | |
|         0xf
 | |
|         0x1b6ebec62L
 | |
|         0x386c87553e12cL
 | |
|     .end array-data
 | |
| 
 | |
|     :array_9
 | |
|     .array-data 8
 | |
|         0x2b5343fd6a30L
 | |
|         0x2
 | |
|         0x273abc
 | |
|         0xca2b9d9
 | |
|         0xdf8286ccL
 | |
|     .end array-data
 | |
| 
 | |
|     :array_a
 | |
|     .array-data 8
 | |
|         0x1c6b470864f682L
 | |
|         0x2
 | |
|         0x3c1c7396f6dL
 | |
|         0x2142e2e3f22de5cL
 | |
|         0x297105b6b7b29ddL
 | |
|         0x370eb221a5f176ddL    # 1.7205605495331308E-43
 | |
|     .end array-data
 | |
| 
 | |
|     :array_b
 | |
|     .array-data 8
 | |
|         0x81f23f390affe88L
 | |
|         0x2
 | |
|         0x70722e8f5cd0L
 | |
|         0x20cd6bd5ace2d1L
 | |
|         0x9bbc940c751630L
 | |
|         0xa90404784bfcb4dL    # 8.45563543651314E-258
 | |
|         0x1189b3f265c2b0c7L
 | |
|     .end array-data
 | |
| 
 | |
|     :array_c
 | |
|     .array-data 8
 | |
|         0x7fffffffffffffffL
 | |
|         0x2
 | |
|         0x145
 | |
|         0x249f
 | |
|         0x6e12
 | |
|         0x6e0d7
 | |
|         0x953d18
 | |
|         0x6b0191fe
 | |
|     .end array-data
 | |
| .end method
 | |
| 
 | |
| .method private constructor <init>()V
 | |
|     .locals 0
 | |
| 
 | |
|     .line 1
 | |
|     invoke-direct {p0}, Ljava/lang/Object;-><init>()V
 | |
| 
 | |
|     return-void
 | |
| .end method
 | |
| 
 | |
| .method public static binomial(II)J
 | |
|     .locals 11
 | |
| 
 | |
|     const-string v0, "n"
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {v0, p0}, Lcom/google/common/math/MathPreconditions;->checkNonNegative(Ljava/lang/String;I)I
 | |
| 
 | |
|     const-string v0, "k"
 | |
| 
 | |
|     .line 2
 | |
|     invoke-static {v0, p1}, Lcom/google/common/math/MathPreconditions;->checkNonNegative(Ljava/lang/String;I)I
 | |
| 
 | |
|     const/4 v0, 0x1
 | |
| 
 | |
|     if-gt p1, p0, :cond_0
 | |
| 
 | |
|     move v1, v0
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_0
 | |
|     const/4 v1, 0x0
 | |
| 
 | |
|     :goto_0
 | |
|     const-string v2, "k (%s) > n (%s)"
 | |
| 
 | |
|     .line 3
 | |
|     invoke-static {v1, v2, p1, p0}, Lcom/google/common/base/Preconditions;->checkArgument(ZLjava/lang/String;II)V
 | |
| 
 | |
|     shr-int/lit8 v1, p0, 0x1
 | |
| 
 | |
|     if-le p1, v1, :cond_1
 | |
| 
 | |
|     sub-int p1, p0, p1
 | |
| 
 | |
|     :cond_1
 | |
|     const-wide/16 v1, 0x1
 | |
| 
 | |
|     if-eqz p1, :cond_a
 | |
| 
 | |
|     if-eq p1, v0, :cond_9
 | |
| 
 | |
|     .line 4
 | |
|     sget-object v0, Lcom/google/common/math/LongMath;->factorials:[J
 | |
| 
 | |
|     array-length v3, v0
 | |
| 
 | |
|     if-ge p0, v3, :cond_2
 | |
| 
 | |
|     .line 5
 | |
|     aget-wide v1, v0, p0
 | |
| 
 | |
|     aget-wide v3, v0, p1
 | |
| 
 | |
|     sub-int/2addr p0, p1
 | |
| 
 | |
|     aget-wide p0, v0, p0
 | |
| 
 | |
|     mul-long/2addr v3, p0
 | |
| 
 | |
|     div-long/2addr v1, v3
 | |
| 
 | |
|     return-wide v1
 | |
| 
 | |
|     .line 6
 | |
|     :cond_2
 | |
|     sget-object v0, Lcom/google/common/math/LongMath;->biggestBinomials:[I
 | |
| 
 | |
|     array-length v3, v0
 | |
| 
 | |
|     if-ge p1, v3, :cond_8
 | |
| 
 | |
|     aget v0, v0, p1
 | |
| 
 | |
|     if-le p0, v0, :cond_3
 | |
| 
 | |
|     goto :goto_4
 | |
| 
 | |
|     .line 7
 | |
|     :cond_3
 | |
|     sget-object v0, Lcom/google/common/math/LongMath;->biggestSimpleBinomials:[I
 | |
| 
 | |
|     array-length v3, v0
 | |
| 
 | |
|     const/4 v4, 0x2
 | |
| 
 | |
|     if-ge p1, v3, :cond_5
 | |
| 
 | |
|     aget v0, v0, p1
 | |
| 
 | |
|     if-gt p0, v0, :cond_5
 | |
| 
 | |
|     add-int/lit8 v0, p0, -0x1
 | |
| 
 | |
|     int-to-long v1, p0
 | |
| 
 | |
|     :goto_1
 | |
|     if-gt v4, p1, :cond_4
 | |
| 
 | |
|     int-to-long v5, v0
 | |
| 
 | |
|     mul-long/2addr v1, v5
 | |
| 
 | |
|     int-to-long v5, v4
 | |
| 
 | |
|     .line 8
 | |
|     div-long/2addr v1, v5
 | |
| 
 | |
|     add-int/lit8 v0, v0, -0x1
 | |
| 
 | |
|     add-int/lit8 v4, v4, 0x1
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_4
 | |
|     return-wide v1
 | |
| 
 | |
|     :cond_5
 | |
|     int-to-long v5, p0
 | |
| 
 | |
|     .line 9
 | |
|     sget-object v0, Ljava/math/RoundingMode;->CEILING:Ljava/math/RoundingMode;
 | |
| 
 | |
|     invoke-static {v5, v6, v0}, Lcom/google/common/math/LongMath;->log2(JLjava/math/RoundingMode;)I
 | |
| 
 | |
|     move-result v0
 | |
| 
 | |
|     add-int/lit8 p0, p0, -0x1
 | |
| 
 | |
|     move v8, v0
 | |
| 
 | |
|     move v7, v4
 | |
| 
 | |
|     move-wide v3, v5
 | |
| 
 | |
|     move-wide v5, v1
 | |
| 
 | |
|     :goto_2
 | |
|     if-gt v7, p1, :cond_7
 | |
| 
 | |
|     add-int/2addr v8, v0
 | |
| 
 | |
|     const/16 v9, 0x3f
 | |
| 
 | |
|     if-ge v8, v9, :cond_6
 | |
| 
 | |
|     int-to-long v9, p0
 | |
| 
 | |
|     mul-long/2addr v3, v9
 | |
| 
 | |
|     int-to-long v9, v7
 | |
| 
 | |
|     mul-long/2addr v5, v9
 | |
| 
 | |
|     goto :goto_3
 | |
| 
 | |
|     .line 10
 | |
|     :cond_6
 | |
|     invoke-static/range {v1 .. v6}, Lcom/google/common/math/LongMath;->multiplyFraction(JJJ)J
 | |
| 
 | |
|     move-result-wide v1
 | |
| 
 | |
|     int-to-long v3, p0
 | |
| 
 | |
|     int-to-long v5, v7
 | |
| 
 | |
|     move v8, v0
 | |
| 
 | |
|     :goto_3
 | |
|     add-int/lit8 v7, v7, 0x1
 | |
| 
 | |
|     add-int/lit8 p0, p0, -0x1
 | |
| 
 | |
|     goto :goto_2
 | |
| 
 | |
|     .line 11
 | |
|     :cond_7
 | |
|     invoke-static/range {v1 .. v6}, Lcom/google/common/math/LongMath;->multiplyFraction(JJJ)J
 | |
| 
 | |
|     move-result-wide p0
 | |
| 
 | |
|     return-wide p0
 | |
| 
 | |
|     :cond_8
 | |
|     :goto_4
 | |
|     const-wide p0, 0x7fffffffffffffffL
 | |
| 
 | |
|     return-wide p0
 | |
| 
 | |
|     :cond_9
 | |
|     int-to-long p0, p0
 | |
| 
 | |
|     return-wide p0
 | |
| 
 | |
|     :cond_a
 | |
|     return-wide v1
 | |
| .end method
 | |
| 
 | |
| .method public static ceilingPowerOfTwo(J)J
 | |
|     .locals 3
 | |
|     .annotation build Lcom/google/common/annotations/Beta;
 | |
|     .end annotation
 | |
| 
 | |
|     const-string v0, "x"
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {v0, p0, p1}, Lcom/google/common/math/MathPreconditions;->checkPositive(Ljava/lang/String;J)J
 | |
| 
 | |
|     const-wide/high16 v0, 0x4000000000000000L    # 2.0
 | |
| 
 | |
|     cmp-long v0, p0, v0
 | |
| 
 | |
|     if-gtz v0, :cond_0
 | |
| 
 | |
|     const-wide/16 v0, 0x1
 | |
| 
 | |
|     sub-long/2addr p0, v0
 | |
| 
 | |
|     .line 2
 | |
|     invoke-static {p0, p1}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result p0
 | |
| 
 | |
|     neg-int p0, p0
 | |
| 
 | |
|     shl-long p0, v0, p0
 | |
| 
 | |
|     return-wide p0
 | |
| 
 | |
|     .line 3
 | |
|     :cond_0
 | |
|     new-instance v0, Ljava/lang/ArithmeticException;
 | |
| 
 | |
|     const/16 v1, 0x46
 | |
| 
 | |
|     new-instance v2, Ljava/lang/StringBuilder;
 | |
| 
 | |
|     invoke-direct {v2, v1}, Ljava/lang/StringBuilder;-><init>(I)V
 | |
| 
 | |
|     const-string v1, "ceilingPowerOfTwo("
 | |
| 
 | |
|     invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
 | |
| 
 | |
|     invoke-virtual {v2, p0, p1}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
 | |
| 
 | |
|     const-string p0, ") is not representable as a long"
 | |
| 
 | |
|     invoke-virtual {v2, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
 | |
| 
 | |
|     invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
 | |
| 
 | |
|     move-result-object p0
 | |
| 
 | |
|     invoke-direct {v0, p0}, Ljava/lang/ArithmeticException;-><init>(Ljava/lang/String;)V
 | |
| 
 | |
|     throw v0
 | |
| .end method
 | |
| 
 | |
| .method public static checkedAdd(JJ)J
 | |
|     .locals 10
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     add-long v0, p0, p2
 | |
| 
 | |
|     xor-long v2, p0, p2
 | |
| 
 | |
|     const-wide/16 v4, 0x0
 | |
| 
 | |
|     cmp-long v2, v2, v4
 | |
| 
 | |
|     const/4 v3, 0x1
 | |
| 
 | |
|     const/4 v6, 0x0
 | |
| 
 | |
|     if-gez v2, :cond_0
 | |
| 
 | |
|     move v2, v3
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_0
 | |
|     move v2, v6
 | |
| 
 | |
|     :goto_0
 | |
|     xor-long v7, p0, v0
 | |
| 
 | |
|     cmp-long v4, v7, v4
 | |
| 
 | |
|     if-ltz v4, :cond_1
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_1
 | |
|     move v3, v6
 | |
| 
 | |
|     :goto_1
 | |
|     or-int v4, v2, v3
 | |
| 
 | |
|     const-string v5, "checkedAdd"
 | |
| 
 | |
|     move-wide v6, p0
 | |
| 
 | |
|     move-wide v8, p2
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static/range {v4 .. v9}, Lcom/google/common/math/MathPreconditions;->checkNoOverflow(ZLjava/lang/String;JJ)V
 | |
| 
 | |
|     return-wide v0
 | |
| .end method
 | |
| 
 | |
| .method public static checkedMultiply(JJ)J
 | |
|     .locals 12
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {p0, p1}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result v0
 | |
| 
 | |
|     not-long v1, p0
 | |
| 
 | |
|     .line 2
 | |
|     invoke-static {v1, v2}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result v1
 | |
| 
 | |
|     add-int/2addr v1, v0
 | |
| 
 | |
|     .line 3
 | |
|     invoke-static {p2, p3}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result v0
 | |
| 
 | |
|     add-int/2addr v0, v1
 | |
| 
 | |
|     not-long v1, p2
 | |
| 
 | |
|     .line 4
 | |
|     invoke-static {v1, v2}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result v1
 | |
| 
 | |
|     add-int/2addr v1, v0
 | |
| 
 | |
|     const/16 v0, 0x41
 | |
| 
 | |
|     if-le v1, v0, :cond_0
 | |
| 
 | |
|     mul-long/2addr p0, p2
 | |
| 
 | |
|     return-wide p0
 | |
| 
 | |
|     :cond_0
 | |
|     const/16 v0, 0x40
 | |
| 
 | |
|     const/4 v2, 0x1
 | |
| 
 | |
|     const/4 v3, 0x0
 | |
| 
 | |
|     if-lt v1, v0, :cond_1
 | |
| 
 | |
|     move v4, v2
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_1
 | |
|     move v4, v3
 | |
| 
 | |
|     :goto_0
 | |
|     const-string v5, "checkedMultiply"
 | |
| 
 | |
|     move-wide v6, p0
 | |
| 
 | |
|     move-wide v8, p2
 | |
| 
 | |
|     .line 5
 | |
|     invoke-static/range {v4 .. v9}, Lcom/google/common/math/MathPreconditions;->checkNoOverflow(ZLjava/lang/String;JJ)V
 | |
| 
 | |
|     const-wide/16 v0, 0x0
 | |
| 
 | |
|     cmp-long v0, p0, v0
 | |
| 
 | |
|     if-ltz v0, :cond_2
 | |
| 
 | |
|     move v1, v2
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_2
 | |
|     move v1, v3
 | |
| 
 | |
|     :goto_1
 | |
|     const-wide/high16 v4, -0x8000000000000000L
 | |
| 
 | |
|     cmp-long v4, p2, v4
 | |
| 
 | |
|     if-eqz v4, :cond_3
 | |
| 
 | |
|     move v4, v2
 | |
| 
 | |
|     goto :goto_2
 | |
| 
 | |
|     :cond_3
 | |
|     move v4, v3
 | |
| 
 | |
|     :goto_2
 | |
|     or-int v5, v1, v4
 | |
| 
 | |
|     const-string v6, "checkedMultiply"
 | |
| 
 | |
|     move-wide v7, p0
 | |
| 
 | |
|     move-wide v9, p2
 | |
| 
 | |
|     .line 6
 | |
|     invoke-static/range {v5 .. v10}, Lcom/google/common/math/MathPreconditions;->checkNoOverflow(ZLjava/lang/String;JJ)V
 | |
| 
 | |
|     mul-long v4, p0, p2
 | |
| 
 | |
|     if-eqz v0, :cond_5
 | |
| 
 | |
|     .line 7
 | |
|     div-long v0, v4, p0
 | |
| 
 | |
|     cmp-long v0, v0, p2
 | |
| 
 | |
|     if-nez v0, :cond_4
 | |
| 
 | |
|     goto :goto_3
 | |
| 
 | |
|     :cond_4
 | |
|     move v6, v3
 | |
| 
 | |
|     goto :goto_4
 | |
| 
 | |
|     :cond_5
 | |
|     :goto_3
 | |
|     move v6, v2
 | |
| 
 | |
|     :goto_4
 | |
|     const-string v7, "checkedMultiply"
 | |
| 
 | |
|     move-wide v8, p0
 | |
| 
 | |
|     move-wide v10, p2
 | |
| 
 | |
|     invoke-static/range {v6 .. v11}, Lcom/google/common/math/MathPreconditions;->checkNoOverflow(ZLjava/lang/String;JJ)V
 | |
| 
 | |
|     return-wide v4
 | |
| .end method
 | |
| 
 | |
| .method public static checkedPow(JI)J
 | |
|     .locals 13
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     const-string v0, "exponent"
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {v0, p2}, Lcom/google/common/math/MathPreconditions;->checkNonNegative(Ljava/lang/String;I)I
 | |
| 
 | |
|     const-wide/16 v0, -0x2
 | |
| 
 | |
|     cmp-long v0, p0, v0
 | |
| 
 | |
|     const/4 v1, 0x0
 | |
| 
 | |
|     const/4 v4, 0x1
 | |
| 
 | |
|     if-ltz v0, :cond_0
 | |
| 
 | |
|     move v0, v4
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_0
 | |
|     move v0, v1
 | |
| 
 | |
|     :goto_0
 | |
|     const-wide/16 v7, 0x2
 | |
| 
 | |
|     cmp-long v5, p0, v7
 | |
| 
 | |
|     if-gtz v5, :cond_1
 | |
| 
 | |
|     move v5, v4
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_1
 | |
|     move v5, v1
 | |
| 
 | |
|     :goto_1
 | |
|     and-int/2addr v0, v5
 | |
| 
 | |
|     const-wide/16 v7, 0x1
 | |
| 
 | |
|     if-eqz v0, :cond_c
 | |
| 
 | |
|     long-to-int v0, p0
 | |
| 
 | |
|     const/4 v5, -0x2
 | |
| 
 | |
|     const-wide/16 v9, -0x1
 | |
| 
 | |
|     if-eq v0, v5, :cond_9
 | |
| 
 | |
|     const/4 v5, -0x1
 | |
| 
 | |
|     if-eq v0, v5, :cond_7
 | |
| 
 | |
|     if-eqz v0, :cond_5
 | |
| 
 | |
|     if-eq v0, v4, :cond_4
 | |
| 
 | |
|     const/4 v5, 0x2
 | |
| 
 | |
|     if-ne v0, v5, :cond_3
 | |
| 
 | |
|     const/16 v0, 0x3f
 | |
| 
 | |
|     if-ge p2, v0, :cond_2
 | |
| 
 | |
|     move v0, v4
 | |
| 
 | |
|     goto :goto_2
 | |
| 
 | |
|     :cond_2
 | |
|     move v0, v1
 | |
| 
 | |
|     :goto_2
 | |
|     int-to-long v4, p2
 | |
| 
 | |
|     const-string v1, "checkedPow"
 | |
| 
 | |
|     move-wide v2, p0
 | |
| 
 | |
|     .line 2
 | |
|     invoke-static/range {v0 .. v5}, Lcom/google/common/math/MathPreconditions;->checkNoOverflow(ZLjava/lang/String;JJ)V
 | |
| 
 | |
|     shl-long v0, v7, p2
 | |
| 
 | |
|     return-wide v0
 | |
| 
 | |
|     .line 3
 | |
|     :cond_3
 | |
|     new-instance v0, Ljava/lang/AssertionError;
 | |
| 
 | |
|     invoke-direct {v0}, Ljava/lang/AssertionError;-><init>()V
 | |
| 
 | |
|     throw v0
 | |
| 
 | |
|     :cond_4
 | |
|     return-wide v7
 | |
| 
 | |
|     :cond_5
 | |
|     if-nez p2, :cond_6
 | |
| 
 | |
|     goto :goto_3
 | |
| 
 | |
|     :cond_6
 | |
|     const-wide/16 v7, 0x0
 | |
| 
 | |
|     :goto_3
 | |
|     return-wide v7
 | |
| 
 | |
|     :cond_7
 | |
|     and-int/lit8 v0, p2, 0x1
 | |
| 
 | |
|     if-nez v0, :cond_8
 | |
| 
 | |
|     goto :goto_4
 | |
| 
 | |
|     :cond_8
 | |
|     move-wide v7, v9
 | |
| 
 | |
|     :goto_4
 | |
|     return-wide v7
 | |
| 
 | |
|     :cond_9
 | |
|     const/16 v0, 0x40
 | |
| 
 | |
|     if-ge p2, v0, :cond_a
 | |
| 
 | |
|     move v0, v4
 | |
| 
 | |
|     goto :goto_5
 | |
| 
 | |
|     :cond_a
 | |
|     move v0, v1
 | |
| 
 | |
|     :goto_5
 | |
|     int-to-long v4, p2
 | |
| 
 | |
|     const-string v1, "checkedPow"
 | |
| 
 | |
|     move-wide v2, p0
 | |
| 
 | |
|     .line 4
 | |
|     invoke-static/range {v0 .. v5}, Lcom/google/common/math/MathPreconditions;->checkNoOverflow(ZLjava/lang/String;JJ)V
 | |
| 
 | |
|     and-int/lit8 v0, p2, 0x1
 | |
| 
 | |
|     if-nez v0, :cond_b
 | |
| 
 | |
|     shl-long v0, v7, p2
 | |
| 
 | |
|     goto :goto_6
 | |
| 
 | |
|     :cond_b
 | |
|     shl-long v0, v9, p2
 | |
| 
 | |
|     :goto_6
 | |
|     return-wide v0
 | |
| 
 | |
|     :cond_c
 | |
|     move-wide v2, p0
 | |
| 
 | |
|     move v6, p2
 | |
| 
 | |
|     :goto_7
 | |
|     if-eqz v6, :cond_11
 | |
| 
 | |
|     if-eq v6, v4, :cond_10
 | |
| 
 | |
|     and-int/lit8 v0, v6, 0x1
 | |
| 
 | |
|     if-eqz v0, :cond_d
 | |
| 
 | |
|     .line 5
 | |
|     invoke-static {v7, v8, v2, v3}, Lcom/google/common/math/LongMath;->checkedMultiply(JJ)J
 | |
| 
 | |
|     move-result-wide v7
 | |
| 
 | |
|     :cond_d
 | |
|     move-wide v11, v7
 | |
| 
 | |
|     shr-int/lit8 v0, v6, 0x1
 | |
| 
 | |
|     if-lez v0, :cond_f
 | |
| 
 | |
|     const-wide v5, -0xb504f333L
 | |
| 
 | |
|     cmp-long v5, v5, v2
 | |
| 
 | |
|     if-gtz v5, :cond_e
 | |
| 
 | |
|     const-wide v5, 0xb504f333L
 | |
| 
 | |
|     cmp-long v5, v2, v5
 | |
| 
 | |
|     if-gtz v5, :cond_e
 | |
| 
 | |
|     move v5, v4
 | |
| 
 | |
|     goto :goto_8
 | |
| 
 | |
|     :cond_e
 | |
|     move v5, v1
 | |
| 
 | |
|     :goto_8
 | |
|     int-to-long v9, v0
 | |
| 
 | |
|     const-string v6, "checkedPow"
 | |
| 
 | |
|     move-wide v7, v2
 | |
| 
 | |
|     .line 6
 | |
|     invoke-static/range {v5 .. v10}, Lcom/google/common/math/MathPreconditions;->checkNoOverflow(ZLjava/lang/String;JJ)V
 | |
| 
 | |
|     mul-long/2addr v2, v2
 | |
| 
 | |
|     :cond_f
 | |
|     move v6, v0
 | |
| 
 | |
|     move-wide v7, v11
 | |
| 
 | |
|     goto :goto_7
 | |
| 
 | |
|     .line 7
 | |
|     :cond_10
 | |
|     invoke-static {v7, v8, v2, v3}, Lcom/google/common/math/LongMath;->checkedMultiply(JJ)J
 | |
| 
 | |
|     move-result-wide v0
 | |
| 
 | |
|     return-wide v0
 | |
| 
 | |
|     :cond_11
 | |
|     return-wide v7
 | |
| .end method
 | |
| 
 | |
| .method public static checkedSubtract(JJ)J
 | |
|     .locals 10
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     sub-long v0, p0, p2
 | |
| 
 | |
|     xor-long v2, p0, p2
 | |
| 
 | |
|     const-wide/16 v4, 0x0
 | |
| 
 | |
|     cmp-long v2, v2, v4
 | |
| 
 | |
|     const/4 v3, 0x1
 | |
| 
 | |
|     const/4 v6, 0x0
 | |
| 
 | |
|     if-ltz v2, :cond_0
 | |
| 
 | |
|     move v2, v3
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_0
 | |
|     move v2, v6
 | |
| 
 | |
|     :goto_0
 | |
|     xor-long v7, p0, v0
 | |
| 
 | |
|     cmp-long v4, v7, v4
 | |
| 
 | |
|     if-ltz v4, :cond_1
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_1
 | |
|     move v3, v6
 | |
| 
 | |
|     :goto_1
 | |
|     or-int v4, v2, v3
 | |
| 
 | |
|     const-string v5, "checkedSubtract"
 | |
| 
 | |
|     move-wide v6, p0
 | |
| 
 | |
|     move-wide v8, p2
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static/range {v4 .. v9}, Lcom/google/common/math/MathPreconditions;->checkNoOverflow(ZLjava/lang/String;JJ)V
 | |
| 
 | |
|     return-wide v0
 | |
| .end method
 | |
| 
 | |
| .method public static divide(JJLjava/math/RoundingMode;)J
 | |
|     .locals 9
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {p4}, Lcom/google/common/base/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
 | |
| 
 | |
|     .line 2
 | |
|     div-long v0, p0, p2
 | |
| 
 | |
|     mul-long v2, p2, v0
 | |
| 
 | |
|     sub-long v2, p0, v2
 | |
| 
 | |
|     const-wide/16 v4, 0x0
 | |
| 
 | |
|     cmp-long v6, v2, v4
 | |
| 
 | |
|     if-nez v6, :cond_0
 | |
| 
 | |
|     return-wide v0
 | |
| 
 | |
|     :cond_0
 | |
|     xor-long/2addr p0, p2
 | |
| 
 | |
|     const/16 v7, 0x3f
 | |
| 
 | |
|     shr-long/2addr p0, v7
 | |
| 
 | |
|     long-to-int p0, p0
 | |
| 
 | |
|     const/4 p1, 0x1
 | |
| 
 | |
|     or-int/2addr p0, p1
 | |
| 
 | |
|     .line 3
 | |
|     sget-object v7, Lcom/google/common/math/LongMath$1;->$SwitchMap$java$math$RoundingMode:[I
 | |
| 
 | |
|     invoke-virtual {p4}, Ljava/math/RoundingMode;->ordinal()I
 | |
| 
 | |
|     move-result v8
 | |
| 
 | |
|     aget v7, v7, v8
 | |
| 
 | |
|     const/4 v8, 0x0
 | |
| 
 | |
|     packed-switch v7, :pswitch_data_0
 | |
| 
 | |
|     .line 4
 | |
|     new-instance p0, Ljava/lang/AssertionError;
 | |
| 
 | |
|     invoke-direct {p0}, Ljava/lang/AssertionError;-><init>()V
 | |
| 
 | |
|     throw p0
 | |
| 
 | |
|     .line 5
 | |
|     :pswitch_0
 | |
|     invoke-static {v2, v3}, Ljava/lang/Math;->abs(J)J
 | |
| 
 | |
|     move-result-wide v2
 | |
| 
 | |
|     .line 6
 | |
|     invoke-static {p2, p3}, Ljava/lang/Math;->abs(J)J
 | |
| 
 | |
|     move-result-wide p2
 | |
| 
 | |
|     sub-long/2addr p2, v2
 | |
| 
 | |
|     sub-long/2addr v2, p2
 | |
| 
 | |
|     cmp-long p2, v2, v4
 | |
| 
 | |
|     if-nez p2, :cond_4
 | |
| 
 | |
|     .line 7
 | |
|     sget-object p2, Ljava/math/RoundingMode;->HALF_UP:Ljava/math/RoundingMode;
 | |
| 
 | |
|     if-ne p4, p2, :cond_1
 | |
| 
 | |
|     move p2, p1
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_1
 | |
|     move p2, v8
 | |
| 
 | |
|     :goto_0
 | |
|     sget-object p3, Ljava/math/RoundingMode;->HALF_EVEN:Ljava/math/RoundingMode;
 | |
| 
 | |
|     if-ne p4, p3, :cond_2
 | |
| 
 | |
|     move p3, p1
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_2
 | |
|     move p3, v8
 | |
| 
 | |
|     :goto_1
 | |
|     const-wide/16 v2, 0x1
 | |
| 
 | |
|     and-long/2addr v2, v0
 | |
| 
 | |
|     cmp-long p4, v2, v4
 | |
| 
 | |
|     if-eqz p4, :cond_3
 | |
| 
 | |
|     goto :goto_2
 | |
| 
 | |
|     :cond_3
 | |
|     move p1, v8
 | |
| 
 | |
|     :goto_2
 | |
|     and-int/2addr p1, p3
 | |
| 
 | |
|     or-int/2addr p1, p2
 | |
| 
 | |
|     goto :goto_4
 | |
| 
 | |
|     :cond_4
 | |
|     if-lez p2, :cond_6
 | |
| 
 | |
|     goto :goto_4
 | |
| 
 | |
|     :pswitch_1
 | |
|     if-lez p0, :cond_6
 | |
| 
 | |
|     goto :goto_4
 | |
| 
 | |
|     :pswitch_2
 | |
|     if-gez p0, :cond_6
 | |
| 
 | |
|     goto :goto_4
 | |
| 
 | |
|     :pswitch_3
 | |
|     if-nez v6, :cond_5
 | |
| 
 | |
|     goto :goto_3
 | |
| 
 | |
|     :cond_5
 | |
|     move p1, v8
 | |
| 
 | |
|     .line 8
 | |
|     :goto_3
 | |
|     invoke-static {p1}, Lcom/google/common/math/MathPreconditions;->checkRoundingUnnecessary(Z)V
 | |
| 
 | |
|     :cond_6
 | |
|     :pswitch_4
 | |
|     move p1, v8
 | |
| 
 | |
|     :goto_4
 | |
|     :pswitch_5
 | |
|     if-eqz p1, :cond_7
 | |
| 
 | |
|     int-to-long p0, p0
 | |
| 
 | |
|     add-long/2addr v0, p0
 | |
| 
 | |
|     :cond_7
 | |
|     return-wide v0
 | |
| 
 | |
|     nop
 | |
| 
 | |
|     :pswitch_data_0
 | |
|     .packed-switch 0x1
 | |
|         :pswitch_3
 | |
|         :pswitch_4
 | |
|         :pswitch_2
 | |
|         :pswitch_5
 | |
|         :pswitch_1
 | |
|         :pswitch_0
 | |
|         :pswitch_0
 | |
|         :pswitch_0
 | |
|     .end packed-switch
 | |
| .end method
 | |
| 
 | |
| .method public static factorial(I)J
 | |
|     .locals 3
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     const-string v0, "n"
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {v0, p0}, Lcom/google/common/math/MathPreconditions;->checkNonNegative(Ljava/lang/String;I)I
 | |
| 
 | |
|     .line 2
 | |
|     sget-object v0, Lcom/google/common/math/LongMath;->factorials:[J
 | |
| 
 | |
|     array-length v1, v0
 | |
| 
 | |
|     if-ge p0, v1, :cond_0
 | |
| 
 | |
|     aget-wide v1, v0, p0
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_0
 | |
|     const-wide v1, 0x7fffffffffffffffL
 | |
| 
 | |
|     :goto_0
 | |
|     return-wide v1
 | |
| .end method
 | |
| 
 | |
| .method public static fitsInInt(J)Z
 | |
|     .locals 2
 | |
| 
 | |
|     long-to-int v0, p0
 | |
| 
 | |
|     int-to-long v0, v0
 | |
| 
 | |
|     cmp-long p0, v0, p0
 | |
| 
 | |
|     if-nez p0, :cond_0
 | |
| 
 | |
|     const/4 p0, 0x1
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_0
 | |
|     const/4 p0, 0x0
 | |
| 
 | |
|     :goto_0
 | |
|     return p0
 | |
| .end method
 | |
| 
 | |
| .method public static floorPowerOfTwo(J)J
 | |
|     .locals 2
 | |
|     .annotation build Lcom/google/common/annotations/Beta;
 | |
|     .end annotation
 | |
| 
 | |
|     const-string v0, "x"
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {v0, p0, p1}, Lcom/google/common/math/MathPreconditions;->checkPositive(Ljava/lang/String;J)J
 | |
| 
 | |
|     .line 2
 | |
|     invoke-static {p0, p1}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result p0
 | |
| 
 | |
|     rsub-int/lit8 p0, p0, 0x3f
 | |
| 
 | |
|     const-wide/16 v0, 0x1
 | |
| 
 | |
|     shl-long p0, v0, p0
 | |
| 
 | |
|     return-wide p0
 | |
| .end method
 | |
| 
 | |
| .method public static gcd(JJ)J
 | |
|     .locals 4
 | |
| 
 | |
|     const-string v0, "a"
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {v0, p0, p1}, Lcom/google/common/math/MathPreconditions;->checkNonNegative(Ljava/lang/String;J)J
 | |
| 
 | |
|     const-string v0, "b"
 | |
| 
 | |
|     .line 2
 | |
|     invoke-static {v0, p2, p3}, Lcom/google/common/math/MathPreconditions;->checkNonNegative(Ljava/lang/String;J)J
 | |
| 
 | |
|     const-wide/16 v0, 0x0
 | |
| 
 | |
|     cmp-long v2, p0, v0
 | |
| 
 | |
|     if-nez v2, :cond_0
 | |
| 
 | |
|     return-wide p2
 | |
| 
 | |
|     :cond_0
 | |
|     cmp-long v0, p2, v0
 | |
| 
 | |
|     if-nez v0, :cond_1
 | |
| 
 | |
|     return-wide p0
 | |
| 
 | |
|     .line 3
 | |
|     :cond_1
 | |
|     invoke-static {p0, p1}, Ljava/lang/Long;->numberOfTrailingZeros(J)I
 | |
| 
 | |
|     move-result v0
 | |
| 
 | |
|     shr-long/2addr p0, v0
 | |
| 
 | |
|     .line 4
 | |
|     invoke-static {p2, p3}, Ljava/lang/Long;->numberOfTrailingZeros(J)I
 | |
| 
 | |
|     move-result v1
 | |
| 
 | |
|     shr-long/2addr p2, v1
 | |
| 
 | |
|     :goto_0
 | |
|     cmp-long v2, p0, p2
 | |
| 
 | |
|     if-eqz v2, :cond_2
 | |
| 
 | |
|     sub-long/2addr p0, p2
 | |
| 
 | |
|     const/16 v2, 0x3f
 | |
| 
 | |
|     shr-long v2, p0, v2
 | |
| 
 | |
|     and-long/2addr v2, p0
 | |
| 
 | |
|     sub-long/2addr p0, v2
 | |
| 
 | |
|     sub-long/2addr p0, v2
 | |
| 
 | |
|     add-long/2addr p2, v2
 | |
| 
 | |
|     .line 5
 | |
|     invoke-static {p0, p1}, Ljava/lang/Long;->numberOfTrailingZeros(J)I
 | |
| 
 | |
|     move-result v2
 | |
| 
 | |
|     shr-long/2addr p0, v2
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     .line 6
 | |
|     :cond_2
 | |
|     invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I
 | |
| 
 | |
|     move-result p2
 | |
| 
 | |
|     shl-long/2addr p0, p2
 | |
| 
 | |
|     return-wide p0
 | |
| .end method
 | |
| 
 | |
| .method public static isPowerOfTwo(J)Z
 | |
|     .locals 7
 | |
| 
 | |
|     const-wide/16 v0, 0x0
 | |
| 
 | |
|     cmp-long v2, p0, v0
 | |
| 
 | |
|     const/4 v3, 0x1
 | |
| 
 | |
|     const/4 v4, 0x0
 | |
| 
 | |
|     if-lez v2, :cond_0
 | |
| 
 | |
|     move v2, v3
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_0
 | |
|     move v2, v4
 | |
| 
 | |
|     :goto_0
 | |
|     const-wide/16 v5, 0x1
 | |
| 
 | |
|     sub-long v5, p0, v5
 | |
| 
 | |
|     and-long/2addr p0, v5
 | |
| 
 | |
|     cmp-long p0, p0, v0
 | |
| 
 | |
|     if-nez p0, :cond_1
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_1
 | |
|     move v3, v4
 | |
| 
 | |
|     :goto_1
 | |
|     and-int p0, v2, v3
 | |
| 
 | |
|     return p0
 | |
| .end method
 | |
| 
 | |
| .method public static isPrime(J)Z
 | |
|     .locals 8
 | |
|     .annotation build Lcom/google/common/annotations/Beta;
 | |
|     .end annotation
 | |
| 
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     const-wide/16 v0, 0x2
 | |
| 
 | |
|     cmp-long v0, p0, v0
 | |
| 
 | |
|     const/4 v1, 0x0
 | |
| 
 | |
|     if-gez v0, :cond_0
 | |
| 
 | |
|     const-string v0, "n"
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {v0, p0, p1}, Lcom/google/common/math/MathPreconditions;->checkNonNegative(Ljava/lang/String;J)J
 | |
| 
 | |
|     return v1
 | |
| 
 | |
|     :cond_0
 | |
|     const-wide/16 v2, 0x42
 | |
| 
 | |
|     cmp-long v0, p0, v2
 | |
| 
 | |
|     const-wide/16 v2, 0x0
 | |
| 
 | |
|     const/4 v4, 0x1
 | |
| 
 | |
|     if-gez v0, :cond_2
 | |
| 
 | |
|     const-wide v5, 0xa08228828228a2bL
 | |
| 
 | |
|     long-to-int p0, p0
 | |
| 
 | |
|     add-int/lit8 p0, p0, -0x2
 | |
| 
 | |
|     shr-long p0, v5, p0
 | |
| 
 | |
|     const-wide/16 v5, 0x1
 | |
| 
 | |
|     and-long/2addr p0, v5
 | |
| 
 | |
|     cmp-long p0, p0, v2
 | |
| 
 | |
|     if-eqz p0, :cond_1
 | |
| 
 | |
|     move v1, v4
 | |
| 
 | |
|     :cond_1
 | |
|     return v1
 | |
| 
 | |
|     :cond_2
 | |
|     const v0, -0x208a2883
 | |
| 
 | |
|     const-wide/16 v5, 0x1e
 | |
| 
 | |
|     .line 2
 | |
|     rem-long v5, p0, v5
 | |
| 
 | |
|     long-to-int v5, v5
 | |
| 
 | |
|     shl-int v5, v4, v5
 | |
| 
 | |
|     and-int/2addr v0, v5
 | |
| 
 | |
|     if-eqz v0, :cond_3
 | |
| 
 | |
|     return v1
 | |
| 
 | |
|     :cond_3
 | |
|     const-wide/16 v5, 0x7
 | |
| 
 | |
|     .line 3
 | |
|     rem-long v5, p0, v5
 | |
| 
 | |
|     cmp-long v0, v5, v2
 | |
| 
 | |
|     if-eqz v0, :cond_a
 | |
| 
 | |
|     const-wide/16 v5, 0xb
 | |
| 
 | |
|     rem-long v5, p0, v5
 | |
| 
 | |
|     cmp-long v0, v5, v2
 | |
| 
 | |
|     if-eqz v0, :cond_a
 | |
| 
 | |
|     const-wide/16 v5, 0xd
 | |
| 
 | |
|     rem-long v5, p0, v5
 | |
| 
 | |
|     cmp-long v0, v5, v2
 | |
| 
 | |
|     if-nez v0, :cond_4
 | |
| 
 | |
|     goto :goto_2
 | |
| 
 | |
|     :cond_4
 | |
|     const-wide/16 v2, 0x121
 | |
| 
 | |
|     cmp-long v0, p0, v2
 | |
| 
 | |
|     if-gez v0, :cond_5
 | |
| 
 | |
|     return v4
 | |
| 
 | |
|     .line 4
 | |
|     :cond_5
 | |
|     sget-object v0, Lcom/google/common/math/LongMath;->millerRabinBaseSets:[[J
 | |
| 
 | |
|     array-length v2, v0
 | |
| 
 | |
|     move v3, v1
 | |
| 
 | |
|     :goto_0
 | |
|     if-ge v3, v2, :cond_9
 | |
| 
 | |
|     aget-object v5, v0, v3
 | |
| 
 | |
|     .line 5
 | |
|     aget-wide v6, v5, v1
 | |
| 
 | |
|     cmp-long v6, p0, v6
 | |
| 
 | |
|     if-gtz v6, :cond_8
 | |
| 
 | |
|     move v0, v4
 | |
| 
 | |
|     .line 6
 | |
|     :goto_1
 | |
|     array-length v2, v5
 | |
| 
 | |
|     if-ge v0, v2, :cond_7
 | |
| 
 | |
|     .line 7
 | |
|     aget-wide v2, v5, v0
 | |
| 
 | |
|     invoke-static {v2, v3, p0, p1}, Lcom/google/common/math/LongMath$MillerRabinTester;->test(JJ)Z
 | |
| 
 | |
|     move-result v2
 | |
| 
 | |
|     if-nez v2, :cond_6
 | |
| 
 | |
|     return v1
 | |
| 
 | |
|     :cond_6
 | |
|     add-int/lit8 v0, v0, 0x1
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_7
 | |
|     return v4
 | |
| 
 | |
|     :cond_8
 | |
|     add-int/lit8 v3, v3, 0x1
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     .line 8
 | |
|     :cond_9
 | |
|     new-instance p0, Ljava/lang/AssertionError;
 | |
| 
 | |
|     invoke-direct {p0}, Ljava/lang/AssertionError;-><init>()V
 | |
| 
 | |
|     throw p0
 | |
| 
 | |
|     :cond_a
 | |
|     :goto_2
 | |
|     return v1
 | |
| .end method
 | |
| 
 | |
| .method public static lessThanBranchFree(JJ)I
 | |
|     .locals 0
 | |
|     .annotation build Lcom/google/common/annotations/VisibleForTesting;
 | |
|     .end annotation
 | |
| 
 | |
|     sub-long/2addr p0, p2
 | |
| 
 | |
|     not-long p0, p0
 | |
| 
 | |
|     not-long p0, p0
 | |
| 
 | |
|     const/16 p2, 0x3f
 | |
| 
 | |
|     ushr-long/2addr p0, p2
 | |
| 
 | |
|     long-to-int p0, p0
 | |
| 
 | |
|     return p0
 | |
| .end method
 | |
| 
 | |
| .method public static log10(JLjava/math/RoundingMode;)I
 | |
|     .locals 4
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     const-string v0, "x"
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {v0, p0, p1}, Lcom/google/common/math/MathPreconditions;->checkPositive(Ljava/lang/String;J)J
 | |
| 
 | |
|     .line 2
 | |
|     invoke-static {p0, p1}, Lcom/google/common/math/LongMath;->log10Floor(J)I
 | |
| 
 | |
|     move-result v0
 | |
| 
 | |
|     .line 3
 | |
|     sget-object v1, Lcom/google/common/math/LongMath;->powersOf10:[J
 | |
| 
 | |
|     aget-wide v2, v1, v0
 | |
| 
 | |
|     .line 4
 | |
|     sget-object v1, Lcom/google/common/math/LongMath$1;->$SwitchMap$java$math$RoundingMode:[I
 | |
| 
 | |
|     invoke-virtual {p2}, Ljava/math/RoundingMode;->ordinal()I
 | |
| 
 | |
|     move-result p2
 | |
| 
 | |
|     aget p2, v1, p2
 | |
| 
 | |
|     packed-switch p2, :pswitch_data_0
 | |
| 
 | |
|     .line 5
 | |
|     new-instance p0, Ljava/lang/AssertionError;
 | |
| 
 | |
|     invoke-direct {p0}, Ljava/lang/AssertionError;-><init>()V
 | |
| 
 | |
|     throw p0
 | |
| 
 | |
|     .line 6
 | |
|     :pswitch_0
 | |
|     sget-object p2, Lcom/google/common/math/LongMath;->halfPowersOf10:[J
 | |
| 
 | |
|     aget-wide v1, p2, v0
 | |
| 
 | |
|     invoke-static {v1, v2, p0, p1}, Lcom/google/common/math/LongMath;->lessThanBranchFree(JJ)I
 | |
| 
 | |
|     move-result p0
 | |
| 
 | |
|     :goto_0
 | |
|     add-int/2addr p0, v0
 | |
| 
 | |
|     return p0
 | |
| 
 | |
|     .line 7
 | |
|     :pswitch_1
 | |
|     invoke-static {v2, v3, p0, p1}, Lcom/google/common/math/LongMath;->lessThanBranchFree(JJ)I
 | |
| 
 | |
|     move-result p0
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :pswitch_2
 | |
|     cmp-long p0, p0, v2
 | |
| 
 | |
|     if-nez p0, :cond_0
 | |
| 
 | |
|     const/4 p0, 0x1
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_0
 | |
|     const/4 p0, 0x0
 | |
| 
 | |
|     .line 8
 | |
|     :goto_1
 | |
|     invoke-static {p0}, Lcom/google/common/math/MathPreconditions;->checkRoundingUnnecessary(Z)V
 | |
| 
 | |
|     :pswitch_3
 | |
|     return v0
 | |
| 
 | |
|     :pswitch_data_0
 | |
|     .packed-switch 0x1
 | |
|         :pswitch_2
 | |
|         :pswitch_3
 | |
|         :pswitch_3
 | |
|         :pswitch_1
 | |
|         :pswitch_1
 | |
|         :pswitch_0
 | |
|         :pswitch_0
 | |
|         :pswitch_0
 | |
|     .end packed-switch
 | |
| .end method
 | |
| 
 | |
| .method public static log10Floor(J)I
 | |
|     .locals 4
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     .line 1
 | |
|     sget-object v0, Lcom/google/common/math/LongMath;->maxLog10ForLeadingZeros:[B
 | |
| 
 | |
|     invoke-static {p0, p1}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result v1
 | |
| 
 | |
|     aget-byte v0, v0, v1
 | |
| 
 | |
|     .line 2
 | |
|     sget-object v1, Lcom/google/common/math/LongMath;->powersOf10:[J
 | |
| 
 | |
|     aget-wide v2, v1, v0
 | |
| 
 | |
|     invoke-static {p0, p1, v2, v3}, Lcom/google/common/math/LongMath;->lessThanBranchFree(JJ)I
 | |
| 
 | |
|     move-result p0
 | |
| 
 | |
|     sub-int/2addr v0, p0
 | |
| 
 | |
|     return v0
 | |
| .end method
 | |
| 
 | |
| .method public static log2(JLjava/math/RoundingMode;)I
 | |
|     .locals 2
 | |
| 
 | |
|     const-string v0, "x"
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {v0, p0, p1}, Lcom/google/common/math/MathPreconditions;->checkPositive(Ljava/lang/String;J)J
 | |
| 
 | |
|     .line 2
 | |
|     sget-object v0, Lcom/google/common/math/LongMath$1;->$SwitchMap$java$math$RoundingMode:[I
 | |
| 
 | |
|     invoke-virtual {p2}, Ljava/math/RoundingMode;->ordinal()I
 | |
| 
 | |
|     move-result p2
 | |
| 
 | |
|     aget p2, v0, p2
 | |
| 
 | |
|     packed-switch p2, :pswitch_data_0
 | |
| 
 | |
|     .line 3
 | |
|     new-instance p0, Ljava/lang/AssertionError;
 | |
| 
 | |
|     const-string p1, "impossible"
 | |
| 
 | |
|     invoke-direct {p0, p1}, Ljava/lang/AssertionError;-><init>(Ljava/lang/Object;)V
 | |
| 
 | |
|     throw p0
 | |
| 
 | |
|     .line 4
 | |
|     :pswitch_0
 | |
|     invoke-static {p0, p1}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result p2
 | |
| 
 | |
|     const-wide v0, -0x4afb0ccc06219b7cL    # -2.734104117489491E-53
 | |
| 
 | |
|     ushr-long/2addr v0, p2
 | |
| 
 | |
|     rsub-int/lit8 p2, p2, 0x3f
 | |
| 
 | |
|     .line 5
 | |
|     invoke-static {v0, v1, p0, p1}, Lcom/google/common/math/LongMath;->lessThanBranchFree(JJ)I
 | |
| 
 | |
|     move-result p0
 | |
| 
 | |
|     add-int/2addr p0, p2
 | |
| 
 | |
|     return p0
 | |
| 
 | |
|     :pswitch_1
 | |
|     const-wide/16 v0, 0x1
 | |
| 
 | |
|     sub-long/2addr p0, v0
 | |
| 
 | |
|     .line 6
 | |
|     invoke-static {p0, p1}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result p0
 | |
| 
 | |
|     rsub-int/lit8 p0, p0, 0x40
 | |
| 
 | |
|     return p0
 | |
| 
 | |
|     .line 7
 | |
|     :pswitch_2
 | |
|     invoke-static {p0, p1}, Lcom/google/common/math/LongMath;->isPowerOfTwo(J)Z
 | |
| 
 | |
|     move-result p2
 | |
| 
 | |
|     invoke-static {p2}, Lcom/google/common/math/MathPreconditions;->checkRoundingUnnecessary(Z)V
 | |
| 
 | |
|     .line 8
 | |
|     :pswitch_3
 | |
|     invoke-static {p0, p1}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result p0
 | |
| 
 | |
|     rsub-int/lit8 p0, p0, 0x3f
 | |
| 
 | |
|     return p0
 | |
| 
 | |
|     :pswitch_data_0
 | |
|     .packed-switch 0x1
 | |
|         :pswitch_2
 | |
|         :pswitch_3
 | |
|         :pswitch_3
 | |
|         :pswitch_1
 | |
|         :pswitch_1
 | |
|         :pswitch_0
 | |
|         :pswitch_0
 | |
|         :pswitch_0
 | |
|     .end packed-switch
 | |
| .end method
 | |
| 
 | |
| .method public static mean(JJ)J
 | |
|     .locals 2
 | |
| 
 | |
|     and-long v0, p0, p2
 | |
| 
 | |
|     xor-long/2addr p0, p2
 | |
| 
 | |
|     const/4 p2, 0x1
 | |
| 
 | |
|     shr-long/2addr p0, p2
 | |
| 
 | |
|     add-long/2addr v0, p0
 | |
| 
 | |
|     return-wide v0
 | |
| .end method
 | |
| 
 | |
| .method public static mod(JI)I
 | |
|     .locals 2
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     int-to-long v0, p2
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {p0, p1, v0, v1}, Lcom/google/common/math/LongMath;->mod(JJ)J
 | |
| 
 | |
|     move-result-wide p0
 | |
| 
 | |
|     long-to-int p0, p0
 | |
| 
 | |
|     return p0
 | |
| .end method
 | |
| 
 | |
| .method public static mod(JJ)J
 | |
|     .locals 3
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     const-wide/16 v0, 0x0
 | |
| 
 | |
|     cmp-long v2, p2, v0
 | |
| 
 | |
|     if-lez v2, :cond_1
 | |
| 
 | |
|     .line 2
 | |
|     rem-long/2addr p0, p2
 | |
| 
 | |
|     cmp-long v0, p0, v0
 | |
| 
 | |
|     if-ltz v0, :cond_0
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_0
 | |
|     add-long/2addr p0, p2
 | |
| 
 | |
|     :goto_0
 | |
|     return-wide p0
 | |
| 
 | |
|     .line 3
 | |
|     :cond_1
 | |
|     new-instance p0, Ljava/lang/ArithmeticException;
 | |
| 
 | |
|     const-string p1, "Modulus must be positive"
 | |
| 
 | |
|     invoke-direct {p0, p1}, Ljava/lang/ArithmeticException;-><init>(Ljava/lang/String;)V
 | |
| 
 | |
|     throw p0
 | |
| .end method
 | |
| 
 | |
| .method public static multiplyFraction(JJJ)J
 | |
|     .locals 2
 | |
| 
 | |
|     const-wide/16 v0, 0x1
 | |
| 
 | |
|     cmp-long v0, p0, v0
 | |
| 
 | |
|     if-nez v0, :cond_0
 | |
| 
 | |
|     .line 1
 | |
|     div-long/2addr p2, p4
 | |
| 
 | |
|     return-wide p2
 | |
| 
 | |
|     .line 2
 | |
|     :cond_0
 | |
|     invoke-static {p0, p1, p4, p5}, Lcom/google/common/math/LongMath;->gcd(JJ)J
 | |
| 
 | |
|     move-result-wide v0
 | |
| 
 | |
|     .line 3
 | |
|     div-long/2addr p0, v0
 | |
| 
 | |
|     .line 4
 | |
|     div-long/2addr p4, v0
 | |
| 
 | |
|     .line 5
 | |
|     div-long/2addr p2, p4
 | |
| 
 | |
|     mul-long/2addr p2, p0
 | |
| 
 | |
|     return-wide p2
 | |
| .end method
 | |
| 
 | |
| .method public static pow(JI)J
 | |
|     .locals 8
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     const-string v0, "exponent"
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {v0, p2}, Lcom/google/common/math/MathPreconditions;->checkNonNegative(Ljava/lang/String;I)I
 | |
| 
 | |
|     const-wide/16 v0, -0x2
 | |
| 
 | |
|     cmp-long v0, v0, p0
 | |
| 
 | |
|     const/4 v1, 0x1
 | |
| 
 | |
|     const-wide/16 v2, 0x1
 | |
| 
 | |
|     if-gtz v0, :cond_a
 | |
| 
 | |
|     const-wide/16 v4, 0x2
 | |
| 
 | |
|     cmp-long v0, p0, v4
 | |
| 
 | |
|     if-gtz v0, :cond_a
 | |
| 
 | |
|     long-to-int p0, p0
 | |
| 
 | |
|     const/4 p1, -0x2
 | |
| 
 | |
|     const/16 v0, 0x40
 | |
| 
 | |
|     const-wide/16 v4, 0x0
 | |
| 
 | |
|     if-eq p0, p1, :cond_7
 | |
| 
 | |
|     const/4 p1, -0x1
 | |
| 
 | |
|     if-eq p0, p1, :cond_5
 | |
| 
 | |
|     if-eqz p0, :cond_3
 | |
| 
 | |
|     if-eq p0, v1, :cond_2
 | |
| 
 | |
|     const/4 p1, 0x2
 | |
| 
 | |
|     if-ne p0, p1, :cond_1
 | |
| 
 | |
|     if-ge p2, v0, :cond_0
 | |
| 
 | |
|     shl-long v4, v2, p2
 | |
| 
 | |
|     :cond_0
 | |
|     return-wide v4
 | |
| 
 | |
|     .line 2
 | |
|     :cond_1
 | |
|     new-instance p0, Ljava/lang/AssertionError;
 | |
| 
 | |
|     invoke-direct {p0}, Ljava/lang/AssertionError;-><init>()V
 | |
| 
 | |
|     throw p0
 | |
| 
 | |
|     :cond_2
 | |
|     return-wide v2
 | |
| 
 | |
|     :cond_3
 | |
|     if-nez p2, :cond_4
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_4
 | |
|     move-wide v2, v4
 | |
| 
 | |
|     :goto_0
 | |
|     return-wide v2
 | |
| 
 | |
|     :cond_5
 | |
|     and-int/lit8 p0, p2, 0x1
 | |
| 
 | |
|     if-nez p0, :cond_6
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_6
 | |
|     const-wide/16 v2, -0x1
 | |
| 
 | |
|     :goto_1
 | |
|     return-wide v2
 | |
| 
 | |
|     :cond_7
 | |
|     if-ge p2, v0, :cond_9
 | |
| 
 | |
|     and-int/lit8 p0, p2, 0x1
 | |
| 
 | |
|     if-nez p0, :cond_8
 | |
| 
 | |
|     shl-long p0, v2, p2
 | |
| 
 | |
|     goto :goto_2
 | |
| 
 | |
|     :cond_8
 | |
|     shl-long p0, v2, p2
 | |
| 
 | |
|     neg-long p0, p0
 | |
| 
 | |
|     :goto_2
 | |
|     return-wide p0
 | |
| 
 | |
|     :cond_9
 | |
|     return-wide v4
 | |
| 
 | |
|     :cond_a
 | |
|     move-wide v4, v2
 | |
| 
 | |
|     :goto_3
 | |
|     if-eqz p2, :cond_d
 | |
| 
 | |
|     if-eq p2, v1, :cond_c
 | |
| 
 | |
|     and-int/lit8 v0, p2, 0x1
 | |
| 
 | |
|     if-nez v0, :cond_b
 | |
| 
 | |
|     move-wide v6, v2
 | |
| 
 | |
|     goto :goto_4
 | |
| 
 | |
|     :cond_b
 | |
|     move-wide v6, p0
 | |
| 
 | |
|     :goto_4
 | |
|     mul-long/2addr v4, v6
 | |
| 
 | |
|     mul-long/2addr p0, p0
 | |
| 
 | |
|     shr-int/lit8 p2, p2, 0x1
 | |
| 
 | |
|     goto :goto_3
 | |
| 
 | |
|     :cond_c
 | |
|     mul-long/2addr v4, p0
 | |
| 
 | |
|     :cond_d
 | |
|     return-wide v4
 | |
| .end method
 | |
| 
 | |
| .method public static roundToDouble(JLjava/math/RoundingMode;)D
 | |
|     .locals 20
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     move-wide/from16 v0, p0
 | |
| 
 | |
|     long-to-double v2, v0
 | |
| 
 | |
|     double-to-long v4, v2
 | |
| 
 | |
|     const-wide v6, 0x7fffffffffffffffL
 | |
| 
 | |
|     cmp-long v8, v4, v6
 | |
| 
 | |
|     if-nez v8, :cond_0
 | |
| 
 | |
|     const/4 v8, -0x1
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     .line 1
 | |
|     :cond_0
 | |
|     invoke-static {v0, v1, v4, v5}, Lcom/google/common/primitives/Longs;->compare(JJ)I
 | |
| 
 | |
|     move-result v8
 | |
| 
 | |
|     .line 2
 | |
|     :goto_0
 | |
|     sget-object v9, Lcom/google/common/math/LongMath$1;->$SwitchMap$java$math$RoundingMode:[I
 | |
| 
 | |
|     invoke-virtual/range {p2 .. p2}, Ljava/math/RoundingMode;->ordinal()I
 | |
| 
 | |
|     move-result v10
 | |
| 
 | |
|     aget v10, v9, v10
 | |
| 
 | |
|     const-string v11, "impossible"
 | |
| 
 | |
|     packed-switch v10, :pswitch_data_0
 | |
| 
 | |
|     .line 3
 | |
|     new-instance v0, Ljava/lang/AssertionError;
 | |
| 
 | |
|     invoke-direct {v0, v11}, Ljava/lang/AssertionError;-><init>(Ljava/lang/Object;)V
 | |
| 
 | |
|     throw v0
 | |
| 
 | |
|     :pswitch_0
 | |
|     if-ltz v8, :cond_1
 | |
| 
 | |
|     .line 4
 | |
|     invoke-static {v2, v3}, Ljava/lang/Math;->nextUp(D)D
 | |
| 
 | |
|     move-result-wide v14
 | |
| 
 | |
|     .line 5
 | |
|     invoke-static {v14, v15}, Ljava/lang/Math;->ceil(D)D
 | |
| 
 | |
|     move-result-wide v12
 | |
| 
 | |
|     double-to-long v12, v12
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     .line 6
 | |
|     :cond_1
 | |
|     invoke-static {v2, v3}, Lcom/google/common/math/DoubleUtils;->nextDown(D)D
 | |
| 
 | |
|     move-result-wide v12
 | |
| 
 | |
|     .line 7
 | |
|     invoke-static {v12, v13}, Ljava/lang/Math;->floor(D)D
 | |
| 
 | |
|     move-result-wide v14
 | |
| 
 | |
|     double-to-long v14, v14
 | |
| 
 | |
|     move-wide/from16 v18, v4
 | |
| 
 | |
|     move-wide v4, v14
 | |
| 
 | |
|     move-wide v14, v2
 | |
| 
 | |
|     move-wide v2, v12
 | |
| 
 | |
|     move-wide/from16 v12, v18
 | |
| 
 | |
|     :goto_1
 | |
|     sub-long v4, v0, v4
 | |
| 
 | |
|     sub-long v16, v12, v0
 | |
| 
 | |
|     cmp-long v6, v12, v6
 | |
| 
 | |
|     const-wide/16 v7, 0x1
 | |
| 
 | |
|     if-nez v6, :cond_2
 | |
| 
 | |
|     add-long v16, v16, v7
 | |
| 
 | |
|     :cond_2
 | |
|     move-wide/from16 v12, v16
 | |
| 
 | |
|     .line 8
 | |
|     invoke-static {v4, v5, v12, v13}, Lcom/google/common/primitives/Longs;->compare(JJ)I
 | |
| 
 | |
|     move-result v4
 | |
| 
 | |
|     if-gez v4, :cond_3
 | |
| 
 | |
|     return-wide v2
 | |
| 
 | |
|     :cond_3
 | |
|     if-lez v4, :cond_4
 | |
| 
 | |
|     return-wide v14
 | |
| 
 | |
|     .line 9
 | |
|     :cond_4
 | |
|     invoke-virtual/range {p2 .. p2}, Ljava/math/RoundingMode;->ordinal()I
 | |
| 
 | |
|     move-result v4
 | |
| 
 | |
|     aget v4, v9, v4
 | |
| 
 | |
|     const/4 v5, 0x6
 | |
| 
 | |
|     if-eq v4, v5, :cond_9
 | |
| 
 | |
|     const/4 v5, 0x7
 | |
| 
 | |
|     if-eq v4, v5, :cond_7
 | |
| 
 | |
|     const/16 v0, 0x8
 | |
| 
 | |
|     if-ne v4, v0, :cond_6
 | |
| 
 | |
|     .line 10
 | |
|     invoke-static {v2, v3}, Lcom/google/common/math/DoubleUtils;->getSignificand(D)J
 | |
| 
 | |
|     move-result-wide v0
 | |
| 
 | |
|     and-long/2addr v0, v7
 | |
| 
 | |
|     const-wide/16 v4, 0x0
 | |
| 
 | |
|     cmp-long v0, v0, v4
 | |
| 
 | |
|     if-nez v0, :cond_5
 | |
| 
 | |
|     goto :goto_2
 | |
| 
 | |
|     :cond_5
 | |
|     move-wide v2, v14
 | |
| 
 | |
|     :goto_2
 | |
|     return-wide v2
 | |
| 
 | |
|     .line 11
 | |
|     :cond_6
 | |
|     new-instance v0, Ljava/lang/AssertionError;
 | |
| 
 | |
|     invoke-direct {v0, v11}, Ljava/lang/AssertionError;-><init>(Ljava/lang/Object;)V
 | |
| 
 | |
|     throw v0
 | |
| 
 | |
|     :cond_7
 | |
|     const-wide/16 v4, 0x0
 | |
| 
 | |
|     cmp-long v0, v0, v4
 | |
| 
 | |
|     if-ltz v0, :cond_8
 | |
| 
 | |
|     move-wide v2, v14
 | |
| 
 | |
|     :cond_8
 | |
|     return-wide v2
 | |
| 
 | |
|     :cond_9
 | |
|     const-wide/16 v4, 0x0
 | |
| 
 | |
|     cmp-long v0, v0, v4
 | |
| 
 | |
|     if-ltz v0, :cond_a
 | |
| 
 | |
|     goto :goto_3
 | |
| 
 | |
|     :cond_a
 | |
|     move-wide v2, v14
 | |
| 
 | |
|     :goto_3
 | |
|     return-wide v2
 | |
| 
 | |
|     :pswitch_1
 | |
|     if-gtz v8, :cond_b
 | |
| 
 | |
|     goto :goto_4
 | |
| 
 | |
|     .line 12
 | |
|     :cond_b
 | |
|     invoke-static {v2, v3}, Ljava/lang/Math;->nextUp(D)D
 | |
| 
 | |
|     move-result-wide v2
 | |
| 
 | |
|     :goto_4
 | |
|     return-wide v2
 | |
| 
 | |
|     :pswitch_2
 | |
|     const-wide/16 v4, 0x0
 | |
| 
 | |
|     cmp-long v0, v0, v4
 | |
| 
 | |
|     if-ltz v0, :cond_d
 | |
| 
 | |
|     if-gtz v8, :cond_c
 | |
| 
 | |
|     goto :goto_5
 | |
| 
 | |
|     .line 13
 | |
|     :cond_c
 | |
|     invoke-static {v2, v3}, Ljava/lang/Math;->nextUp(D)D
 | |
| 
 | |
|     move-result-wide v2
 | |
| 
 | |
|     :goto_5
 | |
|     return-wide v2
 | |
| 
 | |
|     :cond_d
 | |
|     if-ltz v8, :cond_e
 | |
| 
 | |
|     goto :goto_6
 | |
| 
 | |
|     .line 14
 | |
|     :cond_e
 | |
|     invoke-static {v2, v3}, Lcom/google/common/math/DoubleUtils;->nextDown(D)D
 | |
| 
 | |
|     move-result-wide v2
 | |
| 
 | |
|     :goto_6
 | |
|     return-wide v2
 | |
| 
 | |
|     :pswitch_3
 | |
|     if-ltz v8, :cond_f
 | |
| 
 | |
|     goto :goto_7
 | |
| 
 | |
|     .line 15
 | |
|     :cond_f
 | |
|     invoke-static {v2, v3}, Lcom/google/common/math/DoubleUtils;->nextDown(D)D
 | |
| 
 | |
|     move-result-wide v2
 | |
| 
 | |
|     :goto_7
 | |
|     return-wide v2
 | |
| 
 | |
|     :pswitch_4
 | |
|     const-wide/16 v4, 0x0
 | |
| 
 | |
|     cmp-long v0, v0, v4
 | |
| 
 | |
|     if-ltz v0, :cond_11
 | |
| 
 | |
|     if-ltz v8, :cond_10
 | |
| 
 | |
|     goto :goto_8
 | |
| 
 | |
|     .line 16
 | |
|     :cond_10
 | |
|     invoke-static {v2, v3}, Lcom/google/common/math/DoubleUtils;->nextDown(D)D
 | |
| 
 | |
|     move-result-wide v2
 | |
| 
 | |
|     :goto_8
 | |
|     return-wide v2
 | |
| 
 | |
|     :cond_11
 | |
|     if-gtz v8, :cond_12
 | |
| 
 | |
|     goto :goto_9
 | |
| 
 | |
|     .line 17
 | |
|     :cond_12
 | |
|     invoke-static {v2, v3}, Ljava/lang/Math;->nextUp(D)D
 | |
| 
 | |
|     move-result-wide v2
 | |
| 
 | |
|     :goto_9
 | |
|     return-wide v2
 | |
| 
 | |
|     :pswitch_5
 | |
|     if-nez v8, :cond_13
 | |
| 
 | |
|     const/4 v0, 0x1
 | |
| 
 | |
|     goto :goto_a
 | |
| 
 | |
|     :cond_13
 | |
|     const/4 v0, 0x0
 | |
| 
 | |
|     .line 18
 | |
|     :goto_a
 | |
|     invoke-static {v0}, Lcom/google/common/math/MathPreconditions;->checkRoundingUnnecessary(Z)V
 | |
| 
 | |
|     return-wide v2
 | |
| 
 | |
|     :pswitch_data_0
 | |
|     .packed-switch 0x1
 | |
|         :pswitch_5
 | |
|         :pswitch_4
 | |
|         :pswitch_3
 | |
|         :pswitch_2
 | |
|         :pswitch_1
 | |
|         :pswitch_0
 | |
|         :pswitch_0
 | |
|         :pswitch_0
 | |
|     .end packed-switch
 | |
| .end method
 | |
| 
 | |
| .method public static saturatedAdd(JJ)J
 | |
|     .locals 5
 | |
|     .annotation build Lcom/google/common/annotations/Beta;
 | |
|     .end annotation
 | |
| 
 | |
|     add-long v0, p0, p2
 | |
| 
 | |
|     xor-long/2addr p2, p0
 | |
| 
 | |
|     const-wide/16 v2, 0x0
 | |
| 
 | |
|     cmp-long p2, p2, v2
 | |
| 
 | |
|     const/4 p3, 0x1
 | |
| 
 | |
|     const/4 v4, 0x0
 | |
| 
 | |
|     if-gez p2, :cond_0
 | |
| 
 | |
|     move p2, p3
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_0
 | |
|     move p2, v4
 | |
| 
 | |
|     :goto_0
 | |
|     xor-long/2addr p0, v0
 | |
| 
 | |
|     cmp-long p0, p0, v2
 | |
| 
 | |
|     if-ltz p0, :cond_1
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_1
 | |
|     move p3, v4
 | |
| 
 | |
|     :goto_1
 | |
|     or-int p0, p2, p3
 | |
| 
 | |
|     if-eqz p0, :cond_2
 | |
| 
 | |
|     return-wide v0
 | |
| 
 | |
|     :cond_2
 | |
|     const-wide p0, 0x7fffffffffffffffL
 | |
| 
 | |
|     const/16 p2, 0x3f
 | |
| 
 | |
|     ushr-long p2, v0, p2
 | |
| 
 | |
|     const-wide/16 v0, 0x1
 | |
| 
 | |
|     xor-long/2addr p2, v0
 | |
| 
 | |
|     add-long/2addr p2, p0
 | |
| 
 | |
|     return-wide p2
 | |
| .end method
 | |
| 
 | |
| .method public static saturatedMultiply(JJ)J
 | |
|     .locals 9
 | |
|     .annotation build Lcom/google/common/annotations/Beta;
 | |
|     .end annotation
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {p0, p1}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result v0
 | |
| 
 | |
|     not-long v1, p0
 | |
| 
 | |
|     .line 2
 | |
|     invoke-static {v1, v2}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result v1
 | |
| 
 | |
|     add-int/2addr v1, v0
 | |
| 
 | |
|     .line 3
 | |
|     invoke-static {p2, p3}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result v0
 | |
| 
 | |
|     add-int/2addr v0, v1
 | |
| 
 | |
|     not-long v1, p2
 | |
| 
 | |
|     .line 4
 | |
|     invoke-static {v1, v2}, Ljava/lang/Long;->numberOfLeadingZeros(J)I
 | |
| 
 | |
|     move-result v1
 | |
| 
 | |
|     add-int/2addr v1, v0
 | |
| 
 | |
|     const/16 v0, 0x41
 | |
| 
 | |
|     if-le v1, v0, :cond_0
 | |
| 
 | |
|     mul-long/2addr p0, p2
 | |
| 
 | |
|     return-wide p0
 | |
| 
 | |
|     :cond_0
 | |
|     const-wide v2, 0x7fffffffffffffffL
 | |
| 
 | |
|     xor-long v4, p0, p2
 | |
| 
 | |
|     const/16 v0, 0x3f
 | |
| 
 | |
|     ushr-long/2addr v4, v0
 | |
| 
 | |
|     add-long/2addr v4, v2
 | |
| 
 | |
|     const/16 v0, 0x40
 | |
| 
 | |
|     const/4 v2, 0x1
 | |
| 
 | |
|     const/4 v3, 0x0
 | |
| 
 | |
|     if-ge v1, v0, :cond_1
 | |
| 
 | |
|     move v0, v2
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_1
 | |
|     move v0, v3
 | |
| 
 | |
|     :goto_0
 | |
|     const-wide/16 v6, 0x0
 | |
| 
 | |
|     cmp-long v1, p0, v6
 | |
| 
 | |
|     if-gez v1, :cond_2
 | |
| 
 | |
|     move v6, v2
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_2
 | |
|     move v6, v3
 | |
| 
 | |
|     :goto_1
 | |
|     const-wide/high16 v7, -0x8000000000000000L
 | |
| 
 | |
|     cmp-long v7, p2, v7
 | |
| 
 | |
|     if-nez v7, :cond_3
 | |
| 
 | |
|     goto :goto_2
 | |
| 
 | |
|     :cond_3
 | |
|     move v2, v3
 | |
| 
 | |
|     :goto_2
 | |
|     and-int/2addr v2, v6
 | |
| 
 | |
|     or-int/2addr v0, v2
 | |
| 
 | |
|     if-eqz v0, :cond_4
 | |
| 
 | |
|     return-wide v4
 | |
| 
 | |
|     :cond_4
 | |
|     mul-long v2, p0, p2
 | |
| 
 | |
|     if-eqz v1, :cond_6
 | |
| 
 | |
|     .line 5
 | |
|     div-long p0, v2, p0
 | |
| 
 | |
|     cmp-long p0, p0, p2
 | |
| 
 | |
|     if-nez p0, :cond_5
 | |
| 
 | |
|     goto :goto_3
 | |
| 
 | |
|     :cond_5
 | |
|     return-wide v4
 | |
| 
 | |
|     :cond_6
 | |
|     :goto_3
 | |
|     return-wide v2
 | |
| .end method
 | |
| 
 | |
| .method public static saturatedPow(JI)J
 | |
|     .locals 12
 | |
|     .annotation build Lcom/google/common/annotations/Beta;
 | |
|     .end annotation
 | |
| 
 | |
|     const-string v0, "exponent"
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {v0, p2}, Lcom/google/common/math/MathPreconditions;->checkNonNegative(Ljava/lang/String;I)I
 | |
| 
 | |
|     const-wide/16 v0, -0x2
 | |
| 
 | |
|     cmp-long v0, p0, v0
 | |
| 
 | |
|     const/4 v1, 0x0
 | |
| 
 | |
|     const/4 v2, 0x1
 | |
| 
 | |
|     if-ltz v0, :cond_0
 | |
| 
 | |
|     move v0, v2
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_0
 | |
|     move v0, v1
 | |
| 
 | |
|     :goto_0
 | |
|     const-wide/16 v3, 0x2
 | |
| 
 | |
|     cmp-long v3, p0, v3
 | |
| 
 | |
|     if-gtz v3, :cond_1
 | |
| 
 | |
|     move v3, v2
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_1
 | |
|     move v3, v1
 | |
| 
 | |
|     :goto_1
 | |
|     and-int/2addr v0, v3
 | |
| 
 | |
|     const/16 v3, 0x3f
 | |
| 
 | |
|     const-wide v4, 0x7fffffffffffffffL
 | |
| 
 | |
|     const-wide/16 v6, 0x1
 | |
| 
 | |
|     if-eqz v0, :cond_c
 | |
| 
 | |
|     long-to-int p0, p0
 | |
| 
 | |
|     const/4 p1, -0x2
 | |
| 
 | |
|     const-wide/16 v0, -0x1
 | |
| 
 | |
|     if-eq p0, p1, :cond_9
 | |
| 
 | |
|     const/4 p1, -0x1
 | |
| 
 | |
|     if-eq p0, p1, :cond_7
 | |
| 
 | |
|     if-eqz p0, :cond_5
 | |
| 
 | |
|     if-eq p0, v2, :cond_4
 | |
| 
 | |
|     const/4 p1, 0x2
 | |
| 
 | |
|     if-ne p0, p1, :cond_3
 | |
| 
 | |
|     if-lt p2, v3, :cond_2
 | |
| 
 | |
|     return-wide v4
 | |
| 
 | |
|     :cond_2
 | |
|     shl-long p0, v6, p2
 | |
| 
 | |
|     return-wide p0
 | |
| 
 | |
|     .line 2
 | |
|     :cond_3
 | |
|     new-instance p0, Ljava/lang/AssertionError;
 | |
| 
 | |
|     invoke-direct {p0}, Ljava/lang/AssertionError;-><init>()V
 | |
| 
 | |
|     throw p0
 | |
| 
 | |
|     :cond_4
 | |
|     return-wide v6
 | |
| 
 | |
|     :cond_5
 | |
|     if-nez p2, :cond_6
 | |
| 
 | |
|     goto :goto_2
 | |
| 
 | |
|     :cond_6
 | |
|     const-wide/16 v6, 0x0
 | |
| 
 | |
|     :goto_2
 | |
|     return-wide v6
 | |
| 
 | |
|     :cond_7
 | |
|     and-int/lit8 p0, p2, 0x1
 | |
| 
 | |
|     if-nez p0, :cond_8
 | |
| 
 | |
|     goto :goto_3
 | |
| 
 | |
|     :cond_8
 | |
|     move-wide v6, v0
 | |
| 
 | |
|     :goto_3
 | |
|     return-wide v6
 | |
| 
 | |
|     :cond_9
 | |
|     const/16 p0, 0x40
 | |
| 
 | |
|     if-lt p2, p0, :cond_a
 | |
| 
 | |
|     and-int/lit8 p0, p2, 0x1
 | |
| 
 | |
|     int-to-long p0, p0
 | |
| 
 | |
|     add-long/2addr p0, v4
 | |
| 
 | |
|     return-wide p0
 | |
| 
 | |
|     :cond_a
 | |
|     and-int/lit8 p0, p2, 0x1
 | |
| 
 | |
|     if-nez p0, :cond_b
 | |
| 
 | |
|     shl-long p0, v6, p2
 | |
| 
 | |
|     goto :goto_4
 | |
| 
 | |
|     :cond_b
 | |
|     shl-long p0, v0, p2
 | |
| 
 | |
|     :goto_4
 | |
|     return-wide p0
 | |
| 
 | |
|     :cond_c
 | |
|     ushr-long v8, p0, v3
 | |
| 
 | |
|     and-int/lit8 v0, p2, 0x1
 | |
| 
 | |
|     int-to-long v10, v0
 | |
| 
 | |
|     and-long/2addr v8, v10
 | |
| 
 | |
|     add-long/2addr v8, v4
 | |
| 
 | |
|     :cond_d
 | |
|     :goto_5
 | |
|     if-eqz p2, :cond_13
 | |
| 
 | |
|     if-eq p2, v2, :cond_12
 | |
| 
 | |
|     and-int/lit8 v0, p2, 0x1
 | |
| 
 | |
|     if-eqz v0, :cond_e
 | |
| 
 | |
|     .line 3
 | |
|     invoke-static {v6, v7, p0, p1}, Lcom/google/common/math/LongMath;->saturatedMultiply(JJ)J
 | |
| 
 | |
|     move-result-wide v3
 | |
| 
 | |
|     move-wide v6, v3
 | |
| 
 | |
|     :cond_e
 | |
|     shr-int/lit8 p2, p2, 0x1
 | |
| 
 | |
|     if-lez p2, :cond_d
 | |
| 
 | |
|     const-wide v3, -0xb504f333L
 | |
| 
 | |
|     cmp-long v0, v3, p0
 | |
| 
 | |
|     if-lez v0, :cond_f
 | |
| 
 | |
|     move v0, v2
 | |
| 
 | |
|     goto :goto_6
 | |
| 
 | |
|     :cond_f
 | |
|     move v0, v1
 | |
| 
 | |
|     :goto_6
 | |
|     const-wide v3, 0xb504f333L
 | |
| 
 | |
|     cmp-long v3, p0, v3
 | |
| 
 | |
|     if-lez v3, :cond_10
 | |
| 
 | |
|     move v3, v2
 | |
| 
 | |
|     goto :goto_7
 | |
| 
 | |
|     :cond_10
 | |
|     move v3, v1
 | |
| 
 | |
|     :goto_7
 | |
|     or-int/2addr v0, v3
 | |
| 
 | |
|     if-eqz v0, :cond_11
 | |
| 
 | |
|     return-wide v8
 | |
| 
 | |
|     :cond_11
 | |
|     mul-long/2addr p0, p0
 | |
| 
 | |
|     goto :goto_5
 | |
| 
 | |
|     .line 4
 | |
|     :cond_12
 | |
|     invoke-static {v6, v7, p0, p1}, Lcom/google/common/math/LongMath;->saturatedMultiply(JJ)J
 | |
| 
 | |
|     move-result-wide p0
 | |
| 
 | |
|     return-wide p0
 | |
| 
 | |
|     :cond_13
 | |
|     return-wide v6
 | |
| .end method
 | |
| 
 | |
| .method public static saturatedSubtract(JJ)J
 | |
|     .locals 5
 | |
|     .annotation build Lcom/google/common/annotations/Beta;
 | |
|     .end annotation
 | |
| 
 | |
|     sub-long v0, p0, p2
 | |
| 
 | |
|     xor-long/2addr p2, p0
 | |
| 
 | |
|     const-wide/16 v2, 0x0
 | |
| 
 | |
|     cmp-long p2, p2, v2
 | |
| 
 | |
|     const/4 p3, 0x1
 | |
| 
 | |
|     const/4 v4, 0x0
 | |
| 
 | |
|     if-ltz p2, :cond_0
 | |
| 
 | |
|     move p2, p3
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_0
 | |
|     move p2, v4
 | |
| 
 | |
|     :goto_0
 | |
|     xor-long/2addr p0, v0
 | |
| 
 | |
|     cmp-long p0, p0, v2
 | |
| 
 | |
|     if-ltz p0, :cond_1
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_1
 | |
|     move p3, v4
 | |
| 
 | |
|     :goto_1
 | |
|     or-int p0, p2, p3
 | |
| 
 | |
|     if-eqz p0, :cond_2
 | |
| 
 | |
|     return-wide v0
 | |
| 
 | |
|     :cond_2
 | |
|     const-wide p0, 0x7fffffffffffffffL
 | |
| 
 | |
|     const/16 p2, 0x3f
 | |
| 
 | |
|     ushr-long p2, v0, p2
 | |
| 
 | |
|     const-wide/16 v0, 0x1
 | |
| 
 | |
|     xor-long/2addr p2, v0
 | |
| 
 | |
|     add-long/2addr p2, p0
 | |
| 
 | |
|     return-wide p2
 | |
| .end method
 | |
| 
 | |
| .method public static sqrt(JLjava/math/RoundingMode;)J
 | |
|     .locals 8
 | |
|     .annotation build Lcom/google/common/annotations/GwtIncompatible;
 | |
|     .end annotation
 | |
| 
 | |
|     const-string v0, "x"
 | |
| 
 | |
|     .line 1
 | |
|     invoke-static {v0, p0, p1}, Lcom/google/common/math/MathPreconditions;->checkNonNegative(Ljava/lang/String;J)J
 | |
| 
 | |
|     .line 2
 | |
|     invoke-static {p0, p1}, Lcom/google/common/math/LongMath;->fitsInInt(J)Z
 | |
| 
 | |
|     move-result v0
 | |
| 
 | |
|     if-eqz v0, :cond_0
 | |
| 
 | |
|     long-to-int p0, p0
 | |
| 
 | |
|     .line 3
 | |
|     invoke-static {p0, p2}, Lcom/google/common/math/IntMath;->sqrt(ILjava/math/RoundingMode;)I
 | |
| 
 | |
|     move-result p0
 | |
| 
 | |
|     int-to-long p0, p0
 | |
| 
 | |
|     return-wide p0
 | |
| 
 | |
|     :cond_0
 | |
|     long-to-double v0, p0
 | |
| 
 | |
|     .line 4
 | |
|     invoke-static {v0, v1}, Ljava/lang/Math;->sqrt(D)D
 | |
| 
 | |
|     move-result-wide v0
 | |
| 
 | |
|     double-to-long v0, v0
 | |
| 
 | |
|     mul-long v2, v0, v0
 | |
| 
 | |
|     .line 5
 | |
|     sget-object v4, Lcom/google/common/math/LongMath$1;->$SwitchMap$java$math$RoundingMode:[I
 | |
| 
 | |
|     invoke-virtual {p2}, Ljava/math/RoundingMode;->ordinal()I
 | |
| 
 | |
|     move-result p2
 | |
| 
 | |
|     aget p2, v4, p2
 | |
| 
 | |
|     const-wide/16 v4, 0x1
 | |
| 
 | |
|     const/4 v6, 0x1
 | |
| 
 | |
|     const/4 v7, 0x0
 | |
| 
 | |
|     packed-switch p2, :pswitch_data_0
 | |
| 
 | |
|     .line 6
 | |
|     new-instance p0, Ljava/lang/AssertionError;
 | |
| 
 | |
|     invoke-direct {p0}, Ljava/lang/AssertionError;-><init>()V
 | |
| 
 | |
|     throw p0
 | |
| 
 | |
|     :pswitch_0
 | |
|     cmp-long p2, p0, v2
 | |
| 
 | |
|     if-gez p2, :cond_1
 | |
| 
 | |
|     goto :goto_0
 | |
| 
 | |
|     :cond_1
 | |
|     move v6, v7
 | |
| 
 | |
|     :goto_0
 | |
|     int-to-long v2, v6
 | |
| 
 | |
|     sub-long/2addr v0, v2
 | |
| 
 | |
|     mul-long v2, v0, v0
 | |
| 
 | |
|     add-long/2addr v2, v0
 | |
| 
 | |
|     .line 7
 | |
|     invoke-static {v2, v3, p0, p1}, Lcom/google/common/math/LongMath;->lessThanBranchFree(JJ)I
 | |
| 
 | |
|     move-result p0
 | |
| 
 | |
|     int-to-long p0, p0
 | |
| 
 | |
|     add-long/2addr v0, p0
 | |
| 
 | |
|     return-wide v0
 | |
| 
 | |
|     :pswitch_1
 | |
|     cmp-long p0, p0, v2
 | |
| 
 | |
|     if-lez p0, :cond_2
 | |
| 
 | |
|     add-long/2addr v0, v4
 | |
| 
 | |
|     :cond_2
 | |
|     return-wide v0
 | |
| 
 | |
|     :pswitch_2
 | |
|     cmp-long p0, p0, v2
 | |
| 
 | |
|     if-gez p0, :cond_3
 | |
| 
 | |
|     sub-long/2addr v0, v4
 | |
| 
 | |
|     :cond_3
 | |
|     return-wide v0
 | |
| 
 | |
|     :pswitch_3
 | |
|     cmp-long p0, v2, p0
 | |
| 
 | |
|     if-nez p0, :cond_4
 | |
| 
 | |
|     goto :goto_1
 | |
| 
 | |
|     :cond_4
 | |
|     move v6, v7
 | |
| 
 | |
|     .line 8
 | |
|     :goto_1
 | |
|     invoke-static {v6}, Lcom/google/common/math/MathPreconditions;->checkRoundingUnnecessary(Z)V
 | |
| 
 | |
|     return-wide v0
 | |
| 
 | |
|     nop
 | |
| 
 | |
|     :pswitch_data_0
 | |
|     .packed-switch 0x1
 | |
|         :pswitch_3
 | |
|         :pswitch_2
 | |
|         :pswitch_2
 | |
|         :pswitch_1
 | |
|         :pswitch_1
 | |
|         :pswitch_0
 | |
|         :pswitch_0
 | |
|         :pswitch_0
 | |
|     .end packed-switch
 | |
| .end method
 |