blob: f76b9b3ee707567d6737dc89e9ec7a36fad323ab [file] [log] [blame]
# 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 addMinusOne(I)I
.locals 1
const/4 v0, -1
add-int v0, p0, v0
return v0
.end method
.method static addTwoConstants()I
.locals 2
const/4 v0, 1
const/4 v1, 2
add-int v0, v0, v1
return v0
.end method
.method static addSameTwoConstants()I
.locals 2
const/4 v0, 1
add-int v0, v0, v0
return v0
.end method
.method static subMinusOne(I)I
.locals 1
const/4 v0, -1
sub-int v0, p0, v0
return v0
.end method
.method static subSameTwoConstants()I
.locals 2
const/4 v0, 1
sub-int v0, v0, v0
return v0
.end method
.method static subtractConstants()I
.locals 9
const/4 v0, 0
const v1, 127 # Max 8-bit signed integer.
const v2, -128 # Min 8-bit signed integer.
const v3, 128 # Max 8-bit signed integer plus one.
const v4, -129 # Min 8-bit signed integer minus one.
const v5, 32767 # Max 16-bit signed integer.
const v6, -32768 # Min 16-bit signed integer.
const v7, 32768 # Max 16-bit signed integer plus one.
const v8, -32769 # Min 16-bit signed integer minus one.
sub-int v0, v0, v1
sub-int v0, v0, v2
sub-int v0, v0, v3
sub-int v0, v0, v4
sub-int v0, v0, v5
sub-int v0, v0, v6
sub-int v0, v0, v7
sub-int v0, v0, v8
sub-int v0, v1, v0
sub-int v0, v2, v0
sub-int v0, v3, v0
sub-int v0, v4, v0
sub-int v0, v5, v0
sub-int v0, v6, v0
sub-int v0, v7, v0
sub-int v0, v8, v0
return v0
.end method
.method static sixteenIntArgMethod(IIIIIIIIIIIIIIII)V
.locals 0
return-void
.end method
# Same code as subtractConstants, but try to force the register allocator to allocate registers for
# the arithmetic operations above 15.
.method static subtractConstants8bitRegisters()I
.locals 32
const/4 v0, 0
const v1, 127 # Max 8-bit signed integer.
const v2, -128 # Min 8-bit signed integer.
const v3, 128 # Max 8-bit signed integer plus one.
const v4, -129 # Min 8-bit signed integer minus one.
const v5, 32767 # Max 16-bit signed integer.
const v6, -32768 # Min 16-bit signed integer.
const v7, 32768 # Max 16-bit signed integer plus one.
const v8, -32769 # Min 16-bit signed integer minus one.
const v9, 9
const v10, 10
const v11, 11
const v12, 12
const v13, 13
const v14, 14
const v15, 15
sub-int v16, v0, v1
sub-int v17, v16, v2
sub-int v18, v17, v3
sub-int v19, v18, v4
sub-int v20, v19, v5
sub-int v21, v20, v6
sub-int v22, v21, v7
sub-int v23, v22, v8
sub-int v24, v1, v23
sub-int v25, v2, v24
sub-int v26, v3, v25
sub-int v27, v4, v26
sub-int v28, v5, v27
sub-int v29, v6, v28
sub-int v30, v7, v29
sub-int v31, v8, v30
invoke-static/range {v16 .. v31}, LTest;->sixteenIntArgMethod(IIIIIIIIIIIIIIII)V
return v31
.end method
.method static addConstantUsedTwice()I
.locals 4
const/4 v0, 0
const/4 v1, 1
add-int/2addr v0, v1
add-int/2addr v0, v1
return v0
.end method
.method static addTwoLongConstants()J
.locals 4
const-wide v0, 1
const-wide v2, 2
add-long v0, v0, v2
return-wide v0
.end method
.method static addTwoDoubleConstants()D
.locals 4
const-wide v0, 0x3ff0000000000000L # 1.0
const-wide v2, 0x4000000000000000L # 2.0
add-double v0, v0, v2
return-wide v0
.end method
.method static cmpFold()I
.locals 4
const-wide v0, 0
const-wide v2, 0
cmp-long v0, v0, v2
return v0
.end method
.method static addFoldLeft(I)I
.locals 2
const/4 v0, 1
const/4 v1, 2
add-int/2addr v0, v1
add-int/2addr v0, p0
return v0
.end method
.method static subFoldLeft(I)I
.locals 2
const/4 v0, 1
const/4 v1, 2
sub-int/2addr v0, v1
sub-int/2addr v0, p0
return v0
.end method
.method public static main([Ljava/lang/String;)V
.locals 3
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
# Calculate: 0 + (-1).
const/4 v1, 0
invoke-static {v1}, LTest;->addMinusOne(I)I
move-result v1
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
invoke-static {}, LTest;->addTwoConstants()I
move-result v1
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
invoke-static {}, LTest;->addSameTwoConstants()I
move-result v1
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
invoke-static {}, LTest;->addTwoLongConstants()J
move-result-wide v1
invoke-virtual {v0, v1, v2}, Ljava/io/PrintStream;->println(J)V
invoke-static {}, LTest;->addTwoDoubleConstants()D
move-result-wide v1
invoke-virtual {v0, v1, v2}, Ljava/io/PrintStream;->println(D)V
# Calculate: 0 - (-1).
const/4 v1, 0
invoke-static {v1}, LTest;->subMinusOne(I)I
move-result v1
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
invoke-static {}, LTest;->subSameTwoConstants()I
move-result v1
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
invoke-static {}, LTest;->subtractConstants()I
move-result v1
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
invoke-static {}, LTest;->subtractConstants8bitRegisters()I
move-result v1
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
invoke-static {}, LTest;->addConstantUsedTwice()I
move-result v1
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
const/4 v1, 1
invoke-static {v1}, LTest;->addFoldLeft(I)I
move-result v1
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
const/4 v1, 1
invoke-static {v1}, LTest;->subFoldLeft(I)I
move-result v1
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
return-void
.end method