1418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
2418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager// for details. All rights reserved. Use of this source code is governed by a
3418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager// BSD-style license that can be found in the LICENSE file.
4418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
5418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager// This code is not run directly. It needs to be compiled to dex code.
6418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager// 'arithmetic.dex' is what is run.
7418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
8418d1ca139ea11316113beafbb3b3dd3fd5587aMads Agerpackage arithmetic;
9418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
10418d1ca139ea11316113beafbb3b3dd3fd5587aMads Agerimport java.util.Arrays;
11418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
12418d1ca139ea11316113beafbb3b3dd3fd5587aMads Agerpublic class Arithmetic {
13418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  static void addInts(int[] ints) {
14418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    int result = 0;
15418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    for (int i : ints) {
16418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager      result += i;
17418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    }
18418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println("addInts: " + Arrays.toString(ints) + " = " + result);
19418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  }
20418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
21418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  static void addDoubles(double[] doubles) {
22418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    double result = 0;
23418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    for (double d : doubles) {
24418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager      result += d;
25418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    }
26418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println("addDoubles: " + Arrays.toString(doubles) + " = " + result);
27418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  }
28418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
29418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  static void addLongs(long[] longs) {
30418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    long result = 0;
31418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    for (long l : longs) {
32418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager      result += l;
33418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    }
34418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println("addLongs: " + Arrays.toString(longs) + " = " + result);
35418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  }
36418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
37418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  static void binaryOps() {
38418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    int i = 0;
39418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println("i values:");
40418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    i = i + 1;
41418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(i);
42418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    i = 1 + i;
43418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(i);
44418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    i = i * 4;
45418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(i);
46418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    i = i * i;
47418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(i);
48418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    i = 4 * i;
49418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(i);
50418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    i = i / 4;
51418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(i);
52418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    i = i / i;
53418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(i);
54418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    i = i % i;
55418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(i);
56418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
57418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    long l = 0;
58418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println("l values:");
59418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    l = l + 1;
60418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(l);
61418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    l = 1 + l;
62418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(l);
63418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    l = l * 4;
64418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(l);
65418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    l = l * l;
66418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(l);
67418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    l = 4 * l;
68418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(l);
69418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    l = l / 4;
70418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(l);
71418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    l = l / l;
72418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(l);
73418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    l = l % l;
74418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(l);
75418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
76418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    double d = 0.0;
77418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println("d values: ");
78418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    d = d + 1.0;
79418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(d);
80418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    d = 1.0 + d;
81418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(d);
82418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    d = d * 4.0;
83418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(d);
84418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    d = d * d;
85418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(d);
86418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    d = 4.0 * d;
87418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(d);
88418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    d = d / 4.0;
89418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(d);
90418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    d = d / d;
91418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(d);
92418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    d = d % d;
93418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(d);
94418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
95418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    float f = 0.0f;
96418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println("f values: ");
97418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    f = f + 1.0f;
98418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(f);
99418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    f = 1.0f + f;
100418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(f);
101418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    f = f * 4.0f;
102418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(f);
103418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    f = f * f;
104418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(f);
105418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    f = 4.0f * f;
106418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(f);
107418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    f = f / 4.0f;
108418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(f);
109418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    f = f / f;
110418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(f);
111418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    f = f % f;
112418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(f);
113418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  }
114418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
115418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  public static void moreOps() {
116418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    int a = 42;
117418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    int b = -a;
118418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    int shiftLeftA = a << 5;
119418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    int shiftRightA = a >> 5;
120418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    int uShiftRightA = -a >>> 5;
121418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(a + b + shiftLeftA + shiftRightA + uShiftRightA);
122418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    float c = 42.42f;
123418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    float d = -c;
124418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(c + d);
125418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    double e = 43.43;
126418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    double f  = -e;
127418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(e + f);
128418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    long g = 5000000000L;
129418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    long h = -g;
130418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    long shiftLeftG = g << 8;
131418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    long shiftRightG = g >> 8;
132418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    long uShiftRightG = -g >>> 8;
133418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(g + h + shiftLeftG + shiftRightG + uShiftRightG);
134418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  }
135418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
136418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  public static void bitwiseInts(int x, int y) {
137418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(x & y);
138418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(x | y);
139418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(x ^ y);
140418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(~x);
141418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  }
142418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
143418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  public static void bitwiseLongs(long x, long y) {
144418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(x & y);
145418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(x | y);
146418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(x ^ y);
147418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    System.out.println(~x);
148418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  }
149418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager
150418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  public static void main(String[] args) {
151418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    addInts(new int[] { });
152418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    addInts(new int[] { 1 });
153418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    addInts(new int[] { 0, 1, 2, 3 });
154418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    addDoubles(new double[] { 0.0 });
155418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    addDoubles(new double[] { 0.0, 1.0, 2.0 });
156418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    addDoubles(new double[] { 0.0, 1.0, 2.0, 3.0 });
157418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    long l = 0x0000000100000000L;
158418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    addLongs(new long[] { });
159418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    addLongs(new long[] { l });
160418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    addLongs(new long[] { l, l + 1, l + 2 });
161418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    binaryOps();
162418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    moreOps();
163418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    bitwiseInts(12345, 54321);
164418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager    bitwiseLongs(54321, 12345);
165418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager  }
166418d1ca139ea11316113beafbb3b3dd3fd5587aMads Ager}
167