diff options
author | Nicolas Geoffray <ngeoffray@google.com> | 2014-10-15 18:31:05 +0100 |
---|---|---|
committer | Nicolas Geoffray <ngeoffray@google.com> | 2014-10-21 16:03:51 +0100 |
commit | 102cbed1e52b7c5f09458b44903fe97bb3e14d5f (patch) | |
tree | cb0a433c8f284021298c8a0c4dd0da97ca9d198a /test/410-floats | |
parent | 07f5c5edb7ef24ac35364e6ef9a8107a44e6564e (diff) | |
download | art-102cbed1e52b7c5f09458b44903fe97bb3e14d5f.zip art-102cbed1e52b7c5f09458b44903fe97bb3e14d5f.tar.gz art-102cbed1e52b7c5f09458b44903fe97bb3e14d5f.tar.bz2 |
Implement register allocator for floating point registers.
Also:
- Fix misuses of emitting the rex prefix in the x86_64 assembler.
- Fix movaps code generation in the x86_64 assembler.
Change-Id: Ib6dcf6e7c4a9c43368cfc46b02ba50f69ae69cbe
Diffstat (limited to 'test/410-floats')
-rw-r--r-- | test/410-floats/src/Main.java | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/test/410-floats/src/Main.java b/test/410-floats/src/Main.java index d8d6fac..2300457 100644 --- a/test/410-floats/src/Main.java +++ b/test/410-floats/src/Main.java @@ -17,9 +17,10 @@ public class Main { public static void main(String[] args) { assertEquals(4.2f, returnFloat()); - float[] a = new float[1]; + float[] a = new float[2]; a[0] = 42.2f; - assertEquals(42.2f, returnFloat(a)); + a[1] = 3.2f; + assertEquals(45.4f, returnFloat(a)); assertEquals(4.4, returnDouble()); double[] b = new double[1]; @@ -36,6 +37,9 @@ public class Main { assertEquals(3.1, invokeTakeADouble(3.1)); assertEquals(12.7, invokeTakeThreeDouble(3.1, 4.4, 5.2)); assertEquals(12.7f, invokeTakeThreeFloat(3.1f, 4.4f, 5.2f)); + + testArrayOperations(new float[2], 0, 1.2f, 3.4f); + testArrayOperations(new double[2], 0, 4.1, 7.6); } public static float invokeReturnFloat() { @@ -51,7 +55,7 @@ public class Main { } public static float returnFloat(float[] a) { - return a[0]; + return a[0] + a[1]; } public static double returnDouble() { @@ -94,6 +98,34 @@ public class Main { return takeThreeFloat(a, b, c); } + // Test simple operations on a float array to ensure the register allocator works + // properly. + public static void testArrayOperations(float[] a, int index, float value1, float value2) { + a[0] = value1; + a[1] = value2; + assertEquals(value1 + value2, a[0] + a[1]); + a[0] = 0.0f; + a[1] = 0.0f; + assertEquals(0.0f, a[0] + a[1]); + a[index] = value1; + a[index + 1] = value2; + assertEquals(value1 + value2, a[0] + a[1]); + } + + // Test simple operations on a double array to ensure the register allocator works + // properly. + public static void testArrayOperations(double[] a, int index, double value1, double value2) { + a[0] = value1; + a[1] = value2; + assertEquals(value1 + value2, a[0] + a[1]); + a[0] = 0.0; + a[1] = 0.0; + assertEquals(0.0, a[0] + a[1]); + a[index] = value1; + a[index + 1] = value2; + assertEquals(value1 + value2, a[0] + a[1]); + } + public static void assertEquals(float expected, float actual) { if (expected != actual) { throw new AssertionError("Expected " + expected + " got " + actual); |