|  | # Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file | 
|  | # for details. All rights reserved. Use of this source code is governed by a | 
|  | # BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | .class public LTest; | 
|  |  | 
|  | .super Ljava/lang/Object; | 
|  |  | 
|  | .method static fibonacci(I)I | 
|  | .locals 2 | 
|  |  | 
|  | if-eqz p0, :return | 
|  | const/4 v0, 0x1 | 
|  | if-ne p0, v0, :calc | 
|  |  | 
|  | :return | 
|  | return p0 | 
|  |  | 
|  | :calc | 
|  | add-int/lit8 v0, p0, -0x1 | 
|  | invoke-static {v0}, LTest;->fibonacci(I)I | 
|  | move-result v0 | 
|  | add-int/lit8 v1, p0, -0x2 | 
|  | invoke-static {v1}, LTest;->fibonacci(I)I | 
|  | move-result v1 | 
|  | add-int p0, v0, v1 | 
|  | goto :return | 
|  | .end method | 
|  |  | 
|  | .method static fibonacciLong(J)J | 
|  | .locals 4 | 
|  |  | 
|  | const-wide/16 v2, 0x1 | 
|  | const-wide/16 v0, 0x0 | 
|  | cmp-long v0, p0, v0 | 
|  | if-eqz v0, :return | 
|  | cmp-long v0, p0, v2 | 
|  | if-nez v0, :calc | 
|  |  | 
|  | :return | 
|  | return-wide p0 | 
|  |  | 
|  | :calc | 
|  | sub-long v0, p0, v2 | 
|  | invoke-static {v0, v1}, LTest;->fibonacciLong(J)J | 
|  | move-result-wide v0 | 
|  | const-wide/16 v2, 0x2 | 
|  | sub-long v2, p0, v2 | 
|  | invoke-static {v2, v3}, LTest;->fibonacciLong(J)J | 
|  | move-result-wide v2 | 
|  | add-long p0, v0, v2 | 
|  | goto :return | 
|  | .end method | 
|  |  | 
|  | .method static fibonacciJack(I)I | 
|  | .locals 2 | 
|  |  | 
|  | if-eqz p0, :return | 
|  | const/4 v0, 0x1 | 
|  | if-ne p0, v0, :calc | 
|  |  | 
|  | :return | 
|  | return p0 | 
|  |  | 
|  | :calc | 
|  | add-int/lit8 v0, p0, -0x1 | 
|  | invoke-static {v0}, LTest;->fibonacciJack(I)I | 
|  | move-result v0 | 
|  | add-int/lit8 v1, p0, -0x2 | 
|  | invoke-static {v1}, LTest;->fibonacciJack(I)I | 
|  | move-result v1 | 
|  | add-int/2addr v0, v1 | 
|  | return v0 | 
|  | .end method | 
|  |  | 
|  | .method static fibonacciLongJack(J)J | 
|  | .locals 4 | 
|  |  | 
|  | const-wide/16 v2, 0x1 | 
|  | const-wide/16 v0, 0x0 | 
|  | cmp-long v0, p0, v0 | 
|  | if-eqz v0, :return | 
|  | cmp-long v0, p0, v2 | 
|  | if-nez v0, :calc | 
|  |  | 
|  | :return | 
|  | return-wide p0 | 
|  |  | 
|  | :calc | 
|  | sub-long v0, p0, v2 | 
|  | invoke-static {v0, v1}, LTest;->fibonacciLongJack(J)J | 
|  | move-result-wide v0 | 
|  | const-wide/16 v2, 0x2 | 
|  | sub-long v2, p0, v2 | 
|  | invoke-static {v2, v3}, LTest;->fibonacciLongJack(J)J | 
|  | move-result-wide v2 | 
|  | add-long/2addr v0, v2 | 
|  | return-wide v0 | 
|  | .end method | 
|  |  | 
|  | .method public static main([Ljava/lang/String;)V | 
|  | .registers 5 | 
|  |  | 
|  | sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; | 
|  |  | 
|  | const/16 v1, 0xa | 
|  | invoke-static {v1}, LTest;->fibonacci(I)I | 
|  | move-result v1 | 
|  | invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V | 
|  |  | 
|  | sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; | 
|  | const-wide/16 v2, 0xa | 
|  | invoke-static {v2, v3}, LTest;->fibonacciLong(J)J | 
|  | move-result-wide v2 | 
|  | invoke-virtual {v0, v2, v3}, Ljava/io/PrintStream;->println(J)V | 
|  |  | 
|  | const/16 v1, 0xa | 
|  | invoke-static {v1}, LTest;->fibonacciJack(I)I | 
|  | move-result v1 | 
|  | invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V | 
|  |  | 
|  | sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; | 
|  | const-wide/16 v2, 0xa | 
|  | invoke-static {v2, v3}, LTest;->fibonacciLongJack(J)J | 
|  | move-result-wide v2 | 
|  | invoke-virtual {v0, v2, v3}, Ljava/io/PrintStream;->println(J)V | 
|  |  | 
|  | return-void | 
|  | .end method |