diff options
author | Roland Levillain <rpl@google.com> | 2015-07-01 12:47:25 +0100 |
---|---|---|
committer | Roland Levillain <rpl@google.com> | 2015-07-01 12:48:31 +0100 |
commit | 06b66d05a6251d91b5e2516f579bfff5fa49191c (patch) | |
tree | 82edce66106b31acad30562463a78eef1abb68bc /test/521-regression-integer-field-set | |
parent | bbcc01a5a38d28c221c05788e56473a287f57589 (diff) | |
download | art-06b66d05a6251d91b5e2516f579bfff5fa49191c.tar.gz art-06b66d05a6251d91b5e2516f579bfff5fa49191c.tar.bz2 art-06b66d05a6251d91b5e2516f579bfff5fa49191c.zip |
Fix a MOV instruction in Optimizing's x86-64 code generator.
Use `movl' instead of `movw' to store a 32-bit immediate
(integer or reference) into a field.
Also fix art::Location::RegisterOrInt32LongConstant to
properly handle non-long constants.
Change-Id: I34c6ec8eaa1632822a31969f87c9c2d6c5b96326
Diffstat (limited to 'test/521-regression-integer-field-set')
-rw-r--r-- | test/521-regression-integer-field-set/expected.txt | 0 | ||||
-rw-r--r-- | test/521-regression-integer-field-set/info.txt | 3 | ||||
-rw-r--r-- | test/521-regression-integer-field-set/src/Main.java | 58 |
3 files changed, 61 insertions, 0 deletions
diff --git a/test/521-regression-integer-field-set/expected.txt b/test/521-regression-integer-field-set/expected.txt new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/521-regression-integer-field-set/expected.txt diff --git a/test/521-regression-integer-field-set/info.txt b/test/521-regression-integer-field-set/info.txt new file mode 100644 index 0000000000..62f7e3dc23 --- /dev/null +++ b/test/521-regression-integer-field-set/info.txt @@ -0,0 +1,3 @@ +Regression test for Optimizing's x86-64 code generator, where moving a +32-bit immediate (integer or reference) into a field used to generate +a `movw` instruction instead of a `movl` instruction. diff --git a/test/521-regression-integer-field-set/src/Main.java b/test/521-regression-integer-field-set/src/Main.java new file mode 100644 index 0000000000..9924e09f0f --- /dev/null +++ b/test/521-regression-integer-field-set/src/Main.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +class Main { + public static void assertIntEquals(int expected, int result) { + if (expected != result) { + throw new Error("Expected: " + expected + ", found: " + result); + } + } + + public static void main(String[] args) { + Main m = new Main(); + + m.$noinline$SetInstanceField(); + assertIntEquals(123456, m.i); + + $noinline$SetStaticField(); + assertIntEquals(456789, s); + } + + private static boolean doThrow = false; + + private void $noinline$SetInstanceField() { + if (doThrow) { + // Try defeating inlining. + throw new Error(); + } + + // Set a value than does not fit in a 16-bit (signed) integer. + i = 123456; + } + + private static void $noinline$SetStaticField() { + if (doThrow) { + // Try defeating inlining. + throw new Error(); + } + + // Set a value than does not fit in a 16-bit (signed) integer. + s = 456789; + } + + private int i = 0; + private static int s = 0; +} |