diff options
author | Andy McFadden <fadden@android.com> | 2011-03-11 17:05:33 -0800 |
---|---|---|
committer | Andy McFadden <fadden@android.com> | 2011-03-14 15:36:04 -0700 |
commit | 71c1771a0ca30b09653de88f6a9c714dec7a61b7 (patch) | |
tree | c901d06e25e557c256800e1b122457fb5687a410 /tests | |
parent | 8f28ebb65f231d2134f52f5d140d8524f7b85ed7 (diff) | |
download | android_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.java | 78 |
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 { |