summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorAndy McFadden <fadden@android.com>2011-03-11 17:05:33 -0800
committerAndy McFadden <fadden@android.com>2011-03-14 15:36:04 -0700
commit71c1771a0ca30b09653de88f6a9c714dec7a61b7 (patch)
treec901d06e25e557c256800e1b122457fb5687a410 /tests
parent8f28ebb65f231d2134f52f5d140d8524f7b85ed7 (diff)
downloadandroid_dalvik-71c1771a0ca30b09653de88f6a9c714dec7a61b7.tar.gz
android_dalvik-71c1771a0ca30b09653de88f6a9c714dec7a61b7.tar.bz2
android_dalvik-71c1771a0ca30b09653de88f6a9c714dec7a61b7.zip
Replace jumbo opcodes in certain circumstances
With this change we will start using some dexopt-generated "jumbo" opcodes for volatile field accesses and calls to Object.<init>. These are necessary for correctness. Fixed a bug that could prevent volatile fields in huge objects from being handled correctly. Also, return "void" from some functions whose return value is never examined. Change-Id: I2a7fc66b59953ed3a6f4ac507873101de5d101d5
Diffstat (limited to 'tests')
-rw-r--r--tests/089-jumbo-opcodes/src/Main.java78
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/089-jumbo-opcodes/src/Main.java b/tests/089-jumbo-opcodes/src/Main.java
index 44aa1337f..95f5a16e9 100644
--- a/tests/089-jumbo-opcodes/src/Main.java
+++ b/tests/089-jumbo-opcodes/src/Main.java
@@ -28,8 +28,11 @@ public class Main {
// Test static put/get
testStaticInt();
+ testStaticVolatileInt();
testStaticWide();
+ testStaticVolatileWide();
testStaticObject();
+ testStaticVolatileObject();
testStaticBoolean();
testStaticByte();
testStaticChar();
@@ -38,8 +41,11 @@ public class Main {
// Test field put/get
JumboField fieldTest = new JumboField();
testFieldInt(fieldTest);
+ testFieldVolatileInt(fieldTest);
testFieldWide(fieldTest);
+ testFieldVolatileWide(fieldTest);
testFieldObject(fieldTest);
+ testFieldVolatileObject(fieldTest);
testFieldBoolean(fieldTest);
testFieldByte(fieldTest);
testFieldChar(fieldTest);
@@ -90,6 +96,39 @@ public class Main {
}
}
+ // Test sput-volatile/jumbo & sget-volatile/jumbo
+ public static void testStaticVolatileInt() {
+ int putInt = 0x12345678;
+ JumboStatic.testVolatileInt = putInt;
+ int getInt = JumboStatic.testVolatileInt;
+ if (putInt != getInt) {
+ System.out.println("Static put int: " + putInt +
+ " does not match static get int: " + getInt);
+ }
+ }
+
+ // Test sput-wide-volatile/jumbo & sget-wide-volatile/jumbo
+ public static void testStaticVolatileWide() {
+ long putWide = 0xfedcba9876543210l;
+ JumboStatic.testVolatileWide = putWide;
+ long getWide = JumboStatic.testVolatileWide;
+ if (putWide != getWide) {
+ System.out.println("Static put wide: " + putWide +
+ " does not match static get wide: " + getWide);
+ }
+ }
+
+ // Test sput-object-volatile/jumbo & sget-object-volatile/jumbo
+ public static void testStaticVolatileObject() {
+ Object putObject = new Object();
+ JumboStatic.testVolatileObject = putObject;
+ Object getObject = JumboStatic.testVolatileObject;
+ if (putObject != getObject) {
+ System.out.println("Static put object: " + putObject +
+ " does not match static get object: " + getObject);
+ }
+ }
+
// Test sput-boolean/jumbo & sget-boolean/jumbo
public static void testStaticBoolean() {
boolean putBoolean = true;
@@ -167,6 +206,39 @@ public class Main {
}
}
+ // Test iput-volatile/jumbo & iget-volatile/jumbo
+ public static void testFieldVolatileInt(JumboField fieldTest) {
+ int putInt = 0x12345678;
+ fieldTest.testVolatileInt = putInt;
+ int getInt = fieldTest.testVolatileInt;
+ if (putInt != getInt) {
+ System.out.println("Field put int: " + putInt +
+ " does not match field get int: " + getInt);
+ }
+ }
+
+ // Test iput-wide-volatile/jumbo & iget-wide-volatile/jumbo
+ public static void testFieldVolatileWide(JumboField fieldTest) {
+ long putWide = 0xfedcba9876543210l;
+ fieldTest.testVolatileWide = putWide;
+ long getWide = fieldTest.testVolatileWide;
+ if (putWide != getWide) {
+ System.out.println("Field put wide: " + putWide +
+ " does not match field get wide: " + getWide);
+ }
+ }
+
+ // Test iput-object-volatile/jumbo & iget-object-volatile/jumbo
+ public static void testFieldVolatileObject(JumboField fieldTest) {
+ Object putObject = new Object();
+ fieldTest.testVolatileObject = putObject;
+ Object getObject = fieldTest.testVolatileObject;
+ if (putObject != getObject) {
+ System.out.println("Field put object: " + putObject +
+ " does not match field get object: " + getObject);
+ }
+ }
+
// Test iput-boolean/jumbo & iget-boolean/jumbo
public static void testFieldBoolean(JumboField fieldTest) {
boolean putBoolean = true;
@@ -271,6 +343,9 @@ class JumboStatic {
static byte testByte;
static char testChar;
static short testShort;
+ static volatile int testVolatileInt;
+ static volatile long testVolatileWide;
+ static volatile Object testVolatileObject;
}
class JumboField {
@@ -332,6 +407,9 @@ class JumboField {
byte testByte;
char testChar;
short testShort;
+ volatile int testVolatileInt;
+ volatile long testVolatileWide;
+ volatile Object testVolatileObject;
}
class JumboMethodSuper {